Francesca Mazzia
Dipartimento Interuniversitario di Matematica Universit` a di Bari
MATLAB:Condizionamento Sistemi Lineari.
Innanzitutto vediamo qual’` e la funzione Matlab che ci permette di calco- lare il numero di condizione di una matrice:
>> help cond
COND Condition number with respect to inversion.
COND(X) returns the 2-norm condition number (the ratio of the largest singular value of X to the smallest). Large condition numbers indicate a nearly singular matrix.
COND(X,P) returns the condition number of X in P-norm:
NORM(X,P) * NORM(INV(X),P).
where P = 1, 2, inf, or ’fro.’
See also RCOND, CONDEST, CONDEIG, NORM, NORMEST.
>> A = [ 9 0 1 2
9 3 2 1
4 8 1 0
8 0 6 7]
A =
9 0 1 2
9 3 2 1
4 8 1 0
8 0 6 7
>> cond(A) ans =
23.5314
La matrice A ha numero di condizione piccolo quindi ` e ben condizionata. Ora costruiamo la matrice di Hilbert che ` e una classica matrice mal condizionata e ci calcoliamo il numero di condizione. L’istruzione hilb(N) genera una matrice N per N con elementi 1/(i+j-1),
>> A = hilb(4);
>> cond(A) ans =
1.5514e+04
>> A = hilb(5);
>> cond(A) ans =
4.7661e+05
Il numero di condizione cresce al crescere di N.
>> A = hilb(10);
>> cond(A) ans =
1.6025e+13
Per N=10 la matrice diventa molto mal condizionata. Proviamo a risolvere un sistema lineare usando la function del Matlab, l’algoritmo ` e stabile, ma la soluzione numerica ` e molto diversa da quella teorica. Costruiamoci un vettore con elementi tutti uguali ad 1
>> x = ones(10,1);
>> b=A*x b =
2.9290 2.0199 1.6032 1.3468 1.1682 1.0349 0.9307 0.8467 0.7773 0.7188
Il nostro sistema lineare ha termine noto b e soluzione teorica x, calcoliamo la soluzione numerica:
>> xn = A\b xn =
1.0000
1.0000
1.0000
1.0000
1.0001 0.9997 1.0005 0.9995 1.0002 0.9999
si vede chiaramente che l’errore ` e molto alto,calcoliamo l’errore relativo
>> norm(xn-x,’inf’)/norm(x,’inf’) ans =
4.7006e-04
Se moltiplichiamo la precisione di macchina per il numero di condizione otteniamo:
>> format short e
>> eps*cond(A) ans =
3.5582e-03
Quando risolviamo il sistema perturbato:
(A + δA)δx = δb − δAx l’errore relativo verifica la seguente disuguaglianza:
kδxk
kxk ≤ kA
−1kkAk 1 − kA
−1kkδAk
kδbk
kbk + kδAk kAk
!