matrix factorizations algorithm