私はCのLU分解で作業しています。私のコードは非常に単純です。アルゴリズムは、下三角行列の更新用と上三角行列の更新用の2つのループを使用して並列化できますが、何かを理解できていないようです:(
for (i=0 ; i<N ; i++){
// A[i][i]=1;
for (j=i+1 ;j<N ;j++){
A[j][i] = A[j][i]/A[i][i]; //*Update L*//
}
for (j=i+1;j<N;j++){
for(k=i+1 ;k<N;k++){
A[j][k] = A[j][k] - A[i][k] * A[j][i];//*Update U*//
}
}
}
printf("\n Matrix after U transformation: \n");
print_matrix();
for (i=0 ; i<N ; i++){
A[i][i]=1;
for (j=i+1 ;j<N ;j++){
A[j][i] = A[j][i]/A[i][i]; //*Update L*//
}
for (j=i+1;j<N;j++){
for(k=i+1 ;k<N;k++){
A[j][k] = A[j][k] - A[i][k] * A[j][i];//*Update U*//
}
}
}
printf("\n Matrix after L transformation: \n");
print_matrix();
This is what I should to get ?! what I'm doing wrong
L =
1.0000 0 0 0 0
0.2000 1.0000 0 0 0
0.2000 0.1667 1.0000 0 0
0.2000 0.1667 0.1429 1.0000 0
0.2000 0.1667 0.1429 0.1250 1.0000
U =
50.0000 10.0000 10.0000 10.0000 10.0000
0 48.0000 8.0000 8.0000 8.0000
0 0 46.6667 6.6667 6.6667
0 0 0 45.7143 5.7143
0 0 0 0 45.0000
しかし、私が得たのは、、、、 Lはこのようにすべきではありませんか?!
Source Matrix :
50 10 10 10 10
10 50 10 10 10
10 10 50 10 10
10 10 10 50 10
10 10 10 10 50
Matrix after U transformation:
50 10 10 10 10
0 48 8 8 8
0 0 47 7 7
0 0 0 46 6
0 0 0 0 45
Matrix after L transformation:
1 10 10 10 10
0 1 6 6 6
0 -2 1 16 16
0 -2 9 1 -129
0 -2 9 -134 1
ありがとう