3

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

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

例如,会PColtEJML还是ojAlgo更好的选择?最紧迫的问题主要是一个:我需要迭代计算(通常在2048元素for循环内)最多三个不同矩阵的下三角 Cholesky 因子;矩阵将达到的最大尺寸约为2000x2000

4

2 回答 2

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;
    }
}
于 2013-05-24T18:00:40.673 回答
1

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

这是ojAlgo 和 JAMA 之间各种矩阵分解的另一个比较

于 2013-06-06T13:24:41.997 回答