venerdì 8 ottobre 2010

OCTAVE: risolvere un sistema di equazioni lineari sparso

Supponiamo di aver inizializzato una matrice sparsa Q quadrata di dimensione 8x8.
Inizializziamo un vettore di termini noti, anch'esso sparso, in questo modo:
 b = sparse([1],[1],[1],8,1) 
Il sistema rappresentato da Q e b può essere risolto tramite metodo tradizionale (eliminazione di Gauss) con il seguente comando:
 x = Q \ b 
e tale comando vale sia per le matrici sparse che per quelle piene.

Se la matrice è più grande (molto più grande) possono essere necessari metodi meno tradizionali, potenzialmente meno accurati, ma spesso gli unici efficaci. Il sistema pruò essere risolto tramite metodi iterativi, il seguente comando risolve il sistema usando il metodo iterativo Preconditioned Conjugate Gradient:
 x = pcg(Q,b) 
Per sistemi particolarmente difficili da risolvere possono essere utilizzati dei cosiddetti precondizionatori:
 [L, U, P, R] = luinc (Q,1.e-3) 
x = pcg(Q,b,1.e-6,500,L*U)

Nell'esempio:
1.e-6, rappresenta la soglia di errore sotto la quale la soluzione si considera accettabile
500, rappresenta il numero massimo di iterazioni ammesse

Nessun commento:

Posta un commento