Matlab 高斯消去法不起作用
我试图编写一个程序,使用高斯消去法进行LU分割。我的程序将矩阵A拆分为A=LR,其中L,R是三角矩阵。这非常有效。设Ax=b为方程组。我对程序的输入是(A,b),我想把得到上三角矩阵R的运算应用到b上,就像我们在学校用高斯消去法求解系统一样。那部分似乎不起作用 有人能给我一个提示为什么它不起作用吗Matlab 高斯消去法不起作用,matlab,function,equation,equation-solving,Matlab,Function,Equation,Equation Solving,我试图编写一个程序,使用高斯消去法进行LU分割。我的程序将矩阵A拆分为A=LR,其中L,R是三角矩阵。这非常有效。设Ax=b为方程组。我对程序的输入是(A,b),我想把得到上三角矩阵R的运算应用到b上,就像我们在学校用高斯消去法求解系统一样。那部分似乎不起作用 有人能给我一个提示为什么它不起作用吗 function [ x ] = Gauss( A,b ) n=length(b); for j=1:n-1 if A(j,j)==0 break; end;
function [ x ] = Gauss( A,b )
n=length(b);
for j=1:n-1
if A(j,j)==0
break;
end;
for i=j+1:n
A(i,j)=A(i,j)/A(j,j);
b(j)=b(i)-A(i,j)*b(j)
for k=j+1:n
A(i,k)=A(i,k)-A(i,j)*A(j,k);
end
end
end
b
end
你说你的代码正确地创建了A的上三角矩阵,但它没有。让我给你举个例子 让A和b分开
A =
3 2 3 4
4 3 2 1
1 0 4 0
0 5 0 3
b =
2
4
6
7
如果我们按原样运行代码并查看A和b,我们会得到
A =
3.0000 2.0000 3.0000 4.0000
1.3333 0.3333 -2.0000 -4.3333
0.3333 -2.0000 -1.0000 -10.0000
0 15.0000 -30.0000 -232.0000
b =
7.0000
-203.0000
187.0000
7.0000
它既不是三角形矩阵,也不是我们期望的b。但如果我们稍微修改一下您的程序:
function [ x ] = Gauss( A,b )
n=length(b);
for j=1:n-1
if A(j,j)==0
break;
end;
for i=j+1:n
f=A(i,j)/A(j,j); %%Save the proportion between the rows in a
%%different variable outside the matrix, or
%%you will loose the value that was originally there
b(i)=b(i)-f*b(j); %%The operation has to be done in the row you are currently working
for k=1:n %%You have to make the operation in the full row,
%%not only in the remaining columns, also you can
%%make this without a for loop using `:`
%%indexing, but if you dont know about it,
%%leave as it is, it works
A(i,k)=A(i,k)-f*A(j,k);
end
end
end
A
b
end
你得到这个结果了吗
A =
3.0000 2.0000 3.0000 4.0000
0 0.3333 -2.0000 -4.3333
0 0 -1.0000 -10.0000
0 0 0 -232.0000
b =
2.0000
1.3333
8.0000
227.0000
这是一个上三角矩阵,和我们想要的b。希望您可以从这里开始,作为参考,接下来的步骤应该如下所示
A =
1.0000 0.6667 1.0000 1.3333
0 1.0000 -6.0000 -13.0000
0 0 1.0000 10.0000
0 0 0 1.0000
b =
0.6667
4.0000
-8.0000
-0.9784
然后
其中A已经是一个恒等矩阵,这意味着b已经是我们的答案,我们可以证实这一点
A\b
ans=
-1.1379
1.9871
1.7845
-0.9784
你会犯哪些错误?我注意到的第一件事是,您从未定义输出变量
x
@JensBoldsen Ups。这本不应该是那样的,但我稍后将使用输出向量。得到的b向量是错误的。我做了一些3x3矩阵的例子,高斯消去后的向量是错误的。Je,我刚刚意识到,若你们完全忽略了A矩阵的左下三角形,那个么你们唯一的错误就是b计算中的索引j
I的积分。好吧,我希望我说的其余部分仍然对你有所帮助。我可能应该提到我把L和R放在一个矩阵中,这样对角线上方的所有东西(包括对角线本身)都属于矩阵R,而对角线下方的所有东西都属于L。我没有在对角线中存储L的1,因为没有必要。正如你所指出的,我用b向量修复了这个部分,现在它似乎开始工作了。不管怎样,谢谢。是的,只要您跟踪数据在哪里,就没有任何问题。很高兴我能提供帮助,请将您的问题设置为已回答,以便关闭
A\b
ans=
-1.1379
1.9871
1.7845
-0.9784