Contents
LU dekompozice
smysl = kazdou matici A lze rozepsat jako soucin dvou zarucene trojuhelnikovych matic.
vyuziti : napr. Gauss-Jordanova metoda pracuje prave s maticemi v trojuhelnikovem tvatu
V podstate kod teto fce jen rozepisuje pomoci mnoha FOR cyklu vzorce, uvedene v referenci.
for reference see >>> L-U dekompozice ve skriptech
na vstupu pozadujeme regularni, ctvercovou matici
04.03.2019
A = load ('matice.txt'); % lze predat na vstupu do fce : lu_decomposition (A) n = size(A,1); U = zeros(n); %prepared : nulova L = eye(n); %prepared : na diag jednicky for diagonala = 1:n %predstavuje radek (j) for sloupec = diagonala:n %predstavuje sloupec (j) soucet = 0; for k = 1:(diagonala-1) soucet = soucet + L(diagonala, k) * U(k, sloupec); end U(diagonala,sloupec) = A(diagonala,sloupec) - soucet; end for radek = (diagonala + 1):n soucet = 0; for k = 1:(diagonala - 1) soucet = soucet + L(radek,k) * U(k, diagonala); end L(radek,diagonala) = (A(radek,diagonala) - soucet) / U(diagonala,diagonala); end end %vystup: disp('matrix A was LU-decomposed to matrix L and U >>>') A L U
matrix A was LU-decomposed to matrix L and U >>>
A =
1 1 2 2 3
1 2 3 4 5
5 4 3 2 1
1 2 3 2 1
1 3 1 5 1
L =
1.000000000000000 0 0 0 0
1.000000000000000 1.000000000000000 0 0 0
5.000000000000000 -1.000000000000000 1.000000000000000 0 0
1.000000000000000 1.000000000000000 0 1.000000000000000 0
1.000000000000000 2.000000000000000 0.500000000000000 -1.000000000000000 1.000000000000000
U =
1 1 2 2 3
0 1 1 2 2
0 0 -6 -6 -12
0 0 0 -2 -4
0 0 0 0 -4
kontrolni soucin
'A = '
L*U
ans =
A =
ans =
1 1 2 2 3
1 2 3 4 5
5 4 3 2 1
1 2 3 2 1
1 3 1 5 1
determinanty - zvlastni nesrovnalost
det_L = det(L); det_U = det(U); det_A = det_L * det_U; disp(det_A); disp(det(A)); if (det(A) ~= det_A) error('chyba poctu!!!') end
Error using ==> takepicture at 58 chyba poctu!!!