使用 matlab 的 linsolve 进行 LU 分解

LU decomposition using matlab's linsolve

所以我正在尝试使用 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 = LY; Y = UX;

所以我的困惑来了。

如果我做 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);

提前致谢!

triutril不给你LU分解中的L和U。

他们只给出矩阵的 lower/upper 部分,即

A == LOW + UPP - diag(A)

diag(A)被减去是因为LOWUPP都有A

的对角线部分

LU分解时,L和U要满足

A == L*U

如果你想得到这样的LU,使用

[L,U] = lu(A);