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

  1. ^ Press, William H. (2007). Numerical Recipes 3rd Edition: The Art of Scientific Computing. Cambridge University Press. str. 50–52. ISBN  9780521880688.