【发布时间】:2012-04-20 04:53:44
【问题描述】:
我正在使用 C 语言进行 LU 分解。我的代码非常简单 算法可以使用两个循环并行化,一个用于更新下三角矩阵,一个用于 更新上三角矩阵,但似乎我错过了一些了解:(
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
谢谢
【问题讨论】:
-
您发布了代码并告诉我们您应该得到什么,但没有告诉我们您得到了什么(或者它与预期答案有何不同)。
-
我已经解决了,谢谢你的评论
-
你怎么看?您的代码有几处明显错误,我不得不怀疑您实际上为此付出了多少努力。
-
我非常努力,如果我提交了一个 vesriob,这并不意味着我不会继续添加感谢您的评论。
-
输出有 6 行你都不介意吗?
标签: c algorithm matrix linear-algebra