Laboratorio 10 - 30 novembre 2005
Norme matriciali e numero di condizionamento
Associata a una norma vettoriale si pu`o definire una norma vettoriale kAk := sup
x6=0
kAxk kxk
Le norme vettoriali e matriicali che usaremo pi`u spesso sono:
Norma due o norma euclidea: kxk2= v u u t
n
X
i=1
x2i.
Norma uno: kxk1=
n
X
i=1
|xi|.
Norma infinito: kxk∞= max
1≤i≤n|xi|.
Per calcolare la norma di un vettore o di una matrice si usa il comando norm. norm(A) calcola la norma due di A; norm(A,1) calcola la norma uno di A e norm(A,inf) calcola la norma infinito di A.
Il numero di condizionamento di una matrice quadrata A si definisce χ(A) := kAkkA−1k
cond(A) calcola il numero di condizionamento in norma due della matrice quadrata A.
Il numero di condizionamento `e sempre maggiore o uguale a uno. Se `e molto pi`u grande di uno si dice che la matrice `e mal condizionata.
>> H=hilb(7) H =
1.000000 0.500000 0.333333 0.250000 0.200000 0.166667 0.142857 0.500000 0.333333 0.250000 0.200000 0.166667 0.142857 0.125000 0.333333 0.250000 0.200000 0.166667 0.142857 0.125000 0.111111 0.250000 0.200000 0.166667 0.142857 0.125000 0.111111 0.100000 0.200000 0.166667 0.142857 0.125000 0.111111 0.100000 0.090909 0.166667 0.142857 0.125000 0.111111 0.100000 0.090909 0.083333 0.142857 0.125000 0.111111 0.100000 0.090909 0.083333 0.076923
>> cond(H)
ans = 4.7537e+08
1
I sistemi lineari con matrice mal condizionata sono difficile da risolvere perche la soluzione `e molto sensibile a piccoli errore sui dati.
Il seguente script risolve un sistema lineare con la matrice A che `e la matrice di Hilbert 8 per 8. Il termine noto “esatto” `e scelto in modo che la soluzione
“esatta” sia il vettore di componenti uno, cio´e, il vettore b `e costruito moltipli- cando la matrice di Hilbert 8 per 8 per il vettore colonna di componenti uno.
Poi si considera un sistema con la stessa matrice ma un vettore termine noto c molto simile a b ma non uguale e si confronta la differenza tra i due vettori termine noto b e c e le soluzioni dei due sistemi. La prima `e circa 2.4 · 10−7 e la seconda circa 0.15. Un comportamento simile si osserva se si considera un nuevo sistema lineare con matrice B molto simile a A ma non uguale e con ter- mine noto il vettore b. Comparando la differenza tra le due matrici A e B e le soluzioni dei due sistemi lineari si ottengono risultati simili al caso precedente.
Questa inestabilit`a si spiega osservando che il numero di condizionamento delle matrice A `e molto grande, circa 1.5 · 1010.
A=hilb(8);
b=A*ones(8,1);
x=A\b;
c=b;
c(1)=c(1)+1.e-6;
y=A\c;
ErrTnoto=norm(b-c)/norm(b) ErrSol1=norm(x-y)/norm(x) B=A;
B(1,1)=B(1,1)+1.e-6;
z=B\b;
ErrMat=norm(A-B)/norm(A) ErrSol2=norm(x-z)/norm(x) NC=cond(A)
>> EsNCond
ErrTnoto = 2.4116e-07 ErrSol1 = 0.15034 ErrMat = 5.8964e-07 ErrSol2 = 0.15033 NC = 1.5258e+10
Esercizio
Usando la matrice di Vandermonde calcolare il polinomio interpolatore della funzione f (x) +1+x12 in 9 punti equispaziati dell’intervallo [-5,5].
Cerco un polinomio di grado 8 che `e dato da 9 coefficienti P8(x) = p9x8+ p8x7+ . . . + p2x + p1
2
Se x `e il vettore di 9 punti equispaziati dell’intervallo [-5,5]:
x = (−5, −3.75, −2.5, −1.25, 0, 1.25, 2.5, 3.75, 5)
e y il corripondente vettore yi = f (xi), i = 1, . . . , 9, dobbiamo risolvere il sistema lineare di 9 equazioni
P8(xi) = yi, i = 1, . . . , 9 con 9 incognite (i 9 coeficienti pi).
x8ip9+ x7ip8+ . . . + xip2+ p1= yi, i = 1, . . . , 9 Matricialmente
x81 x71 . . . x1 1 x82 x72 . . . x2 1 ... ... . . . ... ... x89 x79 . . . x9 1
p9 p8
... p1
=
y1 y2
... y9
Usando Octave:
>> x=linspace(-5,5,9);
>> y=1./(1+x.^2);
>> A=vander(x);
>> p=A\y’
p =
0.00014 0.00000 -0.00658 -0.00000 0.09819 -0.00000 -0.52812 -0.00000 1.00000
Per confronto vediamo la soluzione calcolata col comando polyfit
>> polyfit(x,y,8) ans =
1.3744e-04 5.0662e-19 -6.5802e-03 -2.4316e-17
3
9.8188e-02 3.5797e-16 -5.2812e-01 -1.6675e-15 1.0000e+00
4