Condizionamento di sistemi lineari. Ángeles Martínez Calomardo e Alvise Sommariva Università degli Studi di Padova Dipartimento di Matematica Pura e Applicata 10 dicembre 2012 Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 1/ 16
Risoluzione di un sistema lineare in Matlab/Octave Il sistema lineare Ax = b si risolve in Matlab/Octave con il comando A\b. Se A è una matrice quadrata invertibile generale, l operatore \ restituisce la soluzione x = A 1 b calcolata con il metodo di eliminazione di Gauss con pivoting. Esempio: >> A=[10 7 0 ; 3 2 6 ; 5 1 5 ] ; >> b =[7; 4 ; 6 ] ; >> x=a\ b x = 0 1 1 >> A x b ans = 0 0 0 Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 2/ 16
Risoluzione di un sistema lineare in Matlab/Octave Nel caso di termine noto con più colonne, la scrittura A\B, con B = [b 1 b 2... b m ] risolve AX = B, ovvero gli m sistemi lineari Ax i = b i, con X = [x 1 x 2... x m ]. Nel caso di sistemi sovradeterminati (più equazioni che incognite), il comando \ calcola automaticamente la soluzione ai minimi quadrati. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 3/ 16
Condizionamento dei sistemi lineari Consideriamo il sistema di equazioni lineari Ax = b, con A R n n e b R n. In seguito ad una perturbazione δb sul termine noto b (per semplicità, assumiamo δa = 0 R n n ), si ha un errore sul risultato δx = e = x x. Il sistema che si risolve è Da cui, poichè Ax = b, si ha A(x + δx) = b + δb (1) Aδx = b; δx = A 1 δb (2) Rispetto ad una qualsiasi norma matriciale indotta da quella vettoriale, seguono le maggiorazioni δx = A 1 δb A 1 δb (3) b = Ax A x = 1 x A b (4) Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 4/ 16
Condizionamento di un sistema lineare Moltiplicando tra di loro la (3) e la (4), si ha infine dove δx x A A 1 δb b, (5) κ(a) = A A 1 (6) si chiama numero di condizionamento della matrice A. Il numero di condizionamento, κ(a), è sempre maggiore o uguale a 1 in quanto si ha: 1 = I = AA 1 A A 1 = κ(a) Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 5/ 16
Malcondizionamento Considerando che A(x + δx) = b + δb e quindi A x = b + δb = δb = A x b = r la seguente espressione lega la norma dell errore a quella del residuo (relativi): x x x K(A) r b. Per valori molto grandi di κ(a), diciamo per κ(a) > 10 3, l errore relativo sulla soluzione può essere molto grande anche se è piccolo l errore relativo sui dati. Vale a dire che a residuo piccolo può non corrispondere un errore piccolo. Si parla allora di malcondizionamento del sistema o, per abuso di linguaggio, della matrice. Più grande è il condizionamento, meno accurata potrebbe essere la soluzione del sistema lineare. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 6/ 16
Numero di condizionamento in Matlab/Octave Comando cond Il numero κ(a) di una matrice definito come A 2 A 1 2 si calcola in Matlab/Octave con il comando cond. >> A = [ 4 1 2 ; 1 3 1 ; 0 3 5 ] A = 4 1 2 1 3 1 0 3 5 >> cond ( A ) ans = 2. 4249 Specificando come secondo parametro del comando cond uno tra 1, inf, fro si ottiene rispettivamente il numero di condizionamento κ(a) = A A 1 in norma 1, e di Frobenius. >> cond ( A, 1 ) ans = 3. 7183 >> cond ( A, inf ) ans = 3. 1549 >> cond ( A, f r o ) ans = 3. 8379 Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 7/ 16
Esempi di matrici malcondizionate Matrici di Hilbert Una classe di matrici malcondizionate è fornita dalle matrici di 1 Hilbert di ordine n i cui elementi sono h ij = 1 + i + j. In Matlab/Octave tali matrici si creano tramite il comando hilb(n). >> H = h i l b ( 3 ) H = 1. 00000 0. 50000 0. 33333 0. 50000 0. 33333 0. 25000 0. 33333 0. 25000 0. 20000 >> cond ( H ) ans = 5 2 4. 0 6 >> H1 = h i l b ( 1 0 ) ; >> cond ( H1 ) ans = 1. 6025 e+13 Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 8/ 16
Esempi di matrici malcondizionate Matrici di Hilbert Il seguente script (scripthilb.m) crea le matrici di Hilbert di ordine n, per n = 3,..., 15 e ne calcola il numero di condizionamento. f o r n =3:15 H=h i l b ( n ) ; k=cond ( H ) ; f p r i n t f ( \n \ t [N] %3d [COND] %6.4 e, n, k ) end I numeri di condizionamento calcolati sono: [ N ] 3 [ COND ] 5. 2406 e+02 [ N ] 4 [ COND ] 1. 5514 e+04 [ N ] 5 [ COND ] 4. 7661 e+05 [ N ] 6 [ COND ] 1. 4951 e+07 [ N ] 7 [ COND ] 4. 7537 e+08 [ N ] 8 [ COND ] 1. 5258 e+10 [ N ] 9 [ COND ] 4. 9315 e+11 [ N ] 10 [ COND ] 1. 6025 e+13 [ N ] 11 [ COND ] 5. 2232 e+14 [ N ] 12 [ COND ] 1. 6412 e+16 [ N ] 13 [ COND ] 2. 0080 e+18 [ N ] 14 [ COND ] 2. 6795 e+17 [ N ] 15 [ COND ] 3. 8047 e+17 Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 9/ 16
Esempi di matrici malcondizionate Il seguente script (solhilb.m) genera la matrice di Hilbert H di ordine 12 e risolve il sistema lineare Hx = b, dove b è stato calcolato in modo che la soluzione esatta del sistema sia x = [1, 1] T. Lo script calcola anche il numero di condizionamento di H e l errore e il residuo relativi. n = 1 2 ; xvera = ones ( n, 1 ) ; H = h i l b ( n ) ; kappa = cond ( H ) ; f p r i n t f ( \n \ t [COND K 2 (H) ] %3.3 e, kappa ) ; b = H xvera ; x = H\b ; err_rel = norm ( x xvera ) /norm ( xvera ) ; f p r i n t f ( \n \ t [ERRORE RELATIVO ] %3.3 e, err_rel ) ; res_rel = norm ( b H x ) /norm ( b ) ; f p r i n t f ( \n \ t [ RESIDUO RELATIVO ] %3.3 e, res_rel ) ; f p r i n t f ( \n ) ; Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 10/ 16
Commenti all esercizio L esecuzione dello script solhilb.m fornisce i seguenti risultati >> solhilb [ COND K_2 ( H ) ] 1. 6 4 1 e+16 [ ERRORE RELATIVO ] 3. 3 6 9 e 04 [ RESIDUO RELATIVO ] 8. 3 7 9 e 16 >>warning : matrix singular to machine precision, rcond = 2. 45339 e 17 warning : attempting to f i n d minimum norm solution warning : matrix singular to machine precision, rcond = 2. 46963 e 17 warning : attempting to f i n d minimum norm solution warning : dgelsd : rank deficient 12 x12 matrix, rank = 11 Si osserva che: il residuo relativo è inferiore alla precisione di macchina mentre l errore relativo è dell ordine di 10 4. non sorprende: il numero di condizionamento è molto grande. un warning indica che la matrice è molto malcondizionata e quindi i risultati potrebbero non essere attendibili. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 11/ 16
Esempi di matrici malcondizionate Matrice di Vandermonde Un altro esempio di matrice malcondizionata è la matrice di Vandermonde di ordine n, definita a partire da un vettore x = (x 1,, x n ) come V ij = x n j i. In Matlab/Octave tale matrice si crea con il comando vander(x). Come esempio, consideriamo lo script vandercond.m in cui si considera la matrice di Vandermonde della base monomiale in n punti equispaziati dell intervallo [1, 2]: vcond=z e r o s ( 1 0 ) ; f o r n =3:10 x =1:1/( n 1) : 2 ; A=v a n d e r ( x ) c=cond ( A ) vcond ( n )=c ; pause ; end s e m i l o g y ( 3 : 1 0, vcond ( 3 : 1 0 ), r ) ; Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 12/ 16
Esempi di matrici malcondizionate Matrice di Vandermonde 10 12 Condizionamento della matrice di Vandermonde 10 11 10 10 10 9 log(cond(a)) 10 8 10 7 10 6 10 5 10 4 10 3 10 2 3 4 5 6 7 8 9 10 dimensione della matrice n Figura : Grafico in scala semilogaritmica del condizionamento della matrice di Vandermonde al crescere della dimensione n. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 13/ 16
Effetti del malcondizionamento della matrice di Vandermonde. Script illcond.m % xx : n o d i d i i n t e r p o l a z i o n e xx = [ 1 2 0 0. 5 1 2 0 1.5 1 2 0 2.5 1203 1204 1 2 0 5 ] ; y = [ 3 1. 5 1. 5 1 1 0 ] ; n = l e n g t h ( xx ) 1; % grado d e l p o l i n o m i o d i i n t e r p o l a z i o n e % C a l c o l o d e l l i n t e r p o l a n t e t r a m i t e p o l y f i t xval = l i n s p a c e ( xx ( 1 ), xx ( end ) ) ; coef = p o l y f i t ( xx, y, n ) ; yval = p o l y v a l ( coef, xval ) ; % C a l c o l o d e l l i n t e r p o l a n t e con Lagrange f o r i=1: l e n g t h ( xval ) ; yy ( i ) = lagrange ( xx, y, xval ( i ) ) ; end % C a l c o l o d e l p o l. d i i n t p. con f u n z i o n i base monomiali A = v a n d e r ( xx ) ; d i s p ( [ Condizionamento m a t r i c e d i Vandermonde =, num2str ( cond ( A ) ) ] ) coefmono = A\y ; yvalmono = p o l y v a l ( coefmono, xval ) ; h o l d on ; p l o t ( xval, yval, b ) ; p l o t ( xx, y, k+, L i n e w i d t h, 3 ) ; p l o t ( xval, yy, r ) ; p l o t ( xval, yvalmono, g ) ; h o l d off ; l e g e n d ( grado 5 con p o l y f i t, p u n t i, grado 5 con Lagrange, grado 5 con Vandermonde ) Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 14/ 16
Esempi di matrici malcondizionate Matrice di Vandermonde 3 2.5 grado 5 con polyfit punti grado 5 con Lagrange grado 5 con Vandermonde 2 1.5 1 0.5 0 1200 1201 1202 1203 1204 1205 Figura : Esempio degli effetti del malcondizionamento della matrice di Vandermonde sul calcolo del polinomio interpolante. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 15/ 16
Esercizio proposto Data la matrice A = 15 6 8 11 6 6 5 3 8 5 7 6 11 3 6 9 1. Si risolvano i sistemi A 1 x = b 1, A 2 x = b 2, A 3 x = b 3 dove A i = A i, i = 1, 2, 3 e b i = A i ones(4, 1). 2. Si visualizzi il vettore soluzione di ogni sistema con 14 cifre significative. 3. Si spieghino i risultati ottenuti. Ángeles Martínez Calomardo e Alvise Sommariva Condizionamento di sistemi lineari. 16/ 16