Разложение LU с использованием linsolve Matlab

Итак, я пытаюсь решить систему линейных уравнений, используя разложение LU. Я сделал код в Matlab, который я сравниваю с выводом linsolve Matlab. Меня смущает вот что: насколько я понимаю (из того, что я узнал с этого сайта: 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);

Заранее спасибо!


person SDj    schedule 24.09.2016    source источник
comment
stackoverflow.com/documentation/matlab/6163/   -  person StefanM    schedule 24.09.2016


Ответы (1)


triu и tril не дают вам L и U в разложении LU.

Они просто дают записи в нижней/верхней части матрицы, т.е.

A == LOW + UPP - diag(A)

diag(A) вычитается, потому что и LOW, и UPP имеют диагональную часть A.

В разложении LU L и U должны удовлетворять

A == L*U

Если вы хотите получить такие L и U, используйте

[L,U] = lu(A);
person Dohyun    schedule 24.09.2016