Norme di matrici e condizionamento dei sistemi lineari
In questa pagina 8
Un sistema nasce da dati misurati (carichi, proprietà dei materiali, geometria) che hanno incertezze. La domanda è: di quanto può cambiare la soluzione se i dati cambiano di poco? Per un sistema con coefficienti quasi uguali la risposta può essere «moltissimo», e in quel caso nessun algoritmo, per quanto accurato, può rimediare. Per rispondere in modo quantitativo serve un modo di misurare la «grandezza» di vettori e matrici: le norme. Il quadro generale del condizionamento è in Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →; qui si specializza ai sistemi lineari.
Prerequisiti: Prodotto scalare, norma e angoliIl prodotto scalare aggiunge a uno spazio vettoriale lunghezze e angoli: norma, disuguaglianza di Cauchy-Schwarz, angolo tra vettori in R^n, ortogonalità, proiezione su una retta, aree e volumi con il determinante della matrice dei prodotti scalari.Prodotto scalare, norma e angoli →, Autovalori e autovettoriUn autovettore è un vettore non nullo che una funzione lineare manda in un suo multiplo; si trovano gli autovalori come radici del polinomio caratteristico det(A − λI) e gli autovettori come nucleo di A − λI. Matrici simili hanno gli stessi autovalori.Autovalori e autovettori →, Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. È l'ortodiagonalizzazione delle matrici simmetriche reali: serve per le direzioni principali (tensioni, momenti d'inerzia) e permette di scrivere le forme quadratiche come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →, Matrice inversaL'inversa di una matrice quadrata A è la matrice A⁻¹ con A A⁻¹ = A⁻¹ A = I; esiste se e solo se rango(A) = n e si calcola con Gauss-Jordan riducendo (A | I) fino a (I | A⁻¹).Matrice inversa →; la fattorizzazione che risolve il sistema è in Fattorizzazione LU, pivoting e CholeskyRisolvere $A\mathbf x=\mathbf b$ con Gauss equivale a fattorizzare $A=LU$ ($L$ triangolare inferiore con $1$ sulla diagonale e i moltiplicatori $l_{ik}=\frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}$ sotto la diagonale, $U$ la matrice a scala finale) e poi risolvere $L\mathbf y=\mathbf b$ (in avanti) e $U\mathbf x=\mathbf y$ (all'indietro). Esiste (ed è unica) se i minori principali di testa $\det A_k$, $k<n$, sono $\ne0$. Costo $\frac23n^3$ flop per la fattorizzazione, $2n^2$ per ogni termine noto; $\det A=\prod u_{kk}$. Con un pivot piccolo l'algoritmo è instabile: il pivoting parziale (scambio di righe che porta in posizione di pivot l'elemento di modulo massimo della colonna) dà $PA=LU$ con $|l_{ik}|\le1$ ed esiste per ogni $A$ invertibile. Se $A$ è simmetrica definita positiva esiste $A=LL^T$ (Cholesky), con $l_{jj}=\sqrt{a_{jj}-\sum_{k<j}l_{jk}^2}$ e $l_{ij}=\frac{a_{ij}-\sum_{k<j}l_{ik}l_{jk}}{l_{jj}}$; costo $\frac13n^3$, senza pivoting.Fattorizzazione LU, pivoting e Cholesky →.
1. Norme di vettore
Definizione. Una norma su è una funzione con: e solo per ; ; (disuguaglianza triangolare).
Le tre norme usate sono Per : , , . In tutte le norme sono equivalenti: ad esempio e . Per questo una successione che tende a zero in una norma tende a zero in tutte; le costanti però contano nelle stime.
2. Norme di matrice
Una matrice è un'applicazione lineare: la sua «grandezza» è il massimo fattore di cui allunga un vettore.
Definizione (norma indotta). .
Dalla definizione seguono subito per ogni e la proprietà submoltiplicativa (perché ).
Teorema (formule esplicite).
Dimostrazione per . Per ogni , , quindi . Viceversa, se la riga ha somma massima, il vettore ha e : il massimo è raggiunto. (Per è lo stesso scambiando righe e colonne.)
Perché ha gli autovalori di . , forma quadratica con matrice simmetrica semidefinita positiva : il suo massimo su è l'autovalore massimo (Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. È l'ortodiagonalizzazione delle matrici simmetriche reali: serve per le direzioni principali (tensioni, momenti d'inerzia) e permette di scrivere le forme quadratiche come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →). La radice degli autovalori di sono i valori singolari . Se è simmetrica, ha autovalori e .
Raggio spettrale. (autovalori anche complessi). Per ogni norma indotta .
Perché. Se , : , quindi per ogni autovalore. Il raggio spettrale non è una norma (la matrice ha ) ma è l'estremo inferiore delle norme indotte: serve per i metodi iterativi (Metodi iterativi - Jacobi, Gauss-Seidel e convergenzaSi spezza $A=M-N$ con $M$ facile da invertire e si itera $M\mathbf x^{(k+1)}=N\mathbf x^{(k)}+\mathbf b$, cioè $\mathbf x^{(k+1)}=B\mathbf x^{(k)}+\mathbf c$ con $B=M^{-1}N=I-M^{-1}A$. Con $A=D+L+U$ (diagonale, parte strettamente inferiore e superiore): Jacobi $M=D$, $x_i^{(k+1)}=\frac1{a_{ii}}\big(b_i-\sum_{j\ne i}a_{ij}x_j^{(k)}\big)$; Gauss-Seidel $M=D+L$, usa subito i valori nuovi $x_j^{(k+1)}$, $j<i$. Convergenza per ogni $\mathbf x^{(0)}$ se e solo se $\rho(B)<1$ (D); basta $|B|<1$. Matrice a dominanza diagonale stretta per righe: convergono entrambi; $A$ SPD: converge Gauss-Seidel; per matrici tridiagonali $\rho(B_{GS})=\rho(B_J)^2$. Errore: $\mathbf e^{(k)}=B^k\mathbf e^{(0)}$, $|\mathbf e^{(k)}|\le|B|^k|\mathbf e^{(0)}|$ e $|\mathbf x-\mathbf x^{(k)}|\le\frac{|B|}{1-|B|}|\mathbf x^{(k)}-\mathbf x^{(k-1)}|$. Per guadagnare $d$ cifre servono $k\approx\frac d{-\log_{10}\rho(B)}$ iterazioni.Metodi iterativi - Jacobi, Gauss-Seidel e convergenza →).
La norma di Frobenius non è indotta ma è facile da calcolare e vale . Vale anche .
Esempio (). . Somme per colonne: ; ; : . Somme per righe: ; ; : . Frobenius: . Stime per la norma 2: e ; il valore esatto (Python) è .
Esempio (, norma 2 a mano). : , polinomio caratteristico , . Allora (perché ). Gli autovalori di valgono entrambi : , a conferma che può essere molto minore della norma.
3. Numero di condizionamento
Definizione. Per invertibile (con la stessa norma indotta).
Proprietà.
- , perché .
- per : il condizionamento non dipende dalla scala (non è il determinante: ha determinante piccolissimo ma ).
- ; per simmetrica definita positiva (perché gli autovalori di sono ).
- Per una matrice ortogonale (Isometrie e matrici ortogonaliUna matrice Q è ortogonale se QᵀQ = I, cioè se ha colonne (e righe) ortonormali; equivale a conservare prodotto scalare, norme e angoli, ed è la matrice di una isometria lineare. Ha Q⁻¹ = Qᵀ e det Q = ±1. In R² le ortogonali sono le rotazioni (det 1) e le riflessioni rispetto a una retta (det −1); in R³ le rotazioni hanno un asse (autovalore 1) e un angolo con tr Q = 1 + 2 cos θ, le riflessioni rispetto a un piano hanno Q = I − 2nnᵀ/(n·n). Le isometrie affini sono x ↦ Qx + b.Isometrie e matrici ortogonali →) : è la matrice meglio condizionata possibile.
- è anche la distanza (relativa) dalla singolarità: tra le perturbazioni che rendono singolare.
Esempio. ha , quindi e .
Esempio (quasi singolare). ha , , , , quindi . Le due righe sono quasi parallele: le due rette del sistema sono quasi sovrapposte e il loro punto di intersezione si sposta molto per piccole variazioni.
4. Sensibilità della soluzione ai dati
Teorema (perturbazione del termine noto, D). Se e , con ,
Dimostrazione. Sottraendo le equazioni, , cioè e . Da si ha , cioè . Moltiplicando le due disuguaglianze si ottiene la tesi.
Il fattore è l'amplificatore massimo dell'errore relativo sui dati; esistono e per cui la disuguaglianza è un'uguaglianza.
Perturbando anche la matrice: se con , Se il denominatore è e la regola è la stessa: errore relativo sui dati .
Esempio. Con e la soluzione è . Se passa a (, errore relativo ) la soluzione diventa : , errore relativo , cioè 100%. L'amplificazione effettiva è ✓.
Cifre perdute. Se i dati hanno cifre decimali corrette e , la soluzione ha circa cifre corrette. In doppia precisione () con restano circa cifre. Esempio classico: le matrici di Hilbert hanno per , per , per , per .
5. Residuo ed errore
Per un algoritmo si conosce la soluzione calcolata ma non la soluzione vera . Quello che si può calcolare è il residuo . Dato che , l'errore è e (stessi argomenti del teorema, in entrambi i versi):
Se è vicino a , residuo piccolo errore piccolo. Se è grande, un residuo piccolo non dice niente sull'errore: è il motivo per cui il criterio d'arresto «» dei metodi iterativi è affidabile solo per matrici ben condizionate.
Esempio. Con la stessa quasi singolare e : , residuo relativo — minuscolo, eppure ha errore relativo . Il limite superiore lo rispetta.
Collegamento con gli algoritmi. La fattorizzazione LU con pivoting è stabile all'indietro: produce con residuo piccolo, ( precisione di macchina). L'errore finale è allora : la precisione dipende dal condizionamento del problema, non dall'algoritmo.
6. Implementazione
import numpy as np
from numpy.linalg import norm, cond, inv, solve
A = np.array([[1, -2, 3], [0, 4, -1], [-2, 1, 5]], dtype=float)
print("norme 1, inf, F, 2:", norm(A, 1), norm(A, np.inf), round(norm(A, "fro"), 4), round(norm(A, 2), 4))
print("raggio spettrale :", round(max(abs(np.linalg.eigvals(A))), 4))
B = np.array([[1, 1], [1, 1.0001]])
b = np.array([2, 2.0001])
print("cond_inf(B) =", round(cond(B, np.inf), 1))
x = solve(B, b)
x2 = solve(B, b + [0, 1e-4]) # perturbo b2 di 1e-4
print("x =", x.round(6), " x perturbata =", x2.round(6) + 0)
print("amplificazione:", norm(x2 - x, np.inf) / norm(x, np.inf) / (1e-4 / norm(b, np.inf)))
for n in (3, 5, 8, 10): # matrici di Hilbert
H = np.array([[1 / (i + j + 1) for j in range(n)] for i in range(n)])
print("Hilbert", n, f"cond_2 = {cond(H):.2e}")Output:
norme 1, inf, F, 2: 9.0 8.0 7.8102 6.1295
raggio spettrale : 4.3836
cond_inf(B) = 40004.0
x = [1. 1.] x perturbata = [0. 2.]
amplificazione: 20001.0
Hilbert 3 cond_2 = 5.24e+02
Hilbert 5 cond_2 = 4.77e+05
Hilbert 8 cond_2 = 1.53e+10
Hilbert 10 cond_2 = 1.60e+13Equivalenti MATLAB: norm(A,1), norm(A,inf), norm(A) (norma 2), norm(A,'fro'), cond(A) o cond(A,1), rcond(A) (stima di , più economica), hilb(n).
Errori da evitare
- Confondere con : , anche con forte differenza (esempio : , ).
- Scambiare «somma per colonne» e «per righe» nelle norme e .
- Giudicare il condizionamento dal determinante: , mentre .
- Fidarsi del residuo piccolo con grande.
- Usare norme diverse nello stesso rapporto (errore in norma 2, dati in norma ): le stime valgono con la stessa norma; passare da una all'altra costa un fattore .
- Dimenticare che è un limite superiore: il peggioramento effettivo può essere minore, ma esistono dati per cui è raggiunto.
Esercizi svolti: Esercizio - norme e raggio spettrale di matrici 2x2 e 3x3, Esercizio - numero di condizionamento di un sistema 2x2 quasi singolare, Esercizio - residuo ed errore in un sistema ben e mal condizionato, Esercizio - condizionamento della matrice di rigidezza di una catena di molle.
Domande d'esame
- Dare le formule di e e dimostrare quella di . Traccia. Disuguaglianza ; massimo raggiunto con .
- Dimostrare e mostrare che l'uguaglianza può non valere. Traccia. ; .
- Dimostrare che . Che significa in doppia precisione? Traccia. e ; restano circa cifre.
- Perché un residuo piccolo non garantisce un errore piccolo? Quando lo garantisce? Traccia. , ; se (ad esempio ortogonale, SPD con autovalori vicini).
Versione ripasso
(Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →, Fattorizzazione LU, pivoting e CholeskyRisolvere $A\mathbf x=\mathbf b$ con Gauss equivale a fattorizzare $A=LU$ ($L$ triangolare inferiore con $1$ sulla diagonale e i moltiplicatori $l_{ik}=\frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}$ sotto la diagonale, $U$ la matrice a scala finale) e poi risolvere $L\mathbf y=\mathbf b$ (in avanti) e $U\mathbf x=\mathbf y$ (all'indietro). Esiste (ed è unica) se i minori principali di testa $\det A_k$, $k<n$, sono $\ne0$. Costo $\frac23n^3$ flop per la fattorizzazione, $2n^2$ per ogni termine noto; $\det A=\prod u_{kk}$. Con un pivot piccolo l'algoritmo è instabile: il pivoting parziale (scambio di righe che porta in posizione di pivot l'elemento di modulo massimo della colonna) dà $PA=LU$ con $|l_{ik}|\le1$ ed esiste per ogni $A$ invertibile. Se $A$ è simmetrica definita positiva esiste $A=LL^T$ (Cholesky), con $l_{jj}=\sqrt{a_{jj}-\sum_{k<j}l_{jk}^2}$ e $l_{ij}=\frac{a_{ij}-\sum_{k<j}l_{ik}l_{jk}}{l_{jj}}$; costo $\frac13n^3$, senza pivoting.Fattorizzazione LU, pivoting e Cholesky →)
Vettori. , , ; : . Norme equivalenti: .
Matrici. ; , . = max somma per colonne, = max somma per righe, ( se simmetrica). Prova per : , massimo con . ; .
Raggio spettrale. (D: ). : , ha , .
Esempio : , , , .
Condizionamento. , (non è il determinante), , SPD , ortogonale . : , .
Perturbazione (D). , : , . Con : fattore . Cifre perse . Hilbert: (), (5), (8), (10).
Residuo. , : . Con grande residuo piccolo non implica errore piccolo. LU con pivoting: residuo , errore .
Esempio quasi singolare. , . ; ( relativo) dà (100%); amplificazione . : , residuo relativo ma errore relativo .
Passaggi principali.
- Norma 2 a mano: , , .
- : .
- SPD: gli autovalori di sono .
- Residuo: ; i due versi usano e .
- Inversa del sistema quasi singolare: , , , .
- Distanza dalla singolarità: tra le perturbazioni che rendono singolare; non dipende dalla scala ( ha ).
- Cifre: dati con cifre e danno circa cifre; in doppia lascia cifre.
Errori tipici.
- scambiato con la norma.
- Somme per colonne e per righe scambiate.
- Condizionamento giudicato dal determinante.
- Fiducia nel residuo con grande.
Esercizi su questo argomento
- Esercizio - condizionamento della matrice di rigidezza di una catena di molle
- Esercizio - matrici di iterazione e raggio spettrale di sistemi 2x2 e 3x3
- Esercizio - norme e raggio spettrale di matrici 2x2 e 3x3
- Esercizio - numero di condizionamento di un sistema 2x2 quasi singolare
- Esercizio - residuo ed errore in un sistema ben e mal condizionato