Crout matrix rozklad - Crout matrix decomposition
v lineární algebra, Crout matrix rozklad je LU rozklad který se rozkládá a matice do dolní trojúhelníková matice (L), an horní trojúhelníková matice (U) a, i když to není vždy nutné, a permutační matice (P). Byl vyvinut společností Prescott Durand Crout. [1]
Croutova maticová dekompozice algoritmus se mírně liší od Doolittleova metoda. Doolittleova metoda vrací jednotkovou spodní trojúhelníkovou matici a horní trojúhelníkovou matici, zatímco metoda Crout vrací dolní trojúhelníkovou matici a jednotkovou horní trojúhelníkovou matici.
Pokud je tedy maticový rozklad matice A takový, že:
- A = LDU
je L jednotková dolní trojúhelníková matice, D diagonální matice a U jednotková horní trojúhelníková matice, pak Doolittleova metoda produkuje
- A = L (DU)
a Croutova metoda produkuje
- A = (LD) U.
Implementace
C implementace:
prázdnota šmejd(dvojnásobek konst **A, dvojnásobek **L, dvojnásobek **U, int n) { int i, j, k; dvojnásobek součet = 0; pro (i = 0; i < n; i++) { U[i][i] = 1; } pro (j = 0; j < n; j++) { pro (i = j; i < n; i++) { součet = 0; pro (k = 0; k < j; k++) { součet = součet + L[i][k] * U[k][j]; } L[i][j] = A[i][j] - součet; } pro (i = j; i < n; i++) { součet = 0; pro(k = 0; k < j; k++) { součet = součet + L[j][k] * U[k][i]; } -li (L[j][j] == 0) { printf("det (L) blízko 0! n Nelze dělit 0 ... n"); výstup(EXIT_FAILURE); } U[j][i] = (A[j][i] - součet) / L[j][j]; } }}
Implementace Octave / Matlab:
funkce[L, U] =LUdecompCrout(A)[R, C] = velikost(A); pro i = 1: R L(i, 1) = A(i, 1); U(i, i) = 1; konecpro j = 2: R U(1, j) = A(1, j) / L(1, 1); konecpro i = 2: R pro j = 2: i L(i, j) = A(i, j) - L(i, 1:j - 1) * U(1:j - 1, j); konecpro j = i + 1: R U(i, j) = (A(i, j) - L(i, 1:i - 1) * U(1:i - 1, j)) / L(i, i); koneckonec konec
Reference
- ^ Press, William H. (2007). Numerical Recipes 3rd Edition: The Art of Scientific Computing. Cambridge University Press. str. 50–52. ISBN 9780521880688.
- Implementace pomocí funkcí V Matlabu