2016-09-24 17 views
1

Так что я пытаюсь решить систему линейных уравнений с использованием 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 = L Y; Y = U X;Разложение LU с использованием Linsolve Matlab

Так что моя конфуция приходит сюда.

Если я делаю x_solutions = linsolve (A, B), я получаю другой результат: если i 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

http://stackoverflow.com/documentation/matlab/6163/matrix-decompositions#t=201609240746034184022 – StefanM

ответ

2

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

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

A == LOW + UPP - diag(A) 

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

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

A == L*U 

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

[L,U] = lu(A); 

 Смежные вопросы

  • Нет связанных вопросов^_^