2016-09-24 1 views
1

Donc j'essaie de résoudre un système d'équations linéaires en utilisant la décomposition LU. J'ai fait un code dans matlab que je compare avec la sortie de linsolve de matlab. La chose qui me confonds est la suivante: Pour autant que je comprends (d'après ce que j'ai appris de ce site: http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/INT-APP/CURVE-linear-system.html) La décomposition de Lu fonctionne en décomposant A en L (triangulaire inférieur) et U (triangulaire supérieur). Et puis il calcule x en résolvant deux équations: B = L Y; Y = U X;Décomposition de LU en utilisant linsolve de matlab

Donc ma confussion vient ici. Si je fais x_solutions = linsolve (A, B), j'obtiens un résultat différent si je fais x = linsolve (U, y) (bien sûr faire d'abord y = linsolve (L, B)).

Est-ce que quelqu'un sait pourquoi cela se produit? x ne devrait pas être égal à x_solutions dans ce cas ou ai-je manqué quelque chose?

juste pour le plaisir de donner, toutes les informations voici comment je fais:

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); 

Merci à l'avance!

+0

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

Répondre

2

triu et tril ne vous donnent pas la décomposition de L et U dans LU.

Ils donnent juste entrées partie inférieure/supérieure de la matrice, à savoir,

A == LOW + UPP - diag(A) 

diag(A) est soustraites parce que les deux LOW et UPP ont une partie diagonale de A

En décomposition LU, L et U devrait satisfaire

A == L*U 

Si vous voulez obtenir tel L et U, l'utilisation

[L,U] = lu(A);