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.