所以我试图用LU分解求解线性方程组。我在matlab中创建了一个代码,我将它与matlab的linsolve的输出进行比较。令我困惑的是: 据我所知(从我从这个网站上学到的东西:http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/CURVE-linear-system.html)Lu分解的工作原理是将A分解为L(下三角)和U(上三角)。然后它计算x求解两个方程: B = L Y; Y = U X;
所以我的讨论来到这里。
如果我做x_solutions = linsolve(A,B),我会得到一个不同的结果,如果我做x = linsolve(U,y)(当然先做y = linsolve(L,B))。
有人知道为什么会这样吗?在这种情况下x不应该等于x_solutions或者我错过了什么?
只是为了放弃所有信息,这就是我在做的事情:
A=[1 2 6; 1 2 2; 2 2 1];
B=[1 0 1]';
G=linsolve(A,B);
UPP = triu(A);
LOW= tril(A);
y=linsolve(LOW,B);
x=linsolve(UPP,y);
提前谢谢!
答案 0 :(得分:2)
triu
和tril
不会在LU分解中为您提供L和U.
他们只给出矩阵的下/上部条目,即
A == LOW + UPP - diag(A)
减去 diag(A)
因为LOW
和UPP
都有A
在LU分解中,L和U应满足
A == L*U
如果您想获得此类L
和U
,请使用
[L,U] = lu(A);