Per quanto ne so, ci sono 4 modi per risolvere un sistema di equazioni lineari (correggimi se ci sono più):
- Se la matrice di sistema è una matrice quadrata a pieno titolo, è possibile utilizzare la regola di Cramer;
- Calcola l'inverso o lo pseudoinverso della matrice del sistema;
- Utilizzare metodi di decomposizione matriciali (l'eliminazione di Gaussian o Gauss-Jordan è considerata come decomposizione LU);
- Utilizzare metodi iterativi, come il metodo del gradiente coniugato.
In realtà, non vuoi quasi mai risolvere le equazioni usando la regola di Cramer o calcolando l'inverso o lo pseudoinverso, specialmente per le matrici ad alta dimensione, quindi la prima domanda è quando usare i metodi di decomposizione e metodi iterativi, rispettivamente. Immagino che dipenda dalle dimensioni e dalle proprietà della matrice di sistema.
La seconda domanda è, a tua conoscenza, quale tipo di metodi di decomposizione o metodi iterativi sono più adatti per una certa matrice di sistema in termini di stabilità numerica ed efficienza.
Ad esempio, il metodo del gradiente coniugato viene utilizzato per risolvere equazioni in cui la matrice è simmetrica e definita positiva, sebbene possa anche essere applicata a qualsiasi equazione lineare convertendo in . Anche per una matrice definita positiva, è possibile utilizzare il metodo di decomposizione di Cholesky per cercare la soluzione. Ma non so quando scegliere il metodo CG e quando scegliere la decomposizione di Cholesky. La mia sensazione è che dovremmo usare il metodo CG per matrici di grandi dimensioni.
Per le matrici rettangolari, possiamo usare la decomposizione QR o SVD, ma ancora una volta non so come sceglierne una.
Per le altre matrici, ora non so come scegliere il risolutore appropriato, come matrici eremitiche / simmetriche, matrici sparse, matrici di bande ecc.