关于Cholesky分解的最快线性代数库

时间:2013-05-24 17:30:52

标签: java linear-algebra

我真的很想评估你是否有人能指出我在 Cholesky分解方面最优化和计算速度快的线性代数库。

到目前为止,我一直在使用 Apache Commons Math 库,但也许已经有更强大,更好的增强选项。

例如,PColtEJMLojAlgo会有更好的选择吗?最紧迫的问题主要是:我需要迭代计算(一般在2048个元素for循环内)下三角形Cholesky因子,最多三个不同的矩阵;矩阵的最大尺寸大约是 2000x2000

2 个答案:

答案 0 :(得分:2)

Cholesky因子分解是一种非常简单的算法。这是我使用的(未经优化的)C#代码。 C#和Java非常相似,所以你应该很容易转换为Java并做出你认为必要的改进。

public class CholeskyDecomposition {
    public static double[,] Do(double[,] input) {
        int size = input.GetLength(0);
        if (input.GetLength(1) != size)
            throw new Exception("Input matrix must be square");
        double[] p = new double[size];
        double[,] result = new double[size, size];
        Array.Copy(input, result, input.Length);
        for (int i = 0; i < size; i++) {
            for (int j = i; j < size; j++) {
                double sum = result[i, j];
                for (int k = i - 1; k >= 0; k--)
                    sum -= result[i, k] * result[j, k];
                if (i == j) {
                    if (sum < 0.0)
                        throw new Exception("Matrix is not positive definite");
                    p[i] = System.Math.Sqrt(sum);
                } else
                    result[j, i] = sum / p[i];
            }
        }
        for (int r = 0; r < size; r++) {
            result[r, r] = p[r];
            for (int c = r + 1; c < size; c++)
                result[r, c] = 0;
        }
        return result;
    }
}

答案 1 :(得分:1)

查看Java Matrix Benchmark。 “Inver Symm”案例测试使用cholesky分解反转矩阵。如果您获得了基准测试的源代码,那么您还可以打开一个纯粹的cholesky分解测试。

这是另一个comparison of various matrix decompositions between ojAlgo and JAMA