Condizionamento numerico

Indice dei contenuti

    Il condizionamento numerico misura quanto la soluzione di un problema matematico è sensibile a piccole perturbazioni dei dati. È una proprietà del problema, non dell’algoritmo scelto per risolverlo: un algoritmo può essere stabile e accuratamente implementato, ma se il problema è mal condizionato l’errore nei dati può comunque essere amplificato in modo significativo.

    Questa distinzione è essenziale in analisi numerica. Il condizionamento risponde alla domanda: “quanto è difficile il problema in sé?”. La stabilità risponde invece alla domanda: “quanto bene l’algoritmo controlla gli errori prodotti durante il calcolo?”.

    Numero di condizionamento di un problema

    Se un problema associa a un dato x una soluzione y=f(x), il condizionamento relativo locale può essere descritto, in forma semplificata, come

    \kappa(x)\approx \dfrac{\|\delta y\|/\|y\|}{\|\delta x\|/\|x\|}.

    Un valore \kappa(x) vicino a 1 indica che l’errore relativo sui dati si trasferisce con amplificazione moderata. Un valore molto grande indica che piccole variazioni dei dati possono produrre variazioni molto più grandi nella soluzione.

    La norma usata per misurare \delta x e \delta y deve essere coerente con il problema: in algebra lineare si usano spesso norme vettoriali e norme matriciali indotte; in approssimazione, ottimizzazione o simulazione possono essere più significative norme energetiche o norme su funzioni.

    Sistemi lineari

    Per il sistema lineare

    Ax=b,

    con A invertibile, il numero di condizionamento della matrice è

    \kappa(A)=\|A\|\,\|A^{-1}\|.

    In norma euclidea, se A è simmetrica definita positiva, si può scrivere

    \kappa_2(A)=\dfrac{\lambda_{\max}}{\lambda_{\min}},

    dove \lambda_{\max} e \lambda_{\min} sono rispettivamente il massimo e il minimo autovalore positivo. Se \lambda_{\min} è molto piccolo, la matrice è vicina alla singolarità e il sistema è mal condizionato.

    Una stima classica dell’errore relativo è

    \dfrac{\|\delta x\|}{\|x\|} \lesssim \kappa(A)\, \dfrac{\|\delta b\|}{\|b\|}.

    Il simbolo \lesssim ricorda che si tratta di una maggiorazione dipendente dalle ipotesi e dalla norma. Il punto operativo è che un \kappa(A) grande rende rischioso interpretare troppe cifre della soluzione.

    Condizionamento e stabilità

    Condizionamento e stabilità non sono sinonimi. Un problema ben condizionato può essere risolto male da un algoritmo instabile; un problema mal condizionato può essere risolto nel miglior modo possibile da un algoritmo stabile, ma il risultato resterà sensibile ai dati iniziali.

    Per esempio, l’eliminazione di Gauss con pivoting può essere numericamente robusta, ma non elimina il cattivo condizionamento della matrice. Allo stesso modo, nei metodi iterativi come Jacobi o Gauss-Seidel, il raggio spettrale della matrice di iterazione influenza la convergenza, mentre il condizionamento del problema influenza la sensibilità della soluzione finale.

    Interpretazione pratica

    Un numero di condizionamento dell’ordine di 10^k suggerisce, in modo qualitativo, che si possano perdere fino a circa k cifre significative nei casi sfavorevoli. Non è una regola assoluta, ma è un criterio utile per capire se un risultato numerico merita fiducia.

    Quando un problema è mal condizionato, le strategie più comuni sono scalare le variabili, riformulare il modello, usare precondizionatori, aumentare la precisione aritmetica o raccogliere dati più accurati. Nei problemi ai minimi quadrati, nell’inversione di matrici quasi singolari e nelle equazioni differenziali discretizzate, ignorare il condizionamento porta spesso a risultati apparentemente plausibili ma fisicamente instabili.

    Errori comuni

    Il primo errore è attribuire sempre l’errore all’algoritmo: se i dati sono rumorosi e il problema è mal condizionato, nessun algoritmo può recuperare informazione che il problema amplifica o perde. Il secondo è calcolare esplicitamente la matrice inversa per risolvere un sistema: dal punto di vista numerico è spesso preferibile risolvere direttamente il sistema, ad esempio con fattorizzazioni o metodi iterativi.

    Per esercizi collegati ai sistemi lineari e al comportamento dei metodi numerici si vedano anche gli esercizi su Gauss, LU e pivoting e quelli sui metodi iterativi per sistemi lineari.

    Ultimo aggiornamento: