我真的很想评估你是否有人能指出我在 Cholesky分解方面最优化和计算速度快的线性代数库。
到目前为止,我一直在使用 Apache Commons Math 库,但也许已经有更强大,更好的增强选项。
例如,PColt
,EJML
或ojAlgo
会有更好的选择吗?最紧迫的问题主要是:我需要迭代计算(一般在2048
个元素for
循环内)下三角形Cholesky因子,最多三个不同的矩阵;矩阵的最大尺寸大约是 2000x2000 。
答案 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