La fattorizzazione di una matrice simmetrica definita positiva
A nella forma LLT, con L triangolare inferiore, è associata
al metodo di Cholesky. Per ottenere un algoritmo che calcoli la
matrice L basta scrivere elemento per elemento la relazione
A=LLT:
for (j=0; j<n; j++) { for (sum=k=0; k<j; k++) sum += l[j][k]*l[j][k]; l[j][j] = sqrt( a[j][j]-sum ); for (i=j+1; i<n; i++) { for (sum=k=0; k<j; k++) sum += l[i][k]*l[j][k]; l[i][j] = (a[i][j] - sum)/l[j][j]; } }
Tramite la fattorizzazione LLT è si possono risolvere sistemi lineari
molto più velocemente che col metodo di Gauss (perché si riesce
a sfruttare il fatto che A è definita positiva). Il sistema
si trasforma in
,
che viene risolto risolvendo
successivamente
e
.
Si tratta di due sistemi
con matrice triangolare: il primo si risolve con una forward
substitution:
for (i=0; i<n; i++) { sum = 0.; for (j=0; j<i; j++) sum += l[i][j]*y[j]; y[i] = (b[i] - sum) / l[i][i]; }ed il secondo con un'analoga backsubstitution:
for (i=n-1; i>=0; i--) { sum = 0.; for (j=i+1; j<n; j++) sum += l[j][i]*x[j]; x[i] = (y[i] - sum) / l[i][i]; }
Se la matrice A non è definita positiva, il processo di fattorizzazione si blocca perché trova un radicando negativo. Nella pratica, questo è un buon modo per testare se una matrice data è definita positiva (un altro modo sarebbe calcolare gli autovalori, ma è molto più dispendioso!).
Una implementazione del metodo di Cholesky per la fattorizzazione LLT e la risoluzione di sistemi lineari si trova in llt.c.