我在java中编写了这种用于LDL^T分解的方法(它将对称对称矩阵“A”分解为3个矩阵,其中“L”是对角线为1的下三角矩阵,“D”是具有正项的对角矩阵和“L^T”是L)的转置矩阵。想知道是否可以在同一方法中返回 L 和 D 矩阵,如果不是,我该如何拆分此方法。遵循我教科书中的算法(Faires and Douglas 第 9 版第 417 页的数值分析),我的代码仍然有一些我必须弄清楚的逻辑缺陷。所以我的问题是/是我可以在同一方法中返回两种不同类型的数组吗( L[][] 和 D[] 在同一时间所以 D 只返回对角线元素作为一个数组和 L 返回整个矩阵)和/或如何拆分此方法。
public static double[][] Lfactor(double[][] A) {
if (!isSquare(A)) {
throw new RuntimeException("Matrix is not square");
}
if (!isSymmetric(A)) {
throw new RuntimeException("Matrix is not symmetric");
}
int N = A.length;
double[][] L = new double[N][N];
double[] V = new double[N];
double[] D = new double[N];
for(int i=1; i <= N; i++ ){
for(int j=1; j<=i-1;j++){
V[j]= L[i][j]*D[j];
double Sum1 = 0.0;
Sum1+= L[i][j] * V[j];
D[i] = A[i][i] - Sum1;
for( j=i+1; j<=N;j++){
for(int k = 1; k<=i-1; k++){
double Sum2 = 0.0;
Sum2 += L[j][k]*V[k];
L[j][i]= (A[j][i] - Sum2)/D[i];
}
}
}
}
return L;}