15.07.2013 Views

Nota 4. Sistemi di equazioni algebriche lineari - Elettrotecnica

Nota 4. Sistemi di equazioni algebriche lineari - Elettrotecnica

Nota 4. Sistemi di equazioni algebriche lineari - Elettrotecnica

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>4.</strong> <strong>Sistemi</strong> <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong><br />

La soluzione numerica della maggior parte dei problemi <strong>di</strong> interesse nell’ingegneria,<br />

anche molto complessi, si riduce alla soluzione <strong>di</strong> un sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong><br />

<strong>lineari</strong>. Ad esempio, i sistemi a parametri concentrati <strong>lineari</strong> in con<strong>di</strong>zioni stazionarie<br />

sono governati da <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong>. Inoltre, se si risolve un sistema <strong>di</strong><br />

<strong>equazioni</strong> <strong>algebriche</strong> non <strong>lineari</strong> con il metodo <strong>di</strong> Newton-Raphson ad ogni passo<br />

bisogna risolvere un sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong> (ve<strong>di</strong> <strong>Nota</strong> 5). Più in<br />

generale, la <strong>di</strong>scretizzazione <strong>di</strong> <strong>equazioni</strong> <strong>di</strong>fferenziali e integrali <strong>lineari</strong> porta alla<br />

soluzione <strong>di</strong> sistemi <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong> (ve<strong>di</strong> <strong>Nota</strong> 2 e <strong>Nota</strong> 3).<br />

In questa <strong>Nota</strong> considereremo il seguente problema. Dato un vettore b !R n e una<br />

matrice A = a ij<br />

( ) , i, j = 1,2,...,n , si cerca un vettore x !R n tale che<br />

In forma compatta si ha<br />

" a11x1 + a12x2 + ... + a1nx n = b1 $ a21x1 + a22x2 + ... + a2nx n = b2 Ax = b ! #<br />

$<br />

..............................................<br />

% $ an1x1 + an2x 2 + ... + annxn = bn .<br />

n<br />

(<strong>4.</strong>1)<br />

! aijx j = bi i = 1,2,...,n . (<strong>4.</strong>2)<br />

j =1<br />

Il problema (<strong>4.</strong>1) è un sistema <strong>di</strong><br />

det( A)<br />

! 0 , si ha<br />

n <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong> in<br />

n incognite 1 . Se<br />

x = A !1 b (<strong>4.</strong>3)<br />

1 In queste Lezioni non considereremo il problema più generale in cui il numero <strong>di</strong> <strong>equazioni</strong> (vincoli) è<br />

<strong>di</strong>verso dal numero <strong>di</strong> incognite (gra<strong>di</strong> <strong>di</strong> libertà).<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

2<br />

( ) in<strong>di</strong>ca il determinante. In<br />

dove A !1 in<strong>di</strong>ca la matrice inversa della matrice A e det A<br />

MATLAB ® det( A)<br />

è l’istruzione per il calcolo del determinante e inv( A)<br />

è l’istruzione<br />

per il calcolo dell’inversa. Pertanto, risolvere il sistema (<strong>4.</strong>1) è, in un certo senso,<br />

equivalente a determinare l’inversa della matrice A .<br />

Esempio <strong>4.</strong>1<br />

La soluzione <strong>di</strong> un circuito resistivo lineare o <strong>di</strong> un circuito <strong>di</strong> impedenze si riduce<br />

alla soluzione <strong>di</strong> un sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong>. Questo è solo un esempio tra<br />

quelli più vicini a uno studente <strong>di</strong> ingegneria.<br />

Figura <strong>4.</strong>1 Un esempio <strong>di</strong> circuito resistivo lineare.<br />

Si consideri il circuito resistivo lineare descritto in Figura <strong>4.</strong>1. Risolviamolo<br />

applicando il metodo dei potenziali nodali. Poniamo uguale a zero il potenziale del nodo<br />

“0”, e 0 = 0 . In questo modo il potenziale del nodo “3” è noto, e 3 = E . Bisogna, allora,<br />

determinare i potenziali e 1 ed e 2 . Applicando la legge <strong>di</strong> Kirchhoff per le correnti ai<br />

no<strong>di</strong> “1” e “2” otteniamo, rispettivamente,<br />

" $ ( G1 + G2 + G3)e 1 ! G3e2 = G1E #<br />

%$ !G3e1 + ( G3 + G4 + G5 )e2 = G5E dove G h = 1 / R h per h = 1,5 . Questo è l’esempio più semplice <strong>di</strong> sistema <strong>di</strong> <strong>equazioni</strong><br />

<strong>algebriche</strong> <strong>lineari</strong>. Il sistema (<strong>4.</strong>4) può essere espresso nella forma matriciale (<strong>4.</strong>1). Si ha<br />

x = e 1 ,e 2<br />

( ) !G3 ( )<br />

A = G1 + G2 + G3 !G3 b = EG 1 ,EG 5<br />

(<strong>4.</strong>4)<br />

T<br />

, (<strong>4.</strong>5)<br />

G 3 + G 4 + G 5<br />

T<br />

, (<strong>4.</strong>6)<br />

. (<strong>4.</strong>7)


Siccome la matrice A è a dominanza <strong>di</strong>agonale stretta 2 si ha che det( A)<br />

! 0 , [<strong>4.</strong>1].<br />

<strong>4.</strong>1 Esistenza e unicità della soluzione<br />

3<br />

Prima <strong>di</strong> cercare <strong>di</strong> risolvere un’equazione bisogna sempre domandarsi se essa<br />

ammette soluzioni, e se la soluzione è unica. Si considerino le matrici A e A,b . Se il<br />

rango della matrice A è uguale al rango della matrice A,b ,<br />

rank( A)<br />

= rank( A,b ), (<strong>4.</strong>8)<br />

il sistema (<strong>4.</strong>1) ammette soluzioni. La soluzione è unica se rank( A)<br />

= n , cioè se la<br />

matrice A ha rango massimo. La matrice quadrata A ha rango massimo se e solo se il<br />

suo determinante è <strong>di</strong>verso da zero,<br />

det( A)<br />

! 0 . (<strong>4.</strong>9)<br />

( ) = rank A<br />

Siccome rank( A)<br />

= n implica rank A,b ( ), la (<strong>4.</strong>9) è con<strong>di</strong>zione necessaria<br />

e sufficiente per l’esistenza e l’unicità della soluzione del sistema <strong>di</strong> <strong>equazioni</strong> (<strong>4.</strong>1).<br />

Invece, se rank( A)<br />

! rank A,b<br />

( ) il sistema (<strong>4.</strong>1) non ammette soluzioni: in questo caso<br />

si <strong>di</strong>ce che il sistema è inconsistente. Ciò può accadere solo se rank A<br />

Assumeremo, salvo avviso contrario, che sia sempre verificata la con<strong>di</strong>zione (<strong>4.</strong>9).<br />

Il sistema (<strong>4.</strong>1) può essere risolto sia attraverso meto<strong>di</strong> <strong>di</strong>retti che attraverso meto<strong>di</strong><br />

iterativi. Esistono due meto<strong>di</strong> <strong>di</strong>retti per la soluzione del sistema (<strong>4.</strong>1): la regola <strong>di</strong><br />

Cramer e il metodo <strong>di</strong> fattorizzazione <strong>di</strong> Gauss. Illustreremo prima i meto<strong>di</strong> <strong>di</strong>retti e poi i<br />

meto<strong>di</strong> iterativi.<br />

<strong>4.</strong>2 Regola <strong>di</strong> Cramer<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

♦<br />

( ) < n .<br />

La soluzione del sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong> (<strong>4.</strong>1) può essere calcolata<br />

tramite la regola <strong>di</strong> Cramer. In<strong>di</strong>chiamo con Ai la matrice ( n ! n)<br />

ottenuta sostituendo<br />

la i ! esima colonna <strong>di</strong> A con il vettore colonna b . La soluzione del sistema (<strong>4.</strong>1) è data<br />

allora da<br />

2 Una matrice<br />

A = a ( ij ) , i, j = 1, 2,..., n , si <strong>di</strong>ce a dominanza <strong>di</strong>agonale stretta per righe se<br />

n<br />

aii > " aij per i = 1, 2,..., n ; la matrice si si <strong>di</strong>ce a dominanza <strong>di</strong>agonale stretta per colonne se<br />

j=1, j!i<br />

aii n<br />

> " a<br />

j=1, j!i ji per i = 1, 2,..., n . La matrice A è a dominanza <strong>di</strong>agonale stretta se è dominanza<br />

<strong>di</strong>agonale stretta sia per righe che per colonne.


( )<br />

( )<br />

xi = det Ai det A<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

4<br />

i = 1,2,...,n . (<strong>4.</strong>10)<br />

Stimiamo, ora, il costo computazionale. Nella regola <strong>di</strong> Cramer, calcolando i<br />

determinanti a partire dalla loro definizione, il costo in termini <strong>di</strong> moltiplicazioni è <strong>di</strong><br />

( n + 1)<br />

( n ! 1)n!,<br />

ovvero dell’or<strong>di</strong>ne <strong>di</strong> n n per n >> 1. Ipotizzando <strong>di</strong> usare una macchina<br />

in grado <strong>di</strong> eseguire 10 9 moltiplicazioni al secondo, per risolvere un sistema <strong>di</strong> n = 20<br />

<strong>equazioni</strong> con la regola <strong>di</strong> Cramer c’è bisogno <strong>di</strong> circa 3.07 ! 10 4 anni. Anche per<br />

sistemi <strong>di</strong> modeste <strong>di</strong>mensioni il metodo <strong>di</strong> Cramer si rivela, quin<strong>di</strong>, impraticabile. Al<br />

contrario, come vedremo, il metodo <strong>di</strong> fattorizzazione <strong>di</strong> Gauss consente <strong>di</strong> risolvere in<br />

tempi ragionevoli sistemi anche <strong>di</strong> grosse <strong>di</strong>mensioni. Vedremo più avanti che il numero<br />

<strong>di</strong> moltiplicazioni in questo metodo è <strong>di</strong> or<strong>di</strong>ne n 3 per n >> 1.<br />

<strong>4.</strong>3 <strong>Sistemi</strong> triangolari<br />

Si tratta <strong>di</strong> un caso particolare molto importante perché, come vedremo tra poco, la<br />

forma triangolare è anche il risultato finale dell’applicazione del metodo <strong>di</strong> eliminazione<br />

per sostituzione <strong>di</strong> Gauss.<br />

Introduciamo, prima, due forme speciali <strong>di</strong> matrici, le matrici triangolari superiori<br />

(che qui in<strong>di</strong>cheremo con U ) e le matrici triangolari inferiori (che qui in<strong>di</strong>cheremo con<br />

L ). Una matrice n ! n<br />

( ) U u ij<br />

( ) si <strong>di</strong>ce triangolare superiore se<br />

u ij = 0 per i > j ! U =<br />

u 11 u 12 ... u 1n"1 u 1n<br />

0 u 22 ... u 2n"1 u 2n<br />

... ... ... ... ...<br />

0 0 ... u n"1n"1 u n"1n<br />

0 0 ... 0 u nn<br />

una matrice ( n ! n)<br />

L( lij ) si <strong>di</strong>ce triangolare inferiore se<br />

l ij = 0 per i < j ! L =<br />

l 11 0 ... 0 0<br />

l 21 l 22 ... 0 0<br />

... ... ... ... ...<br />

l n"11 l n"12 ... l n"1n"1 0<br />

l n1 l n2 ... l nn"1 l nn<br />

; (<strong>4.</strong>11)<br />

. (<strong>4.</strong>12)<br />

Si consideri, ora, un sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong> <strong>di</strong> tipo triangolare<br />

inferiore,


#<br />

%<br />

%<br />

Ly = b ! $<br />

%<br />

%<br />

&%<br />

5<br />

l 11y 1 = b 1<br />

l 21y 1 + l 22y 2 = b 2<br />

..........................................<br />

l n"11 y 1 + n"12 y 2 ...+ l n"1n"1 y n"1 = b n"1<br />

l n1y 1 + l n2y 2 + ...+ l nn"1y n"1 + l nny n = b n.<br />

La soluzione <strong>di</strong> questo sistema è molto semplice. Si ha (eliminazione in avanti)<br />

y1 = 1<br />

b1 ,<br />

l11 yi = 1 # i!1 &<br />

bi ! lijy j<br />

l<br />

% " (<br />

ii $ j =1 '<br />

i = 2, 3,...,n.<br />

(<strong>4.</strong>13)<br />

(<strong>4.</strong>14)<br />

Per calcolare yi sono richieste le seguenti operazioni: ( i ! 1)<br />

prodotti, ( i ! 1)<br />

somme e 1<br />

<strong>di</strong>visione. Pertanto il numero totale <strong>di</strong> operazioni è<br />

n<br />

Noper = ! 1+<br />

2! ( i " 1)<br />

= 2! i " n = n 2 . (<strong>4.</strong>15)<br />

Consideriamo, ora, un sistema <strong>di</strong> tipo triangolare superiore,<br />

i=1<br />

n<br />

i=1<br />

# u11x1 + u12x2 + ... + u1n"1x n"1 + u1nx n = y1 %<br />

u22x2 + ... + u2n"1x n"1 + u2n xn = y2 %<br />

Ux = y ! $ ..........................................<br />

%<br />

un"1n"1x n"1 + un"1nx n = yn"1 %<br />

&%<br />

unnxn = yn .<br />

n<br />

i=1<br />

(<strong>4.</strong>16)<br />

Anche la soluzione <strong>di</strong> questo sistema è molto semplice. Si ha (eliminazione all’in<strong>di</strong>etro)<br />

xn = 1<br />

yn ,<br />

unn xi = 1 # n &<br />

yi ! uijx j<br />

u<br />

% " (<br />

ii $ j =i+1 '<br />

i = n ! 1,n ! 2,...,1.<br />

(<strong>4.</strong>17)<br />

Anche in questo caso bisogna effettuare n 2 operazioni elementari per determinare la<br />

soluzione.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


Esercizio <strong>4.</strong>1<br />

Implementare in MATLAB gli algoritmi (<strong>4.</strong>14) e (<strong>4.</strong>17).<br />

<strong>4.</strong>4 Il metodo della fattorizzazione <strong>di</strong> Gauss<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

6<br />

Il metodo della fattorizzazione <strong>di</strong> Gauss consiste nel trasformare il sistema (<strong>4.</strong>1) in<br />

un sistema del tipo<br />

LUx = b (<strong>4.</strong>18)<br />

dove L è una matrice triangolare inferiore e U è una matrice triangolare superiore. Ciò<br />

equivale a <strong>di</strong>re che la matrice A può essere espressa come prodotto tra una matrice<br />

triangolare inferiore e una matrice triangolare superiore,<br />

A = LU . (<strong>4.</strong>19)<br />

La rappresentazione della matrice A attraverso la (<strong>4.</strong>19) prende il nome <strong>di</strong><br />

fattorizzazione <strong>di</strong> Gauss o fattorizzazione LU.<br />

Supponiamo, per il momento, che sia possibile esprimere la matrice A attraverso la<br />

(<strong>4.</strong>19) e che siano note le matrici <strong>di</strong> fattorizzazione L ed U . Allora la soluzione del<br />

sistema (<strong>4.</strong>1) è imme<strong>di</strong>ata. Infatti, il sistema (<strong>4.</strong>1) può essere riscritto nella forma (<strong>4.</strong>18).<br />

Posto, allora,<br />

il sistema (<strong>4.</strong>18) è equivalente ai due sistemi triangolari<br />

y ! Ux (<strong>4.</strong>20)<br />

Ly = b , (<strong>4.</strong>21)<br />

Ux = y . (<strong>4.</strong>22)<br />

Il primo sistema è <strong>di</strong> tipo triangolare inferiore e può essere risolto attraverso l’algoritmo<br />

(<strong>4.</strong>14) (eliminazione in avanti). Una volta determinato y , si risolve il sistema (<strong>4.</strong>22)<br />

attraverso l’algoritmo (<strong>4.</strong>17) (eliminazione all’in<strong>di</strong>etro). Una volta effettuata la<br />

decomposizione LU, occorrono 2n 2 operazioni per calcolare al soluzione. E’ evidente,<br />

allora, che il punto centrale <strong>di</strong> questo metodo è nella determinazione (quando possibile)<br />

<strong>di</strong> una fattorizzazione LU della matrice A .<br />

Esempio <strong>4.</strong>2<br />

Prima <strong>di</strong> considerare il problema fattorizzazione nella sua forma più generale,<br />

esemplifichiamo attraverso un sistema <strong>di</strong> due <strong>equazioni</strong> in due incognite,<br />


7<br />

! a11x1 + a12x2 = b1 "<br />

# a21x1 + a22x2 = b2. Moltiplichiamo ambo i membri della prima equazione per !a 21 / a 11 . Otteniamo<br />

!a 21 x 1 ! a 21 a 12<br />

a 11<br />

(<strong>4.</strong>23)<br />

x2 = ! a21 b1 . (<strong>4.</strong>24)<br />

a11 Sommando membro a membro la seconda equazione del sistema (<strong>4.</strong>23) e l’equazione<br />

(<strong>4.</strong>24) abbiamo<br />

"<br />

#<br />

$<br />

a 22 ! a 12a 21<br />

a 11<br />

%<br />

&<br />

' x2 = b2 ! a21 b1 . (<strong>4.</strong>25)<br />

a11 Abbiamo, allora, ricondotto la soluzione del sistema (<strong>4.</strong>23) alla soluzione del sistema<br />

triangolare alto<br />

dove<br />

e<br />

1 ! # a11 "<br />

$#<br />

( ) ( 1)<br />

x1 + a12 x2 = y1 ( 2)<br />

a22 x2 = y2 ( 1)<br />

( 1)<br />

a11 = a11, a12 = a12,<br />

( 1)<br />

( 1)<br />

a21 = a21 , a22 = a22 ,<br />

( 2)<br />

( 2)<br />

1<br />

a21 = 0, a22 = a22<br />

( 1)<br />

( 1)<br />

a21<br />

( ) a12 ! 1<br />

a22 ( ) ,<br />

(<strong>4.</strong>26)<br />

(<strong>4.</strong>27)<br />

y1 = b1 , y2 = b2 ! a21 b1 . (<strong>4.</strong>28)<br />

a22 Questa procedura può essere effettuata solo se a 22 ! 0 . Il sistema (<strong>4.</strong>26) è del tipo (<strong>4.</strong>16)<br />

con<br />

e termine noto<br />

U = a 1<br />

11<br />

1<br />

a12 , (<strong>4.</strong>29)<br />

2<br />

0 a22 y = y 1 , y 2<br />

T<br />

. (<strong>4.</strong>30)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

8<br />

E’ evidente dalle (<strong>4.</strong>28) che il termine noto y è, a sua volta, soluzione <strong>di</strong> un sistema <strong>di</strong><br />

<strong>equazioni</strong> <strong>di</strong> tipo triangolare basso con<br />

e termine noto<br />

L =<br />

1 0<br />

, (<strong>4.</strong>31)<br />

1<br />

1 1<br />

a21 / a11<br />

b = b 1,b 2<br />

T<br />

. (<strong>4.</strong>32)<br />

Ora illustreremo una procedura generale per la determinazione della fattorizzazione<br />

LU. Sia la matrice L che la matrice U hanno, in generale, n( n + 1)<br />

/ 2 elementi <strong>di</strong>versi<br />

da zero. Gli elementi <strong>di</strong> L ed U devono verificare il sistema <strong>di</strong> <strong>equazioni</strong> non <strong>lineari</strong><br />

min( i, j)<br />

! lirurj = aij i, j = 1,2,...,n . (<strong>4.</strong>33)<br />

r =1<br />

Il sistema (<strong>4.</strong>33) è sotto determinato perché il numero <strong>di</strong> <strong>equazioni</strong> in<strong>di</strong>pendenti è n 2 ,<br />

mentre il numero <strong>di</strong> gra<strong>di</strong> <strong>di</strong> libertà è n 2 + n . Di conseguenza se esiste una<br />

fattorizzazione LU, essa non è unica. Se si fissano gli n elementi della <strong>di</strong>agonale<br />

principale della matrice L , ad esempio, uguali a 1, il sistema (<strong>4.</strong>33) <strong>di</strong>venta determinato<br />

e può essere risolto attraverso il seguente algoritmo:<br />

per k = 1,2,...,n ! 1<br />

per i = k + 1,...,n<br />

lik = a ( k)<br />

ik<br />

k<br />

akk ( ) ,<br />

per j = k + 1,...,n<br />

( k+1)<br />

( k)<br />

k<br />

aij = aij ! likakj ( )<br />

♦<br />

(<strong>4.</strong>34)<br />

( 1)<br />

dove aij = aij per i, j = 1,2,...,n . Gli elementi della matrice triangolare superiore U<br />

sono dati da<br />

( i)<br />

uij = aij i ! j = 1,2,...,n . (<strong>4.</strong>35)<br />

L’algoritmo (<strong>4.</strong>34) è valido solo se a kk<br />

k<br />

( ) ! 0 . Per un approfon<strong>di</strong>mento si rimanda alle<br />

referenze [<strong>4.</strong>1] e [<strong>4.</strong>2].


Esercizio <strong>4.</strong>1(bis)<br />

9<br />

Verificare che l’algoritmo (<strong>4.</strong>34) con la (<strong>4.</strong>35) dà la soluzione del sistema (<strong>4.</strong>33) con<br />

l ii = 1 per i = 1,2,...,n .<br />

♦<br />

Il passo k della fattorizzazione LU comporta ( n ! k)<br />

<strong>di</strong>visioni e ( n ! k)<br />

n ! k + 1<br />

moltiplicazioni e ad<strong>di</strong>zioni. Il costo totale dell’algoritmo è, quin<strong>di</strong>,<br />

n!1<br />

"<br />

k =1<br />

( n ! k)<br />

n ! k + 1<br />

( )<br />

( )<br />

= 1<br />

3 n n2 ( ! 1)<br />

. (<strong>4.</strong>36)<br />

( k)<br />

( k)<br />

Gli elementi akk vengono chiamati “pivot”. L’algoritmo (<strong>4.</strong>34) richiede che akk ! 0<br />

per ogni k = 1,2,...,n ! 1 . Allora, la matrice A ha una fattorizzazione LU se i pivot sono<br />

tutti <strong>di</strong>versi da zero. Se almeno un pivot è uguale a zero l’algoritmo (<strong>4.</strong>34) non può<br />

essere implementato e la matrice A non è fattorizzabile.<br />

( k)<br />

Assumiamo che i pivot akk s0no tutti <strong>di</strong>versi da zero e, quin<strong>di</strong>, la matrice A sia<br />

fattorizzabile. Allora, la soluzione del sistema (<strong>4.</strong>1) attraverso il metodo della<br />

fattorizzazione LU consiste nel:<br />

- determinare la fattorizzazione LU della matrice A attraverso l’algoritmo (<strong>4.</strong>34)-<br />

(<strong>4.</strong>35);<br />

- risolvere il sistema triangolare basso (<strong>4.</strong>21) attraverso l’algoritmo (<strong>4.</strong>14) per<br />

determinare l’incognita ausiliaria y ;<br />

- risolvere il sistema triangolare alto (<strong>4.</strong>22) attraverso l’algoritmo (<strong>4.</strong>17).<br />

Il numero <strong>di</strong> moltiplicazioni, <strong>di</strong>visioni e ad<strong>di</strong>zioni richiesto per risolvere il sistema (<strong>4.</strong>1)<br />

con il metodo della fattorizzazione <strong>di</strong> Gauss è n 3 / 3 + 2n 2 ( ! n / 3)<br />

, quin<strong>di</strong> <strong>di</strong> or<strong>di</strong>ne<br />

n 3 / 3 per n >> 1.<br />

Programma <strong>4.</strong>1: Fattorizzazione LU<br />

function [L,U,A]=lu_gauss(A)<br />

% Fattorizzazione LU<br />

n=max(size(A));<br />

for k=1:n-1<br />

for i=k+1:n<br />

A(i,k)=A(i,k)/A(k,k);<br />

for j=k+1:n<br />

A(i,j)=A(i,j)-A(i,k)*A(k,j);<br />

end<br />

end<br />

end<br />

if nargout==2, U=triu(A); L=eye(n)+tril(A,-1);end<br />

return<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


10<br />

Riportiamo nel Programma <strong>4.</strong>1 un’implementazione dell’algoritmo (<strong>4.</strong>34)-(<strong>4.</strong>35)<br />

utilizzando il linguaggio <strong>di</strong> programmazione MATLAB ® , [<strong>4.</strong>3]. Se la chiamata alla<br />

function ha una sola variabile <strong>di</strong> uscita le due matrici L e U sono memorizzate in una<br />

sola matrice, invece se ha due variabili <strong>di</strong> uscita L e U sono memorizzate in due matrici<br />

<strong>di</strong>stinte (il comando “nargout” serve per contare il numero <strong>di</strong> variabili <strong>di</strong> uscita). Si<br />

osservi, inoltre, che nell’implementazione non è necessario memorizzare tutte le matrici<br />

A k ( ) , è sufficiente scrivere <strong>di</strong> volta in volta sugli elementi della matrice <strong>di</strong> partenza A .<br />

Esercizio <strong>4.</strong>2<br />

Si risolva il sistema<br />

1 3 3<br />

3 6 4<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

1<br />

2 2 2 x = 3<br />

2<br />

(<strong>4.</strong>37)<br />

determinando prima la fattorizzazione LU della matrice attraverso il Programma <strong>4.</strong>1 e<br />

applicando, poi, gli algoritmi (<strong>4.</strong>14) e (<strong>4.</strong>17) per risolvere i due sistemi <strong>di</strong> <strong>equazioni</strong><br />

triangolari, implementati nell’Esercizio <strong>4.</strong>1.<br />

♦<br />

La fattorizzazione LU è alla base dei coman<strong>di</strong> MATLAB<br />

L,U [ ] = lu A ( ) , A\b e inv A<br />

( ) .<br />

Il primo comando dà la fattorizzazione LU della matrice A , il secondo comando<br />

consente <strong>di</strong> risolvere <strong>di</strong>rettamente il sistema (<strong>4.</strong>1), il terzo comando dà l’inversa della<br />

matrice A .<br />

<strong>4.</strong><strong>4.</strong>1 Esistenza della fattorizzazione LU<br />

( i)<br />

La fattorizzazione LU esiste solo se nell’algoritmo (<strong>4.</strong>34) aii ! 0 per ogni i . Ora<br />

<strong>di</strong>scuteremo questo aspetto.<br />

Le sottomatrici principali <strong>di</strong> A <strong>di</strong> or<strong>di</strong>ne i = 1,2,...,n ! 1 sono le matrici quadrate<br />

ottenute considerando solo gli elementi delle prime i righe e colonne; in<strong>di</strong>chiamo con<br />

Ai la sottomatrice principale <strong>di</strong> or<strong>di</strong>ne i . Si mostra che (ve<strong>di</strong>, ad esempio, [<strong>4.</strong>1])<br />

da cui<br />

1 ( ) = a11 det A i<br />

( ) ( 2)<br />

( i)<br />

a22 ...aii<br />

(<strong>4.</strong>38)<br />

n<br />

( i)<br />

det( A)<br />

= ! aii . (<strong>4.</strong>39)<br />

i=1


11<br />

Criterio <strong>di</strong> esistenza della fattorizzazione LU Se A e tutte le sue sottomatrici<br />

( i)<br />

principali sono non singolari si ha che aii ! 0 per ogni i e, quin<strong>di</strong>, esiste ed è unica la<br />

decomposizione LU.<br />

Osservazione<br />

Può accadere che una sottomatrice principale Ai con i < n possa essere singolare pur<br />

essendo det( A)<br />

! 0 . Si consideri, ad esempio, una matrice A 2 ! 2 . In questo caso si<br />

1<br />

ha a11 ( ) = a 11<br />

( ) ( 2)<br />

( 1)<br />

( 2)<br />

= a11 , a22 = a22 ! a12a21 / a11 . Può accadere che a11 = 0 e det A a22 ! 0 : in<br />

( ) ( 2)<br />

( 2)<br />

a22 è una forma indeterminata perché a22 = ! . Questa è una<br />

1<br />

questo caso il prodotto a11 k<br />

proprietà generale. Infatti, se akk (<strong>4.</strong>39) <strong>di</strong>venta una forma indeterminata.<br />

Esempio <strong>4.</strong>3<br />

( ) k +1<br />

= 0 dalla (<strong>4.</strong>34) segue che ak<br />

+1k +1<br />

Determiniamo la fattorizzazione LU della matrice<br />

1 3 3<br />

A =<br />

( ) = ! e quin<strong>di</strong> la<br />

2 2 2 . (<strong>4.</strong>40)<br />

3 6 4<br />

La matrice A è non singolare perché det( A)<br />

= 8 e tutte le sottomatrici principali sono<br />

non singolari. Applicando il Programma <strong>4.</strong>1 si ha<br />

1 0 0<br />

3 0.75 1<br />

1 3 3<br />

L = 2 1 0 ,U = 0 !4 !4 . (<strong>4.</strong>41)<br />

0 0 !2<br />

Il criterio che abbiamo appena illustrato non è agevole da applicare a matrici <strong>di</strong> grossa<br />

<strong>di</strong>mensione. Per questa ragione è utile in<strong>di</strong>viduare quelle classi <strong>di</strong> matrici per le quali<br />

esso è certamente verificato. Si <strong>di</strong>mostra che se è verificata almeno una delle seguenti<br />

con<strong>di</strong>zioni:<br />

a) la matrice A è simmetrica e definita positiva (ve<strong>di</strong> Appen<strong>di</strong>ce 1);<br />

b) la matrice A è a dominanza <strong>di</strong>agonale stretta per righe o per colonne;<br />

allora esiste ed è unica la fattorizzazione LU <strong>di</strong> A . Per un approfon<strong>di</strong>mento si rimanda<br />

alle referenze [<strong>4.</strong>1] e [<strong>4.</strong>2].<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

♦<br />


Osservazione: fattorizzazione <strong>di</strong> Cholesky<br />

12<br />

Se la matrice A è simmetrica e definita positiva esiste una matrice triangolare<br />

inferiore H con elementi positivi sulla <strong>di</strong>agonale principale tale che<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

A = HH T . (<strong>4.</strong>42)<br />

La (<strong>4.</strong>42) prende il nome <strong>di</strong> fattorizzazione <strong>di</strong> Cholesky. Gli elementi <strong>di</strong> H possono<br />

essere determinati attraverso l’algoritmo<br />

h ij = 1<br />

h jj<br />

j !1<br />

#<br />

&<br />

aij ! " hikh jk<br />

$<br />

%<br />

'<br />

( j = 1,2,...,i ! 1,<br />

i!1<br />

k =1<br />

2<br />

hii = aii ! " hik i = 1,2,..., N.<br />

k =1<br />

(<strong>4.</strong>43)<br />

La fattorizzazione <strong>di</strong> Cholesky richiede n 3 / 6 operazioni, metà <strong>di</strong> quelle richieste dalla<br />

fattorizzazione LU. La fattorizzazione <strong>di</strong> Cholesky viene richiamata in MATLAB ® con il<br />

comando H = chol A<br />

( ) .<br />

Esercizio <strong>4.</strong>2<br />

Implementare in MATLAB l’algoritmo (<strong>4.</strong>43).<br />

Quando la matrice A non verifica le con<strong>di</strong>zioni a) e/o b) può accadere che, pur<br />

essendo det A<br />

( ) ! 0 , non esista una fattorizzazione LU per A .<br />

Esempio <strong>4.</strong>4<br />

Si consideri, ora, la matrice<br />

A =<br />

1 1 3<br />

2 2 2<br />

3 6 4<br />

Essa è non singolare perché det( A)<br />

= 12 , ma det A2 Programma <strong>4.</strong>1 si ha<br />

♦<br />

♦<br />

. (<strong>4.</strong>44)<br />

1 ( ) = a11 ( ) 2<br />

a22<br />

( ) = 0 . Applicando il


1 0 0<br />

3 Inf 1<br />

13<br />

1 3 3<br />

L = 2 1 0 ,U = 0 0 !4 . (<strong>4.</strong>45)<br />

0 0 Inf<br />

Pur essendo A non singolare, la fattorizzazione <strong>di</strong> Gauss non può essere effettuata in<br />

( 2)<br />

quanto nell’algoritmo (<strong>4.</strong>34) a22 = 0 . Ciò è dovuto al fatto che la seconda sottomatrice<br />

principale <strong>di</strong> A (cioè quella ottenuta da A considerando solo le prime due righe e due<br />

colonne)<br />

1 1<br />

2 2<br />

è singolare.<br />

Questo problema può essere risolto, in generale, permutando tra loro alcune righe (o<br />

colonne) <strong>di</strong> A . Si consideri la matrice ottenuta scambiando la prima riga della (<strong>4.</strong>44) con<br />

la terza<br />

!A =<br />

3 6 4<br />

2 2 2<br />

1 1 3<br />

. (<strong>4.</strong>46)<br />

Tutti le sottomatrici principali <strong>di</strong> ! A sono non singolari. Applicando, ora, il Programma<br />

<strong>4.</strong>1 si ha:<br />

<strong>4.</strong><strong>4.</strong>2 Matrice <strong>di</strong> permutazione<br />

1 0 0<br />

!L = 0.6667 1 0 , ! 3 6 4<br />

U = 0 !2 !0.6667 . (<strong>4.</strong>47)<br />

0.3333 0.5 1<br />

0 0 2<br />

Nell’esempio appena svolto abbiamo fatto vedere che permutando in modo opportuno<br />

le righe della matrice A è possibile costruire una nuova matrice ! A che abbia tutte le<br />

sottomatrici principali non singolari e, quin<strong>di</strong>, abbia una ed una sola fattorizzazione LU.<br />

Siccome lo scambio tra righe comporta un cambiamento dei pivot, questa tecnica viene<br />

chiamata pivoting per righe. La fattorizzazione che si trova dà la matrice <strong>di</strong> partenza a<br />

meno <strong>di</strong> una matrice <strong>di</strong> permutazione fra le righe.<br />

Per una generica matrice A non singolare esiste sempre una matrice <strong>di</strong> permutazione<br />

delle righe P tale che<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />


14<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

PA = LU . (<strong>4.</strong>48)<br />

La matrice P è posta uguale alla matrice identità all’inizio del processo <strong>di</strong><br />

fattorizzazione. Se nel corso della fattorizzazione le righe “ r ” e “ s ” <strong>di</strong> A vengono<br />

scambiate a causa della presenza <strong>di</strong> pivot uguali a zero, le corrispondenti colonne <strong>di</strong> P<br />

vengono scambiate. Allora, la soluzione del sistema (<strong>4.</strong>1) si riduce alla soluzione dei due<br />

sistemi triangolari<br />

L!y = Pb (<strong>4.</strong>49)<br />

Ux = !y . (<strong>4.</strong>50)<br />

In MATLAB ® l’istruzione “lu” calcola la fattorizzazione LU con pivoting per righe<br />

Esempio <strong>4.</strong>5<br />

L,U,P [ ] = lu( A)<br />

.<br />

Fattorizziamo la matrice (<strong>4.</strong>44) utilizzando l’istruzione <strong>di</strong> MATLAB ® appena<br />

descritta. Si ottengono le matrici L e U (<strong>4.</strong>47) e la matrice <strong>di</strong> permutazione<br />

P =<br />

0 0 1<br />

0 1 0 . (<strong>4.</strong>51)<br />

1 0 0<br />

La (<strong>4.</strong>51) è la matrice <strong>di</strong> permutazione che scambia la prima riga con la terza riga <strong>di</strong> una<br />

matrice 3 ! 3<br />

( ) .<br />

Esercizio <strong>4.</strong>3<br />

Si risolva il sistema<br />

1 2 2<br />

2 5 1<br />

1<br />

2 4 1 x = 3<br />

2<br />

♦<br />

(<strong>4.</strong>52)<br />

determinando prima la fattorizzazione LU con l’istruzione “lu” <strong>di</strong> MATLAB ® e<br />

applicando, poi, gli algoritmi (<strong>4.</strong>14) e (<strong>4.</strong>17) per risolvere i due sistemi <strong>di</strong> <strong>equazioni</strong><br />

triangolari .<br />


<strong>4.</strong>5 Errori <strong>di</strong> arrotondamento<br />

15<br />

Nel calcolo numerico esistono, almeno in linea <strong>di</strong> principio, due sorgenti <strong>di</strong> errore:<br />

l’errore generato dall’approssimazione introdotta dall’algoritmo utilizzato per la<br />

soluzione del problema; l’errore generato dal fatto che una qualsiasi macchina per il<br />

calcolo può rappresentare solo un numero finito <strong>di</strong> cifre.<br />

Il metodo della fattorizzazione <strong>di</strong> Gauss è un metodo <strong>di</strong>retto, quin<strong>di</strong> il primo errore è<br />

assente. Ora ci occuperemo <strong>di</strong> capire quali sono gli effetti nella soluzione del sistema<br />

(<strong>4.</strong>1) con il metodo della fattorizzazione <strong>di</strong> Gauss degli errori dovuti al numero finito <strong>di</strong><br />

cifre della macchina <strong>di</strong> calcolo.<br />

Un calcolatore numerico è in grado <strong>di</strong> rappresentare soltanto un numero finito <strong>di</strong> cifre.<br />

Ciò dà luogo ad errori che possono essere generati in due mo<strong>di</strong> <strong>di</strong>versi: i numeri<br />

introdotti nel calcolatore sono memorizzati in forma approssimata; le operazioni<br />

elementari (ad<strong>di</strong>zioni, moltiplicazioni, <strong>di</strong>visioni,…) su tali numeri danno numeri non<br />

rappresentabili esattamente sul calcolatore. Pertanto, in un algoritmo implementato sul<br />

calcolatore attraverso una successione <strong>di</strong> operazioni elementari si ha una successiva<br />

creazione e propagazione degli errori. Tali errori sono chiamati errori <strong>di</strong><br />

arrotondamento.<br />

L’entità <strong>di</strong> questi errori <strong>di</strong>pende, ovviamente, dal modo in cui i numeri sono<br />

rappresentati sul calcolatore. Il sistema floating-point è il sistema <strong>di</strong> rappresentazione più<br />

utilizzato per il calcolo scientifico. Esso è caratterizzato dal fatto che permette <strong>di</strong><br />

rappresentare un ampio intervallo della retta reale con una <strong>di</strong>stribuzione uniforme degli<br />

errori relativi.<br />

Il sistema floating point è definito dal numero <strong>di</strong> cifre significative t , dalla base ! e<br />

dagli estremi ( l,u ) dell’intervallo <strong>di</strong> numeri interi <strong>di</strong> variabilità dell’esponente. In<br />

rappresentazione posizionale un numero macchina x ! 0 viene denotato con<br />

x = ±.d 1 d 2 ...d t! p (<strong>4.</strong>53)<br />

dove l ! p ! u . Ad esempio, in MATLAB si utilizza ! = 2 , t = 53 , l = !1021 e<br />

u = 1024 . In effetti 53 cifre significative in base 2 corrispondono alle 15 cifre<br />

significative in base 10 mostrate da MATLAB con il “format long”. In MATLAB con i<br />

coman<strong>di</strong> “realmin” e “realmax” è possibile determinare il numero reale, in valore<br />

assoluto, più piccolo e il numero reale, in valore assoluto, più grande che è possibile<br />

rappresentare. Essi sono, rispettivamente, 2.2250738585072e-308 e<br />

1.79769313486232e+308 . Il numero 0 viene rappresentato a parte. Un numero in valore<br />

assoluto minore <strong>di</strong> “realmin” produce una segnalazione <strong>di</strong> underflow e viene trattato<br />

come 0 (come, ad esempio, in MATLAB). Un numero in modulo maggiore <strong>di</strong> “realmax”<br />

produce invece una segnalazione <strong>di</strong> overflow e viene memorizzato come Inf.<br />

La maggior parte dei calcolatori ha la possibilità <strong>di</strong> operare con lunghezze <strong>di</strong>verse,<br />

ovvero con <strong>di</strong>versi t , a cui corrispondono, ad esempio, la singola e la doppia precisione.<br />

Nell’aritmetica in floating point molte delle proprietà che sono alla base<br />

dell’aritmetica dei numeri reali sono violate: l’unicità dello zero, la proprietà <strong>di</strong>stributiva,<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


16<br />

la proprietà associativa. Qui ci limiteremo a fare qualche considerazione sulle<br />

conseguenze della violazione della proprietà associativa.<br />

Esempio <strong>4.</strong>6 ([<strong>4.</strong>3])<br />

Si considerino i tre numeri a = 1.0e + 308 , b = 1.5e + 308 e c = !1.0e + 308 ed<br />

eseguiamo la loro somma in mo<strong>di</strong> <strong>di</strong>versi. Abbiamo<br />

a + ( b + c)<br />

= 1.5e + 308 , ( a + b)<br />

+ c = Inf .<br />

Questo è un caso particolare <strong>di</strong> un fenomeno che si verifica quando si sommano numeri<br />

dello stesso or<strong>di</strong>ne <strong>di</strong> grandezza in modulo, ma <strong>di</strong>versi <strong>di</strong> segno. In tal caso il risultato<br />

della somma può essere molto impreciso. Quello che accade è un fenomeno <strong>di</strong><br />

cancellazione <strong>di</strong> cifre significative che introduce termini spuri caratterizzati da una<br />

mancanza <strong>di</strong> informazione.<br />

♦<br />

Esempio <strong>4.</strong>7 ([<strong>4.</strong>1])<br />

Si considerino i tre numeri a = 0.23371258 !10 "4 , b = 0.33678429 !10 2 e<br />

c = !0.33677811"10 2 ed eseguiamo la loro somma in mo<strong>di</strong> <strong>di</strong>versi con una aritmetica<br />

floating point con 8 cifre significative. Abbiamo<br />

( a + b)<br />

+ c = 0.64100000 !10 -3 , a + ( b + c)<br />

= 0.64137126 !10 "3 .<br />

Il risultato esatto è dato da a + b + c = 0.64137258 !10 "3 . Il primo risultato ha tre cifre<br />

esatte, quin<strong>di</strong>, un errore relativo <strong>di</strong> ! 5.78 "10 #2 , mentre il secondo ha cinque cifre esatte,<br />

quin<strong>di</strong> è molto più accurato. Nel primo calcolo c’è stato un fenomeno <strong>di</strong> cancellazione<br />

che ha dato origine ad una per<strong>di</strong>ta <strong>di</strong> informazione.<br />

♦<br />

Esempio <strong>4.</strong>8 ([<strong>4.</strong>3])<br />

Consideriamo in MATLAB la seguente operazione ( ( 1 + x)<br />

! 1)<br />

/ x con x ! 0 . Il<br />

risultato in aritmetica esatta è 1 per x ! 0 . Troviamo, invece<br />

>> x = 1.e-15 ; ( ( 1+ x)<br />

! x)<br />

/ x<br />

ans=<br />

1.1102<br />

Il risultato ottenuto non è accurato.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />


17<br />

Il risultato della fattorizzazione LU può essere non accurato se un pivot è “troppo<br />

piccolo”. Innanzitutto il pivot non deve essere inferiore al numero più piccolo<br />

rappresentabile dalla macchina, altrimenti sarebbe considerato come se fosse<br />

identicamente nullo. In realtà, errori consistenti possono generarsi anche per un pivot<br />

molto più grande <strong>di</strong> “realmin”.<br />

Esempio <strong>4.</strong>9 ([<strong>4.</strong>3])<br />

Consideriamo la matrice non singolare<br />

1 1+ 0.5 !10 "15<br />

A =<br />

3<br />

2 2 20 . (<strong>4.</strong>54)<br />

3 6 4<br />

Durante il calcolo della fattorizzazione LU con il Programma <strong>4.</strong>1 non si generano<br />

( ) !15<br />

= 10 , l’algoritmo (<strong>4.</strong>34) dà una<br />

2<br />

elementi <strong>di</strong> pivot nulli. Pur essendo a22 fattorizzazione. Nonostante ciò, il calcolo dei fattori L ed U non è accurato, come si<br />

verifica calcolando A ! LU<br />

( ) ,<br />

A ! LU =<br />

0 0 0<br />

0 0 0 . (<strong>4.</strong>55)<br />

0 0 4<br />

( ) sarebbe uguale alla matrice identicamente nulla. Ciò non<br />

In aritmetica esatta A ! LU<br />

accade nel caso reale a causa del fenomeno della cancellazione <strong>di</strong> cifre significative nelle<br />

operazioni <strong>di</strong> somma.<br />

♦<br />

( 2)<br />

!15<br />

Nell’esempio precedente il pivot a22 = 10 produce numeri molto gran<strong>di</strong><br />

nell’algoritmo <strong>di</strong> fattorizzazione (<strong>4.</strong>34). Ciò è all’origine della cancellazione <strong>di</strong> cifre<br />

significative che dà luogo al risultato (<strong>4.</strong>55). Questo problema può essere risolto<br />

scambiando le righe <strong>di</strong> A in modo tale che ad ogni passo dell’iterazione (<strong>4.</strong>34) i pivot<br />

siano, in valore assoluto, i più gran<strong>di</strong> possibili tra tutti quelli <strong>di</strong>sponibili. Un semplice<br />

algoritmo per realizzare ciò, che generalizza l’algoritmo (<strong>4.</strong>34), è [<strong>4.</strong>3]<br />

per k = 1,2,...,n<br />

per i = k + 1,...,n<br />

cercare mk tale che amk k = max<br />

i= k,...,n a ( k)<br />

ik<br />

scambiare la riga k con la riga mk ,<br />

lik = a ( k)<br />

ik<br />

k<br />

akk ( ) ,<br />

per j = k + 1,...,n<br />

( k +1)<br />

( k)<br />

k<br />

aij = aij ! likakj ( ) .<br />

(<strong>4.</strong>56)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


Esercizio <strong>4.</strong>5<br />

18<br />

Si calcolino i fattori L e U per la matrice (<strong>4.</strong>54) utilizzando il Programma <strong>4.</strong>1 e si<br />

verifichi che il risultato non è accurato.<br />

♦<br />

Esercizio <strong>4.</strong>6<br />

Implementare in MATLAB l’algoritmo (<strong>4.</strong>56) e verificare che la fattorizzazione LU<br />

della matrice (<strong>4.</strong>54) è molto più accurata <strong>di</strong> quella ottenuta con il Programma <strong>4.</strong>1.<br />

♦<br />

Il programma MATLAB “lu”, cui abbiamo in precedenza accennato, si base<br />

sostanzialmente su <strong>di</strong> un algoritmo <strong>di</strong> fattorizzazione con pivoting per righe del tipo<br />

(<strong>4.</strong>56).<br />

<strong>4.</strong>6 Matrici sparse, matrici bandate<br />

Lo strumento matrice è efficace sia per formulare in maniera semplice e sintetica un<br />

sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong>, sia per stu<strong>di</strong>arne le proprietà. Tuttavia, può<br />

capitare che esso si riveli ridondante. Come abbiamo visto nelle Note 2 e 3, esistono<br />

molti modelli caratterizzati da matrici che hanno una buona parte degli elementi uguali a<br />

zero. Una matrice ( n ! n)<br />

con n >> 1 si <strong>di</strong>ce che è sparsa quando il numero <strong>di</strong> elementi<br />

<strong>di</strong>versi da zero è <strong>di</strong> or<strong>di</strong>ne O ( n)<br />

. Avere matrici sparse è molto vantaggioso perché è<br />

sufficiente memorizzare solo gli elementi <strong>di</strong>versi da zero. Ciò comporta un notevole<br />

risparmio <strong>di</strong> memoria e <strong>di</strong> operazioni. Una matrice sparsa può essere memorizzata<br />

attraverso tre vettori: un vettore contiene gli elementi della matrice e gli altri due<br />

contengono i corrispondenti in<strong>di</strong>ci <strong>di</strong> riga e colonna. Pertanto, bisogna memorizzare 3n<br />

variabili (<strong>di</strong> cui 2n sono interi) invece che n 2 variabili reali.<br />

Figura <strong>4.</strong>2 Struttura <strong>di</strong> una matrice a bande.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


19<br />

Osserviamo subito che la fattorizzazione <strong>di</strong> Gauss può introdurre nuovi elementi<br />

<strong>di</strong>versi da zero. In generale, pur essendo A sparsa, le matrici L ed U possono essere<br />

matrici non sparse. Rior<strong>di</strong>nando la matrice A è possibile ridurre al minimo la<br />

generazione <strong>di</strong> nuovi elementi nelle matrici L ed U. I meto<strong>di</strong> iterativi che in seguito<br />

stu<strong>di</strong>eremo preservano le proprietà <strong>di</strong> sparsità delle matrici.<br />

Le matrici a bande rappresentano un significativo esempio <strong>di</strong> matrice sparsa. Esse si<br />

ottengono quando le <strong>equazioni</strong> del sistema possono essere or<strong>di</strong>nate in maniera che ogni<br />

incognita xi appaia solo in poche <strong>equazioni</strong> vicine alla i ! esima. Esse si incontrano<br />

nell’analisi dei circuiti e nei modelli <strong>di</strong>screti <strong>di</strong> <strong>equazioni</strong> <strong>di</strong>fferenziali.<br />

Si <strong>di</strong>ce che la matrice A = ( aij ) ha una banda superiore q se aij = 0 per j > i + q e<br />

una banda inferiore p se aij = 0 per i > j + p , Figura <strong>4.</strong>2. Una proprietà importante<br />

della fattorizzazione LU è che è preservata la struttura a banda. Si consideri una matrice<br />

a banda superiore q e a banda inferiore p . Si può mostrare che se esiste la<br />

fattorizzazione LU per la matrice A , allora la matrice U è a banda superiore q e la<br />

matrice L è a banda inferiore p . L’algoritmo <strong>di</strong> fattorizzazione LU per le matrici a<br />

banda richiede, pertanto, un numero <strong>di</strong> operazioni notevolmente più basso rispetto al<br />

caso più generale se non è richiesta l’operazione <strong>di</strong> pivoting, ad esempio, per le matrici a<br />

predominanza <strong>di</strong>agonale stretta o le matrici simmetriche e definite positive. Per un<br />

approfon<strong>di</strong>mento si rimanda alla referenze [<strong>4.</strong>1] e [<strong>4.</strong>2].<br />

In molte applicazioni è necessario risolvere un sistema <strong>di</strong> <strong>equazioni</strong> con matrici a<br />

bande n ! n<br />

( ) della forma<br />

A =<br />

a 1 c 1 0<br />

b 2 a 2 ...<br />

... c n!1<br />

0 b n!1 a n<br />

. (<strong>4.</strong>57)<br />

In questo caso la matrice A viene detta tri-<strong>di</strong>agonale. Si verifica facilmente che, se la<br />

fattorizzazione LU esiste, allora L ed U sono due matrici bi-<strong>di</strong>agonali [<strong>4.</strong>3],<br />

L =<br />

1 0 0<br />

l2 1 ...<br />

,U =<br />

... 0<br />

0 l n!1 1<br />

u 1 c 1 0<br />

0 u 2 ...<br />

... c n!1<br />

0 0 u n<br />

. (<strong>4.</strong>58)<br />

I coefficienti l i e u i possono essere determinati imponendo che LU = A . In tal modo si<br />

trova che<br />

u1 = a1, li = bi , ui = ai ! liui!1, i = 2,...,n. (<strong>4.</strong>59)<br />

ui!1 G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


20<br />

L’algoritmo (<strong>4.</strong>59) è noto come algoritmo <strong>di</strong> Thomas ed è una forma particolarmente<br />

conveniente <strong>di</strong> fattorizzazione LU. Per n >> 1il numero <strong>di</strong> operazioni cresce come n al<br />

crescere <strong>di</strong> n .<br />

Esercizio <strong>4.</strong>7<br />

Implementare in MATLAB l’algoritmo (<strong>4.</strong>59).<br />

Esempio <strong>4.</strong>10 ([<strong>4.</strong>3])<br />

In MATALB per costruire una matrice tri-<strong>di</strong>agonale è possibile utilizzare il comando<br />

“sp<strong>di</strong>ags”. Ad esempio, per costruire la matrice tri-<strong>di</strong>agonale ( 20 ! 20)<br />

che ha elementi<br />

pari ad 5 sulla <strong>di</strong>agonale principale, pari a 1 sulla prima sotto<strong>di</strong>agonale e pari a 2 sulla<br />

prima sopra<strong>di</strong>agonale basta scrivere i seguenti coman<strong>di</strong>:<br />

>> a=ones(20,1); b=5*a; c=2*a;<br />

>> A=sp<strong>di</strong>ags([a b c],-1:1, 20, 20);<br />

Si noti che A viene memorizzata in MATLAB in forma sparsa. Quando in MATLAB si<br />

risolve un sistema la cui matrice è memorizzata in tale formato, vengono<br />

automaticamente richiamate delle tecniche <strong>di</strong> risoluzione che consentono <strong>di</strong> ottimizzare i<br />

tempi <strong>di</strong> calcolo e l’occupazione <strong>di</strong> memoria.<br />

♦<br />

<strong>4.</strong>7 Il problema del con<strong>di</strong>zionamento e della stabilità numerica<br />

Come abbiamo già avuto modo <strong>di</strong> notare nel §<strong>4.</strong>4, a causa dell’errore <strong>di</strong><br />

arrotondamento, il prodotto LU non riproduce dà esattamente la matrice A . Abbiano<br />

anche visto che l’uso del pivoting consente <strong>di</strong> risolvere questo problema. Purtroppo ciò<br />

non è sempre possibile come mostra l’esempio che segue.<br />

Esempio <strong>4.</strong>11 ([<strong>4.</strong>3])<br />

Consideriamo come matrice A la matrice <strong>di</strong> Hilbert cui elementi sono definiti come<br />

segue<br />

a ij =<br />

1<br />

i + j ! 1<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

i, j = 1,2,...,n . (<strong>4.</strong>60)<br />

Essa è simmetrica e definita positiva. Scegliamo, inoltre, il termine noto b del sistema<br />

(<strong>4.</strong>1) in modo tale che la soluzione esatta sia x = 1,1,...,1 T ,<br />


21<br />

b = A 1,1,...,1 T . (<strong>4.</strong>61)<br />

In<strong>di</strong>chiamo con ˆx la soluzione del sistema (<strong>4.</strong>1) ottenuta con il comando A\b <strong>di</strong><br />

MATLAB. Se non vi fosse l’errore dovuto all’arrotondamento avremmo x ! ˆx = 0 . In<br />

realtà, a causa <strong>di</strong> questo errore risulta x ! ˆx " 0 . Consideriamo due tipi <strong>di</strong> misura<br />

dell’errore: l’errore relativo<br />

e il residuo relativo<br />

e ! x " ˆx<br />

x<br />

r ! Aˆx " b<br />

b<br />

Tabella <strong>4.</strong>1<br />

n e r<br />

10 6.1!10 "5 1.3!10 "16<br />

20 7.7 1.0 !10 "16<br />

30 23.1 2.3!10 "16<br />

40 80.9 6.8 !10 "16<br />

50 89.2 <strong>4.</strong>5 !10 "16<br />

(<strong>4.</strong>62)<br />

. (<strong>4.</strong>63)<br />

In Tabella <strong>4.</strong>1 sono riportati e ed r per <strong>di</strong>versi valori <strong>di</strong> n . Al crescere <strong>di</strong> n pur<br />

restando il residuo relativo dell’or<strong>di</strong>ne <strong>di</strong> 10 !16 , l’errore relativo cresce in modo<br />

vertiginoso. In questo paragrafo cercheremo <strong>di</strong> stabilire una relazione tra il residuo<br />

relativo e l’errore relativo.<br />

♦<br />

In<strong>di</strong>chiamo con ˆx la soluzione numerica dell’equazione (<strong>4.</strong>1). A causa degli errori <strong>di</strong><br />

arrotondamento si ha<br />

Aˆx = ˆ b (<strong>4.</strong>64)<br />

con ˆ b ! b . Pertanto la soluzione numerica dell’equazione (<strong>4.</strong>1) è equivalente alla<br />

soluzione “esatta” dell’equazione (<strong>4.</strong>64). Posto<br />

e<br />

!b = ˆ b " b (<strong>4.</strong>65)<br />

!x = ˆx " x (<strong>4.</strong>66)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


22<br />

si pone il problema <strong>di</strong> determinare una stima dell’errore !x a partire dalla conoscenza<br />

<strong>di</strong> !b .<br />

Data un’equazione possiamo in linea schematica <strong>di</strong>stinguere, per quanto riguarda la<br />

propagazione dell’errore, il comportamento dell’equazione dal comportamento del<br />

particolare algoritmo utilizzato per risolverla. Supponiamo che sia possibile risolvere<br />

l’equazione esattamente. Ci poniamo la seguente domanda: eventuali perturbazioni sui<br />

dati dell’equazione come influenzano la soluzione? Per caratterizzare un’equazione<br />

rispetto a questo tipo <strong>di</strong> comportamento si utilizza il termine con<strong>di</strong>zionamento.<br />

Un’equazione si <strong>di</strong>ce ben con<strong>di</strong>zionata se eventuali perturbazioni sui dati non<br />

influenzano eccessivamente la soluzione, altrimenti si <strong>di</strong>ce mal con<strong>di</strong>zionata. La<br />

definizione <strong>di</strong> equazione ben con<strong>di</strong>zionata è più restrittiva <strong>di</strong> quella <strong>di</strong> equazione ben<br />

posta secondo Hadamard 3 .<br />

Nel caso <strong>di</strong> un algoritmo, per in<strong>di</strong>care il suo comportamento rispetto alla<br />

propagazione dell’errore si usa il termine stabilità numerica. Un algoritmo si <strong>di</strong>ce stabile<br />

numericamente se l’errore non si amplifica eccessivamente nella successione delle<br />

operazioni, altrimenti si <strong>di</strong>ce numericamente instabile.<br />

<strong>4.</strong>7.1 Con<strong>di</strong>zionamento <strong>di</strong> un sistema lineare<br />

Il problema del con<strong>di</strong>zionamento <strong>di</strong> un sistema <strong>di</strong> <strong>equazioni</strong> <strong>algebriche</strong> <strong>lineari</strong><br />

consiste nel stu<strong>di</strong>are come varia la soluzione del sistema al variare dei dati, cioè della<br />

matrice e del termine noto.<br />

Stu<strong>di</strong>amo dapprima il caso in cui varia solo il termine noto. In<strong>di</strong>chiamo con x e<br />

ˆx = x + !x le soluzioni dell’equazione (<strong>4.</strong>1) con i termini noti b e ˆ b = b + !b ,<br />

rispettivamente,<br />

Sottraendo membro a membro otteniamo<br />

quin<strong>di</strong><br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

Ax = b , A( x + !x)<br />

= b + !b . (<strong>4.</strong>67)<br />

A!x = !b , (<strong>4.</strong>68)<br />

!x = A "1 !b . (<strong>4.</strong>69)<br />

Per misurare l’entità della perturbazione nel termine noto e l’entità della perturbazione<br />

indotta nella soluzione introduciamo una norma ! : !b e !x danno una misura delle<br />

perturbazioni !b e !x . C’è una relazione tra !x e !b ? Dalla (<strong>4.</strong>69) si<br />

!x = A"1 !b . (<strong>4.</strong>70)<br />

Dalla definizione <strong>di</strong> norma <strong>di</strong> una matrice (ve<strong>di</strong> Appen<strong>di</strong>ce 2) abbiamo che<br />

3 Un’equazione è ben posta secondo Hadamard quando ammette una ed una sola soluzione ed inoltre, la<br />

soluzione <strong>di</strong>pende con continuità dai dati.


23<br />

Combinando le (<strong>4.</strong>70) e (<strong>4.</strong>71) otteniamo la relazione cercata<br />

A!1 "b # A !1 "b . (<strong>4.</strong>71)<br />

!x " A#1 !b . (<strong>4.</strong>72)<br />

E’ evidente che sono <strong>di</strong> particolare interesse la misura delle variazioni relative !x / x<br />

e !b / b . Dividendo ambo i membri della (<strong>4.</strong>72) per x abbiamo<br />

!x<br />

x " A#1 !b<br />

x<br />

Dalla prima equazione delle (<strong>4.</strong>67) si ha anche<br />

Allora, combinando le (<strong>4.</strong>73) e (<strong>4.</strong>74)<br />

! " #x<br />

x<br />

. (<strong>4.</strong>73)<br />

b ! A x . (<strong>4.</strong>74)<br />

$ ( A A%1 ) #b<br />

b<br />

. (<strong>4.</strong>75)<br />

Consideriamo, ora, il caso in cui varia la matrice. In<strong>di</strong>chiamo con x e ˆx = x + !x le<br />

soluzioni dell’equazione (<strong>4.</strong>1) con le matrici A e  = A + !A , rispettivamente, (stiamo<br />

implicitamente assumendo che A e  siano invertibili)<br />

Da queste <strong>equazioni</strong> abbiamo<br />

da cui<br />

e quin<strong>di</strong><br />

Essendo<br />

Ax = b , ( A + !A)<br />

( x + !x)<br />

= b . (<strong>4.</strong>76)<br />

Ax = ( A + !A)<br />

( x + !x),<br />

(<strong>4.</strong>77)<br />

!A( x + !x)<br />

+ A!x = 0 , (<strong>4.</strong>78)<br />

!x = A"1 !A( x + !x).<br />

(<strong>4.</strong>79)<br />

A!1 "A( x + "x)<br />

# A !1 "A ( x + "x)<br />

(<strong>4.</strong>80)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


dalla (<strong>4.</strong>79) si ha finalmente<br />

! "<br />

#x<br />

( x + #x)<br />

24<br />

$ ( A A%1 ) #A<br />

A<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

. (<strong>4.</strong>81)<br />

In<strong>di</strong>chiamo con ! l’ampiezza della perturbazione del dato in entrambi i casi: nel primo<br />

caso ! " #b / b , nel secondo caso ! " #A / A . Quin<strong>di</strong>, sia per la perturbazione del<br />

termine noto che per la perturbazione della matrice l’ampiezza relativa della<br />

perturbazione della soluzione ! è legata all’ampiezza della perturbazione del dato !<br />

dalla relazione<br />

! " K ( A)#<br />

, (<strong>4.</strong>82)<br />

dove<br />

K A ( ) ! A A"1 (<strong>4.</strong>83)<br />

è detto con<strong>di</strong>zionamento della matrice A . Essendo A !1 A " 1 (ve<strong>di</strong> Appen<strong>di</strong>ce 2), si<br />

ha che<br />

K ( A)<br />

! 1 (<strong>4.</strong>84)<br />

per ogni matrice A (invertibile). Dunque il con<strong>di</strong>zionamento <strong>di</strong> una matrice è sempre<br />

maggiore <strong>di</strong> 1. Il con<strong>di</strong>zionamento <strong>di</strong> una matrice può essere calcolato in MATLAB<br />

attraverso il comando “cond(A)”. Se il con<strong>di</strong>zionamento <strong>di</strong> A è piccolo, cioè dell’or<strong>di</strong>ne<br />

dell’unità, la matrice A è detta ben con<strong>di</strong>zionata ed a perturbazioni sui dati<br />

corrispondono perturbazioni sulla soluzione al più dello stesso or<strong>di</strong>ne <strong>di</strong> grandezza <strong>di</strong><br />

quelle sui dati. Se invece il con<strong>di</strong>zionamento è grande la matrice si <strong>di</strong>ce mal con<strong>di</strong>zionata<br />

e a piccole perturbazioni sui dati possono corrispondere gran<strong>di</strong> perturbazioni sulla<br />

soluzione.<br />

Esempio <strong>4.</strong>7<br />

La matrice <strong>di</strong> Hilbert definita dalla (<strong>4.</strong>60) è mal con<strong>di</strong>zionata già per n ! 4 . In Tabella<br />

<strong>4.</strong>2 riportiamo il con<strong>di</strong>zionamento per <strong>di</strong>versi valori <strong>di</strong> n . In base a questo risultato non<br />

ci dobbiamo meravigliare <strong>di</strong> quanto abbiamo visto nell’Esempio <strong>4.</strong>6.<br />

n<br />

Tabella <strong>4.</strong>2<br />

K A<br />

( )<br />

10 1.60...!10 13<br />

20 <strong>4.</strong>60...!10 18<br />

30 6.47...!10 18<br />

40 3.13...!10 18<br />

50 2.19...!10 19<br />


25<br />

Alcune proprietà del numero <strong>di</strong> con<strong>di</strong>zionamento sono raccolte nel seguente<br />

enunciato.<br />

<strong>4.</strong>7.2 Proprietà del numero <strong>di</strong> con<strong>di</strong>zionamento<br />

1. K ( !A)<br />

= K ( A)<br />

per ogni matrice A e per ogni scalare ! .<br />

2.<br />

K2 ( A)<br />

= ! max<br />

dove ! max e ! min sono, rispettivamente, il valore singolare più<br />

! min<br />

grande e più piccolo <strong>di</strong> A (ve<strong>di</strong> Appen<strong>di</strong>ci 1 e 2) 4 .<br />

3. Se A è simmetrica K2 ( A)<br />

= ! max dove ! e ! sono, rispettivamente,<br />

max min<br />

! min<br />

l’autovalore della matrice in valore assoluto più grande e più piccolo.<br />

<strong>4.</strong> Se A è simmetrica e definita positiva<br />

K2 ( A)<br />

= ! max<br />

rispettivamente, l’autovalore più grande e più piccolo.<br />

5. K 2 A<br />

( ) = 1 se e solo se A = !I .<br />

! min<br />

dove ! max e ! min sono,<br />

La <strong>di</strong>mostrazione delle proprietà 2. viene data in Appen<strong>di</strong>ce 2. La <strong>di</strong>mostrazione delle<br />

proprietà 3. e <strong>4.</strong> è imme<strong>di</strong>ata se si ricorda che gli autovalori <strong>di</strong> una matrice simmetrica<br />

sono reali e i valori principali sono uguali agli autovalori presi in valore assoluto. Inoltre,<br />

se la matrice è anche definita positiva gli autovalori sono tutti positivi (ve<strong>di</strong> Appen<strong>di</strong>ce<br />

1). Lasciamo al lettore la <strong>di</strong>mostrazione delle altre. In base a queste proprietà abbiamo<br />

che una matrice mal con<strong>di</strong>zionata è caratterizzata da un valore singolare massimo molto<br />

più grande <strong>di</strong> quello minimo. Se la matrice è simmetrica essa è mal con<strong>di</strong>zionata se<br />

l’autovalore in modulo più grande è molto più grande dell’autovalore in modulo più<br />

piccolo. Infine, quando la matrice A è simmetrica e definita positiva essa è mal<br />

con<strong>di</strong>zionata se l’autovalore più grande è molto più grande dell’autovalore più piccolo.<br />

Infine, essendo (ve<strong>di</strong> Appen<strong>di</strong>ce 1)<br />

det( A)<br />

= " ! i ( A)<br />

, (<strong>4.</strong>85)<br />

dove ! i ( A)<br />

per i = 1,2,...,n sono gli autovalori della matrice A , si evince che non c’è,<br />

in generale, alcuna relazione tra il determinante <strong>di</strong> A e il numero <strong>di</strong> con<strong>di</strong>zionamento.<br />

<strong>4.</strong>7.3 Analisi dell’errore<br />

Sappiamo che un algoritmo implementato in aritmetica finita crea errori <strong>di</strong><br />

arrotondamento. La stabilità è una misura <strong>di</strong> come tali errori si propagano.<br />

4<br />

Con K p ( A)<br />

inten<strong>di</strong>amo il con<strong>di</strong>zionamento definito attraverso la p-norma ! .<br />

p<br />

n<br />

i=1<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


26<br />

E’ possibile avere due <strong>di</strong>verse stime dell’errore, una si basa su una stima a posteriori e<br />

l’altra su una stima a priori. In entrambi i casi il numero <strong>di</strong> con<strong>di</strong>zionamento <strong>di</strong> A gioca<br />

un ruolo fondamentale. L’idea <strong>di</strong> base consiste nel cercare <strong>di</strong> valutare la variazione sui<br />

dati necessaria a produrre, quando il problema è risolto esattamente, la stessa variazione<br />

sui risultati ottenuta per effetto degli errori <strong>di</strong> arrotondamento. Una volta valutate queste<br />

variazioni, attraverso le (<strong>4.</strong>75) e (<strong>4.</strong>81) si può avere una stima dell’errore se A non è mal<br />

con<strong>di</strong>zionata.<br />

Consideriamo dapprima una stima a posteriori. A causa degli errori <strong>di</strong> arrotondamento<br />

la soluzione dell’equazione (<strong>4.</strong>1) con il metodo della fattorizzazione <strong>di</strong> Gauss x ! non è<br />

soluzione esatta della (<strong>4.</strong>1) e<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

r ! Ax * " b # 0 . (<strong>4.</strong>86)<br />

Il residuo r sarebbe uguale a zero se non vi fossero errori <strong>di</strong> arrotondamento. Allora, la<br />

soluzione x ! è la soluzione che si avrebbe se il sistema (<strong>4.</strong>1) fosse risolto esattamente<br />

con ˆ b = b + r<br />

( ) al posto del termine noto b . Allora, applicando la (<strong>4.</strong>75) si ha<br />

x ! x "<br />

x<br />

# K ( A)<br />

r<br />

b<br />

. (<strong>4.</strong>87)<br />

Quando la matrice A è ben con<strong>di</strong>zionata, K ( A)<br />

! 1, il residuo relativo r / b<br />

rappresenta una buona stima dell’errore relativo e / x , dove e ! x " x # . Attenzione,<br />

quando la matrice A è mal con<strong>di</strong>zionata r / b non dà alcuna informazione utile<br />

sull’errore, come gli Esempi <strong>4.</strong>6 e <strong>4.</strong>7 evidenziano. La (<strong>4.</strong>87) è una stima a posteriori<br />

perché può essere ottenuta solo dopo che il problema è stato risolto.<br />

Consideriamo, ora una stima a priori. In<strong>di</strong>chiamo sempre con x ! la soluzione ottenuta<br />

con il metodo della fattorizzazione <strong>di</strong> Gauss e con E una matrice tale che<br />

A + E ( )x! = b . (<strong>4.</strong>88)<br />

La soluzione x ! è la soluzione che si avrebbe se il sistema (<strong>4.</strong>1) fosse risolto esattamente<br />

con  = A + E<br />

( ) al posto della matrice A . Allora, applicando la (<strong>4.</strong>81) si ha<br />

x ! x "<br />

x "<br />

# K ( A)<br />

E<br />

A<br />

. (<strong>4.</strong>89)<br />

Come nel caso precedente, quando la matrice A è ben con<strong>di</strong>zionata la quantità E / A<br />

è una buona in<strong>di</strong>cazione della precisione della soluzione. E’ possibile avere una stima<br />

della norma <strong>di</strong> E . Per la fattorizzazione LU con pivoting si <strong>di</strong>mostra che [<strong>4.</strong>2]


27<br />

E ! " # $t A ! (<strong>4.</strong>90)<br />

dove ! è la base e t è il numero <strong>di</strong> cifre significative dell’aritmetica impiegata.<br />

Combinando le (<strong>4.</strong>89) e (<strong>4.</strong>90) si ottiene<br />

x ! x "<br />

x "<br />

#<br />

#<br />

$ % !t K # ( A)<br />

. (<strong>4.</strong>91)<br />

Questa è una stima a priori perché può essere ottenuta senza risolvere il problema. Si<br />

osservi che ! "t


28<br />

In generale, il con<strong>di</strong>zionamento <strong>di</strong> una matrice può essere mo<strong>di</strong>ficato dallo scaling.<br />

Un problema molto interessante, ma <strong>di</strong> <strong>di</strong>fficile soluzione, è la determinazione <strong>di</strong> due<br />

matrici D1 e D2 tali da minimizzare K ( D1AD2 ). Si tratta <strong>di</strong> un problema <strong>di</strong><br />

preprocessing (precon<strong>di</strong>zionamento). Per ulteriori approfon<strong>di</strong>menti si veda in [<strong>4.</strong>2].<br />

<strong>4.</strong>8 Meto<strong>di</strong> iterativi<br />

Il metodo della fattorizzazione <strong>di</strong> Gauss è un metodo <strong>di</strong>retto: la soluzione esatta del<br />

problema è determinata con un numero finito <strong>di</strong> operazioni elementari in assenza <strong>di</strong><br />

errori <strong>di</strong> arrotondamento.<br />

Un metodo iterativo per la soluzione del sistema (<strong>4.</strong>1) consiste nel costruire, a partire<br />

da un dato iniziale x 0 ( ) , una successione<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

x 1 ( ) ,x 2 ( ) ,...,x k ( ) ,... (<strong>4.</strong>96)<br />

convergente alla soluzione x per k ! " attraverso l’iterazione<br />

k +1<br />

x ( ) = Bx k ( ) + g . (<strong>4.</strong>97)<br />

La (<strong>4.</strong>97) ricorda l’iterazione <strong>di</strong> punto fisso descritta nella <strong>Nota</strong> 5: la soluzione del<br />

sistema (<strong>4.</strong>1) è cercata come punto fisso della funzione <strong>di</strong> iterazione<br />

che è, quin<strong>di</strong>, la soluzione dell’equazione<br />

! ( x)<br />

= Bx + b , (<strong>4.</strong>98)<br />

x = Bx + b . (<strong>4.</strong>99)<br />

Come costruire l’iterazione (<strong>4.</strong>97)? Consideriamo la seguente decomposizione della<br />

matrice A :<br />

con det( V)<br />

! 0 . Si ha allora<br />

da cui il proce<strong>di</strong>mento iterativo<br />

A = V + W (<strong>4.</strong>100)<br />

Ax = b ! Vx = "Wx + b (<strong>4.</strong>101)<br />

k +1<br />

Vx ( ) = !Wx k ( ) + b per k ! 0 . (<strong>4.</strong>102)


29<br />

Il punto fisso della (<strong>4.</strong>102) è la soluzione dell’equazione (<strong>4.</strong>101) ovvero del sistema (<strong>4.</strong>1)<br />

. La matrice <strong>di</strong> iterazione B è data da<br />

e g è dato da<br />

B = !V !1 W = V !1 A ! I (<strong>4.</strong>103)<br />

g = V!1 b . (<strong>4.</strong>104)<br />

La decomposizione (<strong>4.</strong>100) deve essere fatta in modo tale da garantire due requisiti:<br />

i) l’iterazione (<strong>4.</strong>97) sia convergente;<br />

ii) il costo computazionale sia più basso <strong>di</strong> quello che si avrebbe con il metodo<br />

della fattorizzazione <strong>di</strong> Gauss.<br />

Quando l’iterazione converge, essa, in generale, dà la soluzione solo per k ! " .<br />

Dunque, come nell’iterazione <strong>di</strong> punto fisso stu<strong>di</strong>ata nella <strong>Nota</strong> 5, anche in questo caso<br />

bisogna introdurre un criterio <strong>di</strong> arresto. Posto<br />

e<br />

!x<br />

k +1 ( ) k +1<br />

" x<br />

per arrestare l’iterazione possiamo utilizzare uno dei due criteri<br />

dove ! è una norma naturale (ve<strong>di</strong> Appen<strong>di</strong>ce 2).<br />

( ) # x k ( ) (<strong>4.</strong>105)<br />

r k ( ) ! b " Ax k ( ) , (<strong>4.</strong>106)<br />

!x M ( ) " # , (<strong>4.</strong>107)<br />

r M ( ) ! " , (<strong>4.</strong>108)<br />

Ora mostreremo che c’è una relazione tra il residuo r k ( ) e l’incremento !x<br />

Essendo<br />

dalla (<strong>4.</strong>102) segue che<br />

quin<strong>di</strong><br />

k +1 ( ) .<br />

k<br />

!Wx ( ) + b = ( V ! A)x<br />

k ( ) + b = Vx k ( ) ! r k ( ) . (<strong>4.</strong>109)<br />

k+1<br />

V x ( ) ! x k ( ) ( ) = !r k<br />

( ) , (<strong>4.</strong>110)<br />

V!x k+1 ( ) = r k ( ) o !x k+1 ( ) = V "1 r k ( ) . (<strong>4.</strong>111)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


30<br />

Tra le norme del residuo e dell’incremento ci sono le relazioni<br />

( ) ! V "x k+1<br />

k<br />

r<br />

( )<br />

o !x k+1<br />

( ) " V #1 r k ( )<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

. (<strong>4.</strong>112)<br />

Per descrivere i vari meto<strong>di</strong> iterativi conviene rappresentare la matrice A come segue<br />

A = D + ! L + ! U (<strong>4.</strong>113)<br />

dove D è la matrice <strong>di</strong>agonale formata dagli elementi della <strong>di</strong>agonale <strong>di</strong> A , ! L è la<br />

matrice triangolare inferiore formata dagli elementi della parte triangolare inferiore <strong>di</strong> A<br />

con elementi nulli sulla <strong>di</strong>agonale e ! U è la matrice triangolare superiore formata dagli<br />

elementi della parte triangolare superiore <strong>di</strong> A con elementi nulli sulla <strong>di</strong>agonale, Figura<br />

<strong>4.</strong>3.<br />

Figura <strong>4.</strong>3<br />

e<br />

<strong>4.</strong>7.1 Metodo <strong>di</strong> Jacobi<br />

Il metodo iterativo <strong>di</strong> Jacobi consiste nello scegliere<br />

La matrice <strong>di</strong> iterazione è<br />

V = D (<strong>4.</strong>114)<br />

W = ! ! U + ! ( L).<br />

(<strong>4.</strong>115)<br />

B = !D!1 ( U ! + L!<br />

) = I ! D !1 A . (<strong>4.</strong>116)<br />

La matrice D è invertibile se a ii ! 0 per i = 1,2,...,n . L’inversa <strong>di</strong> D si calcola<br />

imme<strong>di</strong>atamente, essa è ancora una matrice <strong>di</strong>agonale,<br />

D !1 =<br />

!1<br />

a11 0 0 ... 0<br />

0<br />

!1<br />

a22 0 ... 0<br />

... ... ... ... ...<br />

!1<br />

0 0 0 ... ann . (<strong>4.</strong>117)


31<br />

In forma esplicita l’algoritmo che descrive l’iterazione <strong>di</strong> Jacobi è<br />

( k +1)<br />

1<br />

xi =<br />

aii $ n<br />

& bi ! # aijx j<br />

%<br />

j =1, j "i<br />

( k)<br />

'<br />

)<br />

(<br />

i = 1,2,...,n (<strong>4.</strong>118)<br />

per k = 0,1,... .<br />

Il metodo <strong>di</strong> Jacobi è implementato nel Programma <strong>4.</strong>2, [<strong>4.</strong>3]. I parametri <strong>di</strong> ingresso<br />

sono la matrice A , il termine noto b , il dato iniziale x0 per l’iterazione, il numero<br />

massimo <strong>di</strong> iterazioni consentite e l’errore “toll” del criterio d’arresto dell’iterazione,<br />

err = r k ( )<br />

/ r 0 ( ) ! toll .<br />

Programma <strong>4.</strong>2: Iterazione <strong>di</strong> Jacobi<br />

function [x,iter]=jacobi(A,b,x0,nmax,toll)<br />

% Iterazione <strong>di</strong> Jacobi<br />

[n,n]=size(A);<br />

iter=0;r=b-A*x0;r0=norm(r);x_old=x0;<br />

err=r0;<br />

while err>toll&iter


32<br />

con il metodo <strong>di</strong> Jacobi. La matrice è dominanza <strong>di</strong>agonale stretta per righe. Con x 0 = 0<br />

e toll = 10 !6 dopo 28 iterazioni si ottiene la soluzione x = 0.0714,0.2143,0.5714 T .<br />

Esempio <strong>4.</strong>10<br />

Risolviamo il sistema<br />

1 3 3<br />

3 6 4<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

1<br />

2 2 2 x = 3<br />

2<br />

♦<br />

(<strong>4.</strong>120)<br />

con il metodo <strong>di</strong> Jacobi. L’iterazione <strong>di</strong> Jacobi non converge perché la matrice non è a<br />

dominanza <strong>di</strong>agonale stretta per righe.<br />

♦<br />

Quale è il vantaggio dal punto <strong>di</strong> vista del costo computazionale <strong>di</strong> questo metodo<br />

rispetto a quello della fattorizzazione <strong>di</strong> Gauss? Ad ogni iterazione del metodo <strong>di</strong> Jacobi<br />

bisogna effettuare ( 2n ! 1)n<br />

operazioni (ad<strong>di</strong>zioni, moltiplicazioni e <strong>di</strong>visioni). E’<br />

evidente, allora, che se il numero <strong>di</strong> iterazioni M necessarie per raggiungere la<br />

precisione desiderata è tale che M > 1. Invece nella fattorizzazione <strong>di</strong> Gauss le matrici L e U sono,<br />

in generale, piene anche se A è sparsa.<br />

e<br />

<strong>4.</strong>7.2 Metodo <strong>di</strong> Gauss-Seidel<br />

Il metodo iterativo <strong>di</strong> Gauss-Seidel consiste nello scegliere<br />

La matrice <strong>di</strong> iterazione è<br />

V = D + ! L (<strong>4.</strong>121)<br />

W = ! U . (<strong>4.</strong>122)<br />

B = ! D + ! ( L)<br />

!1 U ! = I ! ( D + L!<br />

) !1<br />

A . (<strong>4.</strong>123)


Ad ogni passo dell’iterazione <strong>di</strong> Gauss-Seidel bisogna risolvere il sistema<br />

33<br />

D + ! k +1 ( L)x<br />

( ) = ! ! Ux k ( ) + b . (<strong>4.</strong>124)<br />

Essendo D + ! L una matrice triangolare bassa il sistema (<strong>4.</strong>124) può essere risolto con<br />

l’algoritmo (<strong>4.</strong>14). Si ottiene lo schema iterativo in forma esplicita<br />

( k +1)<br />

1<br />

x1 =<br />

a11 ( k +1)<br />

1<br />

x2 =<br />

a22 ( k +1)<br />

1<br />

x3 =<br />

a33 e così via. In termini più generali si ha<br />

( k +1)<br />

1<br />

xi =<br />

aii #<br />

$<br />

%<br />

#<br />

$<br />

%<br />

#<br />

$<br />

%<br />

n<br />

k<br />

b1 ! " a1hx h<br />

h=2<br />

( )<br />

&<br />

'<br />

(<br />

n<br />

( k +1)<br />

k<br />

b2 ! a21x1 ! " a2hx h<br />

h= 3<br />

(<strong>4.</strong>125)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

( )<br />

&<br />

'<br />

(<br />

n<br />

( k +1)<br />

( k +1)<br />

k<br />

b3 ! a31x1 ! a31x2 ! " a3hxh h= 4<br />

i!1<br />

#<br />

bi ! " aihxh $<br />

%<br />

h=1<br />

n<br />

( k +1)<br />

k<br />

! aihxh "<br />

h=i+1<br />

( )<br />

&<br />

'<br />

( i = 1,2,...,n (<strong>4.</strong>128)<br />

( )<br />

&<br />

'<br />

(<br />

(<strong>4.</strong>126)<br />

(<strong>4.</strong>127)<br />

per k = 0,1,... ; la prima sommatoria non dà contributo per se i = 1, mentre la seconda<br />

sommatoria non dà contributo se i = n . La (<strong>4.</strong>128) può essere espressa nella forma<br />

compatta<br />

k +1<br />

x ( ) = !D !1 Lx ! ( k +1)<br />

!1<br />

! D Ux ! ( k)<br />

!1<br />

+ D b (<strong>4.</strong>129)<br />

per k = 0,1,... .<br />

Il metodo <strong>di</strong> Gauss-Seidel converge se la matrice A verifica una <strong>di</strong> queste due<br />

con<strong>di</strong>zioni:<br />

i) la matrice A è a dominanza <strong>di</strong>agonale stretta per righe;<br />

ii) la matrice A è simmetrica e definita positiva.<br />

( ) vengono calcolate<br />

k +1<br />

Nel metodo <strong>di</strong> Jacobi le componenti del vettore x<br />

in<strong>di</strong>pendentemente le une dalle altre, invece nel metodo <strong>di</strong> Gauss-Seidel per calcolare<br />

( k +1)<br />

( k +1)<br />

( k +1)<br />

( k +1)<br />

xi si impiegano le componenti xi , x2 ,..., xi!1 calcolate in precedenza. Ciò rende<br />

il metodo <strong>di</strong> Gauss-Seidel più veloce <strong>di</strong> quello <strong>di</strong> Jacobi. Si osservi che il numero <strong>di</strong><br />

operazioni ad ogni iterazione è uguale al numero <strong>di</strong> operazioni richieste dal metodo <strong>di</strong><br />

Jacobi.<br />

Il metodo <strong>di</strong> Gauss-Seidel è implementato nel Programma <strong>4.</strong>3, [<strong>4.</strong>3]. I parametri <strong>di</strong><br />

ingresso sono la matrice A , il termine noto b , il dato iniziale x0 per l’iterazione, il


34<br />

numero massimo <strong>di</strong> iterazioni consentite e l’errore “toll” del criterio d’arresto<br />

dell’iterazione, err = r k ( )<br />

/ r 0 ( ) ! toll .<br />

Esempio <strong>4.</strong>11<br />

Risolviamo il sistema (<strong>4.</strong>119) con il metodo <strong>di</strong> Gauss-Seidel. La matrice è dominanza<br />

<strong>di</strong>agonale stretta per righe. Con x 0 = 0 e toll = 10 !6 dopo 8 iterazioni si ottiene la<br />

soluzione x = 0.0714,0.2143,0.5714 T , 20 iterazioni in meno del metodo <strong>di</strong> Jacobi. ♦<br />

Programma <strong>4.</strong>3: Iterazione <strong>di</strong> Gauss-Seidel<br />

function [x,iter]=gseidel(A,b,x0,nmax,toll)<br />

% Iterazione <strong>di</strong> Gauss-Seidel<br />

[n,n]=size(A);<br />

iter=0;r=b-A*x0;r0=norm(r);x=x0; err=r0;<br />

while err>toll&iter


Esercizio <strong>4.</strong>8<br />

35<br />

k +1<br />

x ( ) = I ! "D !1 ( A)x<br />

k ( ) + "D !1 b . (<strong>4.</strong>132)<br />

Implementare in MATLAB l’algoritmo del rilassamento per il metodo <strong>di</strong> Jacobi.<br />

Invece, partendo dal metodo <strong>di</strong> Gauss-Seidel<br />

k +1/2<br />

x ( ) = I ! ( D + L)<br />

!1 "<br />

#<br />

A$<br />

% x k ( ) + ( D + L)<br />

!1 b (<strong>4.</strong>133)<br />

si ottiene il metodo <strong>di</strong> rilassamento o metodo SOR<br />

Esercizio <strong>4.</strong>9<br />

( ) "1 1" !<br />

k +1<br />

x ( ) = D +!L<br />

k<br />

#$ ( )D " !U%&<br />

x ( ) + ! ( D + L)<br />

"1 b . (<strong>4.</strong>134)<br />

Implementare in MATLAB l’algoritmo del rilassamento per il metodo <strong>di</strong> Gauss-<br />

Seidel.<br />

♦<br />

<strong>4.</strong>9 Il problema della convergenza<br />

Introduciamo il vettore “errore”<br />

e k ( ) ! x k ( ) " x . (<strong>4.</strong>135)<br />

L’iterazione (<strong>4.</strong>96) generata dalla (<strong>4.</strong>97) converge al punto fisso x se e solo se<br />

La legge che governa e k ( ) per k ! 0 è<br />

<strong>4.</strong>9.1 Criterio <strong>di</strong> convergenza<br />

lim e<br />

k!" k ( ) = 0 . (<strong>4.</strong>136)<br />

k +1<br />

e ( ) = Be k<br />

( ) . (<strong>4.</strong>137)<br />

Consideriamo, ora, una norma naturale ! e applichiamola ad ambo i membri della<br />

(<strong>4.</strong>137),<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />


Siccome Be k ( ) ! B e k<br />

( )<br />

, si ha<br />

k +1<br />

e<br />

k +1<br />

e<br />

Dalla (<strong>4.</strong>139) segue imme<strong>di</strong>atamente che<br />

Se<br />

k<br />

e ( ) ! ( B ) k<br />

36<br />

( ) = Be k<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

( )<br />

( ) ! B e k<br />

e 0 ( )<br />

( )<br />

. (<strong>4.</strong>138)<br />

. (<strong>4.</strong>139)<br />

k = 1,2,... . (<strong>4.</strong>140)<br />

B < 1 (<strong>4.</strong>141)<br />

la (<strong>4.</strong>140) dà imme<strong>di</strong>atamente la (<strong>4.</strong>136). Pertanto, l’iterazione (<strong>4.</strong>97) converge alla<br />

soluzione x del sistema (<strong>4.</strong>99) se almeno una norma della matrice <strong>di</strong> iterazione è<br />

inferiore ad uno.<br />

Utilizzando la norma euclidea ! si ha che B = ! 2 2 max ( B)<br />

dove ! max ( B)<br />

è il valore<br />

singolare più grande della matrice B . La con<strong>di</strong>zione <strong>di</strong> convergenza (<strong>4.</strong>141) <strong>di</strong>venta<br />

! max B ( ) < 1 . (<strong>4.</strong>142)<br />

Se la matrice <strong>di</strong> iterazione è simmetrica si ha che ! max ( B)<br />

= max " B<br />

i=1,n<br />

( )<br />

( ) dove con ! i B<br />

in<strong>di</strong>chiamo un generico autovalore della matrice B . Quin<strong>di</strong> per matrici <strong>di</strong> iterazioni<br />

simmetriche la con<strong>di</strong>zione <strong>di</strong> convergenza è verifica se l’autovalore <strong>di</strong> B in modulo più<br />

grande ha modulo inferiore ad 1. In realtà, questo risultato ha vali<strong>di</strong>tà più generale.<br />

Per definizione, il raggio spettrale ! B<br />

( ) <strong>di</strong> una generica matrice quadrata B è<br />

! ( B)<br />

" max<br />

i=1,n # i B<br />

Si <strong>di</strong>mostra che per ogni ! > 0 esiste una norma ! " tale che, [<strong>4.</strong>4],<br />

Allora se<br />

B !<br />

( ) . (<strong>4.</strong>143)<br />

" # ( B)<br />

+ $ . (<strong>4.</strong>144)<br />

! ( B)<br />

< 1 (<strong>4.</strong>145)


37<br />

la (<strong>4.</strong>141) è verificata. In realtà, la (<strong>4.</strong>145) è anche una con<strong>di</strong>zione necessaria per la<br />

convergenza dell’iterazione. Infatti se fosse ! ( B)<br />

> 1 , la matrice <strong>di</strong> iterazione B avrebbe<br />

almeno un autovalore ! con ! > 1 e corrispondente autovettore u ! 0 . Essendo<br />

B k u = ! k u , B k u <strong>di</strong>vergerebbe per k ! " .<br />

Osservazione<br />

Il determinante <strong>di</strong> una matrice è uguale al prodotto dei suoi autovalori, (ve<strong>di</strong>, ad<br />

esempio, [<strong>4.</strong>4]). Allora se<br />

det( B)<br />

> 1 (<strong>4.</strong>146)<br />

certamente il raggio spettrale <strong>di</strong> B non verifica la con<strong>di</strong>zione <strong>di</strong> convergenza (<strong>4.</strong>145).<br />

Inoltre, la traccia <strong>di</strong> una matrice è uguale alla somma dei suoi autovalori. Allora, se<br />

tr( B)<br />

> n (<strong>4.</strong>147)<br />

significa che almeno un autovalore è in modulo maggiore <strong>di</strong> 1 e, quin<strong>di</strong> deve essere<br />

necessariamente ! B<br />

( ) > 1 .<br />

Esercizio <strong>4.</strong>10<br />

Considerare i meto<strong>di</strong> <strong>di</strong> Jacobi e Gauss-Seidel per la matrice<br />

A =<br />

1 !2 2<br />

!1 1 !1 . (<strong>4.</strong>148)<br />

!2 !2 1<br />

Determinare i raggi spettrali delle corrispondenti matrici <strong>di</strong> iterazione.<br />

Esercizio <strong>4.</strong>11<br />

Considerare i meto<strong>di</strong> <strong>di</strong> Jacobi e Gauss-Seidel per la matrice<br />

A =<br />

2 !1 1<br />

2 2 2<br />

!1 !1 2<br />

Determinare i raggi spettrali delle corrispondenti matrici <strong>di</strong> iterazione.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

♦<br />

♦<br />

. (<strong>4.</strong>149)<br />


38<br />

Dal criterio (<strong>4.</strong>145) è possibile ricavare delle con<strong>di</strong>zioni per la matrice A che assicurano<br />

la convergenza.<br />

<strong>4.</strong>9.2 Metodo <strong>di</strong> Jacobi<br />

Se la matrice A è a dominanza <strong>di</strong>agonale stretta per righe si ha B < 1 e, quin<strong>di</strong>,<br />

!<br />

! ( B)<br />

< 1 . La <strong>di</strong>mostrazione è la seguente. La matrice <strong>di</strong> iterazione del metodo <strong>di</strong> Jacobi<br />

ha elementi:<br />

e quin<strong>di</strong><br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

Bii = 0 , Bij = ! aij , i ! j (<strong>4.</strong>150)<br />

aii n<br />

n aij ! Bij =<br />

j =1 j =1, j "i aii Essendo la matrice A a dominanza <strong>di</strong>agonale stretta per righe si ha<br />

per ogni i . Combinando le (<strong>4.</strong>151) e (<strong>4.</strong>152) segue che<br />

Ricordando che<br />

abbiamo che<br />

! . (<strong>4.</strong>151)<br />

n<br />

"<br />

j =1, j !i<br />

aij < aii (<strong>4.</strong>152)<br />

n<br />

! Bij j =1<br />

< 1 per ogni i . (<strong>4.</strong>153)<br />

B ! = max<br />

i=1,n<br />

n<br />

" Bij j =1<br />

(<strong>4.</strong>154)<br />

B < 1. (<strong>4.</strong>155)<br />

!<br />

Essendo ! ( B)<br />

" B (ve<strong>di</strong> Appen<strong>di</strong>ce 2) si ha anche ! ( B)<br />

< 1 .<br />

#<br />

Se la matrice A è a dominanza <strong>di</strong>agonale stretta per righe, il metodo <strong>di</strong> Jacobi con<br />

rilassamento converge con 0 < ! " 1. Lasciamo al lettore la <strong>di</strong>mostrazione <strong>di</strong> questo<br />

criterio.<br />

<strong>4.</strong>9.3 Metodo <strong>di</strong> Gauss-Seidel<br />

Per il metodo <strong>di</strong> Gauss-Seidel ci limiteremo a enunciare dei criteri. Lasciamo la<br />

lettore la <strong>di</strong>mostrazione.


39<br />

Criterio 1. Se la matrice A è a dominanza <strong>di</strong>agonale stretta per righe, allora il raggio<br />

spettrale della corrispondente matrice <strong>di</strong> iterazione B è inferiore a 1 e, quin<strong>di</strong>, il metodo<br />

converge.<br />

Criterio 2. Se la matrice A è simmetrica e definita positiva, allora il raggio spettrale<br />

della corrispondente matrice <strong>di</strong> iterazione B è inferiore a 1 e, quin<strong>di</strong>, il metodo<br />

converge.<br />

Per il metodo <strong>di</strong> Gauss-Seidel con rilassamento esistono i seguenti criteri.<br />

Criterio 3. Per ogni matrice A una con<strong>di</strong>zione necessaria <strong>di</strong> convergenza del metodo <strong>di</strong><br />

rilassamento è 0 < ! < 2 .<br />

Criterio <strong>4.</strong> Se A è una matrice simmetrica e definita positiva con<strong>di</strong>zione necessaria e<br />

sufficiente per la convergenza del metodo <strong>di</strong> rilassamento è 0 < ! < 2 .<br />

<strong>4.</strong>8.2 Velocità <strong>di</strong> convergenza<br />

Consideriamo il rapporto<br />

! k "<br />

( k)<br />

e<br />

e 0 ( )<br />

#<br />

#<br />

(<strong>4.</strong>156)<br />

dove ! " è la norma per cui è verificata la proprietà (<strong>4.</strong>144). Esso esprime l’errore al<br />

passo k riferito all’errore al passo iniziale. Dalle (<strong>4.</strong>139) e (<strong>4.</strong>144) si ha che<br />

quin<strong>di</strong><br />

Scegliendo !


La quantità<br />

40<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

1<br />

M > !<br />

. (<strong>4.</strong>160)<br />

log10 #$ " ( B)<br />

%&<br />

R = ! log10 #$ " ( B)<br />

%& (<strong>4.</strong>161)<br />

costituisce una misura della velocità <strong>di</strong> convergenza e prende il nome <strong>di</strong> tasso asintotico<br />

<strong>di</strong> convergenza.<br />

<strong>4.</strong>9.3 Stima dell’errore<br />

Supponiamo <strong>di</strong> arrestare con un dato criterio <strong>di</strong> arresto l’iterazione al passo M . Per<br />

( )<br />

stimare l’errore e M<br />

Lasciamo al lettore verificare che<br />

( )<br />

possiamo utilizzare o il residuo r M<br />

e M ( )<br />

x<br />

! K ( A)<br />

( M )<br />

r<br />

b<br />

( )<br />

o l’incremento !x M<br />

. (<strong>4.</strong>162)<br />

Il controllo dell’errore attraverso il residuo può essere realizzato solo se la matrice A è<br />

ben con<strong>di</strong>zionata.<br />

( )<br />

Cerchiamo, ora, una relazione tra e M<br />

quin<strong>di</strong><br />

e !x<br />

e M M +1<br />

= e ( ) M +1<br />

! x ( ) ! x M<br />

Applicando la (<strong>4.</strong>139) abbiamo che<br />

quin<strong>di</strong><br />

( M +1)<br />

( )<br />

( ) = e<br />

e M ( ) M +1<br />

! e ( ) + "x<br />

M<br />

e ( ) ! B e M ( ) + "x<br />

e k ( ) 1<br />

!<br />

1" B<br />

. Per ogni k abbiamo l’identità<br />

M +1 ( ) M +1<br />

! "x<br />

( M +1)<br />

( k +1)<br />

#x<br />

( M +1)<br />

( ) , (<strong>4.</strong>163)<br />

. (<strong>4.</strong>164)<br />

, (<strong>4.</strong>165)<br />

.<br />

(<strong>4.</strong>166)


41<br />

se B < 1. Di conseguenza, se B


42<br />

d 2 f<br />

2 ! =0 > 0 .<br />

d!<br />

(<strong>4.</strong>171)<br />

Figura <strong>4.</strong>4 Grafici della forma quadratica f ( x)<br />

. (a) Forma quadratica definita<br />

positiva; il minimo è la soluzione dell’equazione Ax = b ; (b) forma quadratica definita<br />

negativa: il massimo è la soluzione dell’equazione Ax = b ; (c) forma quadratica<br />

semidefinita positiva <strong>di</strong> una matrice singolare: le soluzioni dell’equazione Ax = b sono<br />

tutti i punti della linea sul fondo della superficie; (d) forma quadratica non definita: la<br />

soluzione è un “punto a sella”.<br />

Essendo<br />

df 1<br />

=<br />

d! 2 "ûT A( u + !"û)<br />

+ 1<br />

u + !"û<br />

2 ( )T A"û # "û T b , (<strong>4.</strong>172)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

d 2 f 1<br />

= 2<br />

d! 2 "ûT A"û + 1<br />

2 "ûT A"û , (<strong>4.</strong>173)


dalle (<strong>4.</strong>170) e (<strong>4.</strong>171) segue che<br />

e<br />

43<br />

!u T ( Au " b)<br />

= 0 (<strong>4.</strong>174)<br />

!û T A!û > 0 . (<strong>4.</strong>175)<br />

Per ottenere la (<strong>4.</strong>174) abbiamo utilizzato la simmetria <strong>di</strong> A .<br />

La (<strong>4.</strong>175) è verificata per ogni !û perché A è simmetrica. La (<strong>4.</strong>174) è verificata<br />

per ogni !û se u = x . Se A fosse definita negativa basta moltiplicare ambo i membri<br />

dell’equazione (<strong>4.</strong>167) per !1. In conclusione, il minimo della forma quadratica (<strong>4.</strong>167)<br />

è la soluzione del sistema (<strong>4.</strong>1) se la matrice A è simmetrica e definita positiva.<br />

Posto<br />

e( x)<br />

! x " u (<strong>4.</strong>176)<br />

osserviamo che minimizzare f ( x)<br />

è equivalente a minimizzare la forma quadratica <strong>di</strong><br />

errore definita da<br />

dove, come al solito,<br />

E x ( ) ! eTAe = r T A "1 r > 0 (<strong>4.</strong>177)<br />

r( x)<br />

! b " Ax (<strong>4.</strong>178)<br />

è il residuo. Il minimo <strong>di</strong> E ( x)<br />

è in x = u . Si noti che E ( x)<br />

è definita positiva. Si<br />

osservi che<br />

!Ae = r . (<strong>4.</strong>179)<br />

In base a quanto abbiamo appena <strong>di</strong>mostrato possiamo, dunque, determinare la<br />

soluzione del sistema (<strong>4.</strong>1) cercando il minimo (assoluto) della forma quadratica (<strong>4.</strong>167).<br />

La ricerca <strong>di</strong> questo minimo può essere realizzata attraverso un metodo iterativo.<br />

Osservazione<br />

Se la matrice A è simmetrica e definita negativa la forma quadratica f ( x)<br />

ha un<br />

massimo (assoluto) in corrispondenza della soluzione dell’equazione (<strong>4.</strong>1), Figura <strong>4.</strong>4(b).<br />

In questo caso l’equazione (<strong>4.</strong>1) può essere risolta cercando il massimo della funzione<br />

f x<br />

( ) .<br />

Se la matrice A è simmetrica e semi definita positiva (negativa) essa ha almeno un<br />

autovalore uguale a zero e quin<strong>di</strong> è singolare. In questo caso l’equazione (<strong>4.</strong>1) ha infinite<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


44<br />

soluzioni e la forma quadratica f ( x)<br />

ha infiniti punti <strong>di</strong> minimo (massimo), Figura<br />

<strong>4.</strong>4(c).<br />

Se la matrice A è simmetrica ma non è definita positiva (negativa) la soluzione<br />

dell’equazione (<strong>4.</strong>1) non può essere determinata attraverso la ricerca del minimo<br />

(massimo) assoluto della forma quadratica f x<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

( ) : la soluzione dell’equazione (<strong>4.</strong>1) è<br />

( ) ma non è né un massimo, né un minimo.<br />

ancora un punto estremale della funzione f x<br />

In questo caso la soluzione è un “punto a sella”: muovendosi lungo certe <strong>di</strong> reazioni<br />

appare come un punto <strong>di</strong> minimo, invece muovendosi lungo altre <strong>di</strong>rezioni appare come<br />

se fosse un massimo, Figura <strong>4.</strong>4(d).<br />

<strong>4.</strong>10.2 I meto<strong>di</strong> <strong>di</strong> <strong>di</strong>scesa<br />

Si consideri la soluzione <strong>di</strong> tentativo x k ( ) al generico passo k . I meto<strong>di</strong> del gra<strong>di</strong>ente o<br />

<strong>di</strong> <strong>di</strong>scesa sono meto<strong>di</strong> iterativi nei quali al passo k si sceglie un vettore z k ( ) ! 0 e uno<br />

scalare ! k ( ) tali che<br />

dove<br />

( k +1)<br />

( ) < J x k<br />

J x<br />

k +1<br />

x ( ) = x k ( ) + ! kz k<br />

( ) ( ) (<strong>4.</strong>180)<br />

( ) . (<strong>4.</strong>181)<br />

Per ogni fissato z k ( ) il parametro ! k deve essere scelto in modo tale da minimizzare<br />

! ( k +1)<br />

f ( ! k ) = f ( x ) . La <strong>di</strong>reazione del vettore z k ( ) è la <strong>di</strong>rezione lungo cui ci si muove per<br />

avvicinarsi al minimo. Dunque ! k è scelto in modo tale che<br />

d ! f<br />

d! k<br />

d 2 f!<br />

2<br />

d! k<br />

= 0 , (<strong>4.</strong>182)<br />

> 0 . (<strong>4.</strong>183)<br />

La (<strong>4.</strong>183) è verificata in<strong>di</strong>pendentemente dal valore <strong>di</strong> ! k perché la matrice A è<br />

definita positiva. Essendo A simmetrica si ha che<br />

d ! f<br />

d! k<br />

( ) ( ) " z k<br />

= z k ( )T A x k ( ) + ! kz k<br />

Imponendo, ora, la (<strong>4.</strong>182) si ottiene<br />

( )T b = "z k<br />

( )T k +1<br />

r<br />

( ) . (<strong>4.</strong>184)


dove<br />

Allora per ogni scelta <strong>di</strong> z k ( ) si ha<br />

e<br />

! k =<br />

45<br />

k<br />

z ( )T r k<br />

z k<br />

( )<br />

( )T Az k ( )<br />

(<strong>4.</strong>185)<br />

r k ( ) ! r x k ( ) ( ). (<strong>4.</strong>186)<br />

k +1<br />

r ( ) = r k ( ) ! " kAz k ( ) , (<strong>4.</strong>187)<br />

k +1<br />

r ( )T z k ( ) = 0 . (<strong>4.</strong>188)<br />

k +1<br />

In seguito mostreremo che ! x f ( x)<br />

= "r( x),<br />

quin<strong>di</strong> r<br />

( k +1)<br />

k +1<br />

f ( x)<br />

= f ( x ) nel punto x ( ) . Di conseguenza il vettore z k<br />

superficie nel punto x<br />

k +1 ( ) , Figura <strong>4.</strong>6.<br />

Figura <strong>4.</strong>6 Curve <strong>di</strong> livello della forma quadratica e meto<strong>di</strong> della <strong>di</strong>scesa.<br />

( ) è normale alla superficie<br />

( ) è tangente a questa<br />

Possiamo determinare, ora, anche la legge che governa l’errore E . Dall’espressione<br />

del valore ottimale <strong>di</strong> ! k si ha, [<strong>4.</strong>1],<br />

dove<br />

( ) ( ) = E x k ( )<br />

k +1<br />

E x<br />

! k =<br />

( ) 1 ! " k<br />

z k ( )T r k ( ) ( ) 2<br />

z k ( )T Az k ( ) ( ) r k<br />

( ) (<strong>4.</strong>189)<br />

( )T A "1 r k<br />

. (<strong>4.</strong>190)<br />

( ) ( )<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


46<br />

Lasciamo al lettore la <strong>di</strong>mostrazione. Si noti che ! k > 0 perché la matrice A è definita<br />

positiva (salvo il caso z k ( ) = 0 che abbiamo escluso a priori e il caso r k ( ) = 0 nel quale si<br />

è raggiunta la soluzione del problema).<br />

In<strong>di</strong>chiamo con zsol un vettore <strong>di</strong>retto parallelamente alla retta che congiunge il punto<br />

x k ( ) al punto u (cioè alla soluzione), Figura <strong>4.</strong><strong>4.</strong> Se zsol fosse noto otterremmo in un<br />

solo passo la soluzione per qualunque scelta <strong>di</strong> x k ( ) ,<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

k +1<br />

x ( ) = x k ( ) + ! kz sol = u . (<strong>4.</strong>191)<br />

Ovviamente non conosciamo la soluzione e, quin<strong>di</strong>, non conosciamo z sol .<br />

Come scegliere allora z k ( ) ? Bisogna in<strong>di</strong>viduare tra tutte le possibili <strong>di</strong>rezioni quella<br />

che assicura la convergenza verso la soluzione con il minor numero <strong>di</strong> iterazioni.<br />

<strong>4.</strong>10.3 Il metodo del gra<strong>di</strong>ente<br />

Il metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida, detto comunemente anche metodo del<br />

gra<strong>di</strong>ente, consiste nell’assumere come <strong>di</strong>rezione <strong>di</strong> <strong>di</strong>scesa verso il minimo <strong>di</strong> f quella<br />

che assicura la massima variazione <strong>di</strong> f . Tale <strong>di</strong>rezione è data proprio dal gra<strong>di</strong>ente <strong>di</strong><br />

f x<br />

( ) (nello spazio ! n ). Si consideri la funzione scalare<br />

definita in ! n . Il gra<strong>di</strong>ente <strong>di</strong> g vale<br />

Per il gra<strong>di</strong>ente <strong>di</strong> f , allora, abbiamo<br />

! x f x<br />

g( x)<br />

= c T x = x T c (<strong>4.</strong>192)<br />

! xg( x)<br />

= ! x c T ( x)<br />

= c . (<strong>4.</strong>193)<br />

1<br />

2 xTAx " x T #<br />

&<br />

b<br />

$<br />

%<br />

'<br />

(<br />

= 1<br />

x<br />

2<br />

T ( A)<br />

T<br />

) + Ax+<br />

*<br />

, " b<br />

=Ax " b = "r( x).<br />

( ) = ! x<br />

(<strong>4.</strong>194)<br />

Nel metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida la <strong>di</strong>rezione <strong>di</strong> <strong>di</strong>scesa è, a meno del segno,<br />

proprio quella definita dal residuo dell’equazione, Figure <strong>4.</strong>7 e <strong>4.</strong>8. Poniamo, allora,<br />

nella (<strong>4.</strong>185)


47<br />

z k ( ) = r k ( ) . (<strong>4.</strong>195)<br />

Figura <strong>4.</strong>7 Gra<strong>di</strong>ente della forma quadratica. Per ogni punto il gra<strong>di</strong>ente punta nella <strong>di</strong>rezione<br />

della massima crescita ed è ortogonale alle linee <strong>di</strong> livello.<br />

Figura <strong>4.</strong>8 Metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


48<br />

Dunque, l’algoritmo del metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida è<br />

per k = 0,1,... , dove r 0 ( ) = b ! Ax 0 ( ) .<br />

! k =<br />

k<br />

r ( )T r k<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

r k<br />

( )<br />

( )T Ar k<br />

( )<br />

k +1<br />

x ( ) = x k ( ) + ! kr k<br />

k +1<br />

r ( ) = b " Ax<br />

( )<br />

( k +1)<br />

(<strong>4.</strong>196)<br />

Riportiamo nel Programma <strong>4.</strong>4 una implementazione dell’algoritmo (<strong>4.</strong>196)<br />

utilizzando il linguaggio <strong>di</strong> programmazione MATLAB ® .<br />

Programma <strong>4.</strong>4: Metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida<br />

function [x,iter]=gra<strong>di</strong>ente(A,b,x0,nmax,toll)<br />

% metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa ripida<br />

[n,n]=size(A);<br />

L=eye(n); U=L;<br />

iter=0; r=b-A*x0; r0=norm(r); err=norm(r);x=x0;<br />

while err>toll&iter


49<br />

1 3 3<br />

3 6 4<br />

1<br />

2 2 2 x = 3<br />

con il metodo del gra<strong>di</strong>ente. Il metodo del gra<strong>di</strong>ente non converge. Perché?<br />

Esercizio <strong>4.</strong>14<br />

Si risolva il sistema<br />

2 1<br />

1 3<br />

x = 1<br />

0<br />

2<br />

(<strong>4.</strong>198)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

♦<br />

(<strong>4.</strong>199)<br />

con il metodo <strong>di</strong> Jacobi, il metodo <strong>di</strong> Gauss-Seidel e il metodo del gra<strong>di</strong>ente. Verificare<br />

che il metodo del gra<strong>di</strong>ente è più veloce.<br />

♦<br />

dove<br />

Per l’errore E x k<br />

( ) ( ) abbiamo<br />

( ) ( ) = E x k ( )<br />

k +1<br />

E x<br />

! k =<br />

r k<br />

4<br />

( )<br />

2<br />

r k ( )T Ar k ( ) ( ) r k<br />

( ) 1 ! " k<br />

( ) (<strong>4.</strong>200)<br />

( )T A "1 r k<br />

. (<strong>4.</strong>201)<br />

( ) ( )<br />

Utilizzando il fatto che A è simmetrica e definita positiva dalla (<strong>4.</strong>201) si ottiene che<br />

[<strong>4.</strong>1]<br />

2<br />

( k +1)<br />

# K ( A)<br />

" 1&<br />

E ( x ) ! % ( E x<br />

$ K ( A)<br />

+ 1'<br />

k ( ) ( ). (<strong>4.</strong>202)<br />

Dalla (<strong>4.</strong>202) si ottiene che il metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa ripida converge alla<br />

soluzione comunque sia il punto iniziale x 0 ( ) . La velocità <strong>di</strong> convergenza è lenta se la<br />

matrice A è mal con<strong>di</strong>zionata. Per ovviare questo problema si può considerare al posto<br />

del problema (<strong>4.</strong>1) il problema<br />

P !1 Ax = P !1 b , (<strong>4.</strong>203)<br />

dove P è una matrice opportuna. La con<strong>di</strong>zione (<strong>4.</strong>202) <strong>di</strong>venta allora,


E x<br />

50<br />

( ) " 1<br />

K P "1 2<br />

#<br />

&<br />

( E x<br />

$ % ( A)<br />

+ 1<br />

'(<br />

k<br />

( k +1)<br />

( ) ! K P"1A %<br />

Allora, la matrice P deve essere scelta in modo tale che K P !1 A<br />

P viene detta matrice <strong>di</strong> precon<strong>di</strong>zionamento.<br />

Programma <strong>4.</strong>5: Metodo del gra<strong>di</strong>ente precon<strong>di</strong>zionato<br />

function [x,iter]=gra<strong>di</strong>ente_prec(A,b,x0,nmax,toll,P)<br />

% metodo del gra<strong>di</strong>ente precon<strong>di</strong>zionato<br />

[n,n]=size(A); if nargin==5<br />

L=eye(n); U=L; P=U;<br />

else<br />

[L,U]=lu[P];<br />

end<br />

iter=0; r=b-A*x0; r0=norm(r); err=norm(r);x=x0;<br />

while err>toll&iter


<strong>4.</strong>11 Il metodo del gra<strong>di</strong>ente coniugato<br />

51<br />

Nel metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida la <strong>di</strong>rezione z k ( ) è scelta secondo la<br />

(<strong>4.</strong>195). Ciò ha come svantaggio il fatto che alcune <strong>di</strong>rezioni possono ripetersi<br />

nell’iterazione come si evince dalla Figura <strong>4.</strong>8. Nel metodo del gra<strong>di</strong>ente coniugato,<br />

invece, le <strong>di</strong>rezioni <strong>di</strong> <strong>di</strong>scesa sono tra loro ortogonali rispetto al prodotto scalare<br />

yTAx 5 . Questa scelta delle <strong>di</strong>rezioni <strong>di</strong> <strong>di</strong>scesa permette <strong>di</strong> ottenere la convergenza alla<br />

soluzione in un numero <strong>di</strong> iterazioni non superiore alla <strong>di</strong>mensione n della matrice A .<br />

Nella presentazione <strong>di</strong> questo metodo seguiremo, almeno in parte, l’approccio illustrato<br />

in [<strong>4.</strong>5].<br />

<strong>4.</strong>11.1 Coniugazione<br />

Consideriamo un insieme <strong>di</strong> n <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) tra loro ortogonali<br />

rispetto al prodotto scalare y T Ax , ovvero A-ortogonali (A-coniugati):<br />

In seguito vedremo come tale insieme si può costruire.<br />

z i ( ) Az j ( ) = 0 per i = j . (<strong>4.</strong>205)<br />

Figura <strong>4.</strong>9 Queste coppie <strong>di</strong> vettori sono A-ortogonali ………. perchè queste coppie sono ortogonali.<br />

5 Essendo A simmetrica e definita positiva, la forma y T Ax definisce un prodotto scalare in ! n . Nello<br />

spazio lineare ! n è definito un prodotto scalare se ad ogni x, y !" n è associato un numero reale,<br />

denotato usualmente con ( x, y)<br />

, tale che: 1. ( x, x)<br />

> 0 se x ! 0 e ( x, x)<br />

= 0 se x = 0 ; 2. ( x, y)<br />

= ( y, x)<br />

;<br />

3. ( !x, y)<br />

= ! ( x, y)<br />

; <strong>4.</strong> ( x + y, z)<br />

= ( x, z)<br />

+ ( y, z)<br />

.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


52<br />

Cosa significa che due vettori sono A-ortogonali? Si immagini che questa pagina sia<br />

stampata su un pezzo <strong>di</strong> gomma, <strong>di</strong> afferrare la Figura <strong>4.</strong>9(a) ai lembi e <strong>di</strong> stirarla fino a<br />

quando le ellissi non appaiono come circonferenze. Le coppie <strong>di</strong> vettori che sull’ellisse<br />

sono A-coniugati, appariranno sulle circonferenze ortogonali, Figura <strong>4.</strong>9(b). A causa<br />

della proprietà (<strong>4.</strong>205) l’insieme dei vettori z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) costituisce una base per<br />

lo spazio vettoriale R n .<br />

k +1<br />

Determinare x ( ) lungo z k ( ) ( k +1)<br />

in modo tale che f x<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

( ) sia minimo equivale ad<br />

k +1<br />

imporre che il residuo r ( ) sia ortogonale a z k ( ) e, quin<strong>di</strong>, che l’errore al passo k + 1,<br />

k +1<br />

e ( ) , sia A -ortogonale rispetto a z k ( ) . Si osservi che non possiamo imporre che l’errore<br />

sia ortogonale rispetto a z k ( ) perchè non lo conosciamo.<br />

Consideriamo ora la <strong>di</strong>namica dell’errore. E’ imme<strong>di</strong>ato verificare che<br />

k "1<br />

e k ( ) = e 0 ( ) + ! jz j ( )<br />

# (<strong>4.</strong>206)<br />

dove i coefficienti ! k sono dati dalla (<strong>4.</strong>185). Possiamo sempre rappresentare e 0 ( )<br />

attraverso una combinazione lineare dei vettori z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) . Abbiamo:<br />

e 0<br />

j =0<br />

( ) = ! jz j<br />

n"1<br />

( )<br />

# . (<strong>4.</strong>207)<br />

j =0<br />

Premoltiplicando ambo i membri della (<strong>4.</strong>207) per z i ( )T A si ottiene utilizzando la (<strong>4.</strong>205)<br />

n"1<br />

#<br />

z i ( )T Ae 0 ( ) = ! jz i ( )T Az j<br />

Utilizzando <strong>di</strong> nuovo la (<strong>4.</strong>205) e poi la (<strong>4.</strong>206) si ha<br />

! i =<br />

z i<br />

z i<br />

( )T Ae 0<br />

( )T Az i<br />

( )<br />

( ) =<br />

z i<br />

j =0<br />

( )<br />

( )T A e 0 ( ) + " hz h<br />

i#1<br />

%<br />

( ) (<br />

' $ *<br />

& h=1 )<br />

( )T Az i ( ) =<br />

z i<br />

Utilizzando infine la (<strong>4.</strong>185) si ottiene<br />

n"1<br />

= ! iz i ( )T Az i ( ) . (<strong>4.</strong>208)<br />

( )T Ae i ( )<br />

( )T Az i<br />

i<br />

z<br />

( ) = # ( )T r i ( )<br />

( )T Az i ( ) . (<strong>4.</strong>209)<br />

z i<br />

z i<br />

e k ( ) = ! jz j ( )<br />

# " ! jz j ( )<br />

# . (<strong>4.</strong>210)<br />

j =0<br />

Man mano che si procede nell’iterazione il secondo termine cancella i contributi del<br />

primo termine all’errore lungo le <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) . Per n = k tutti i termini<br />

k "1<br />

j =0<br />

z i


53<br />

sono stati cancellati e e n ( ) = 0 . Dunque, impiegando n <strong>di</strong>rezioni A-coniugate in almeno<br />

n iterazioni si raggiunge la soluzione. Un risultato semplice, elegante e <strong>di</strong> notevole<br />

interesse.<br />

Dall’equazione (<strong>4.</strong>210) si ha che<br />

n"1<br />

e k ( ) = ! jz j ( )<br />

# . (<strong>4.</strong>211)<br />

Consideriamo ora il prodotto tra il vettore z i ( )T e il vettore e k ( ) . Abbiamo:<br />

Dalla (<strong>4.</strong>212) si ha imme<strong>di</strong>atamente che<br />

j = k<br />

n!1<br />

z i ( )T r k ( ) = !z i ( )T Ae k ( ) = " jz i ( )T Az j ( )<br />

# . (<strong>4.</strong>212)<br />

j = k<br />

z i ( )T r k ( ) = 0 per 0 ! i < k , (<strong>4.</strong>213)<br />

quin<strong>di</strong> il residuo al passo k è ortogonale a tutte le <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z<br />

k !1 ( ) . Ciò<br />

implica anche che l’errore al passo k è A-ortogonale a tutte le <strong>di</strong>rezioni<br />

z 0 ( ) ,z 1 ( ) ,z 2 ( ) k !1<br />

,...,z ( ) . Allora è evidente che, dovendo essere l’errore e n ( ) ortogonale a<br />

tutte le <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) che costituiscono una base per lo spazio R n , deve<br />

essere necessariamente e n ( ) = 0 .i > 0<br />

<strong>4.</strong>11.2 Coniugazione <strong>di</strong> Gram-Schmidt<br />

Un insieme <strong>di</strong> <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z n!1 ( ) A-ortogonali può essere ottenuto a partire<br />

da un insieme <strong>di</strong> n vettori y 0 ( ) , y 1 ( ) , y 2 ( ) ,..., y n!1 ( ) linearmente in<strong>di</strong>pendenti. Per costruire<br />

z i ( ) si parte da y i ( ) e si elimina quella componente che non è A-ortogonale a<br />

z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z i!1 ( ) . In altre parole, si assume z 0 ( ) = y 0 ( ) , si pone<br />

i"1<br />

z i ( ) = y i ( ) + ! ijz j ( )<br />

# (<strong>4.</strong>214)<br />

e i coefficienti ! ik sono scelti imponendo che z i ( ) sia A-ortogonale a i vettori<br />

z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z i!1 ( ) (i coefficienti ! ik sono definiti solo per i > k ). Imponendo questa<br />

con<strong>di</strong>zione e utilizzando la (<strong>4.</strong>205), si ottiene<br />

! ij = "<br />

i<br />

y ( )T Az j<br />

z j ( )T Az j<br />

( )<br />

j =0<br />

( ) per 0 ! k < i e 1 ! i ! n " 1. (<strong>4.</strong>215)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009


Moltiplicando il trasposto <strong>di</strong> ambo i membri della (<strong>4.</strong>214) per r j ( ) si ottiene:<br />

54<br />

z i ( )T r j ( ) = y i ( )T r j ( ) + ! ikz k ( )T r j ( )<br />

# . (<strong>4.</strong>216)<br />

Siccome per i < j si ha z i ( )T r j ( ) = 0 dalla (<strong>4.</strong>216) segue imme<strong>di</strong>atamente che<br />

Dall’equazione (<strong>4.</strong>216) si ha anche<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

i"1<br />

k =0<br />

y i ( )T r j ( ) = 0 per i < j . (<strong>4.</strong>217)<br />

z i ( )T r i ( ) = y i ( )T r i ( ) (<strong>4.</strong>218).<br />

Le maggiori <strong>di</strong>fficoltà nell’uso della coniugazione <strong>di</strong> Gram-Schmidt sono: la quantità <strong>di</strong><br />

memoria necessaria per conservare tutte le <strong>di</strong>rezioni percedenti necessarie per il calcolo<br />

della <strong>di</strong>rezione z i ( ) ; il numero <strong>di</strong> operazioni necessarie per determinare l’insieme delle<br />

<strong>di</strong>rezioni A-ortogonali scala come O n3<br />

( ) . Infatti se si scelgono come vettori<br />

y 0 ( ) , y 1 ( ) , y 2 ( ) ,..., y n!1 ( ) i versori fondamentali <strong>di</strong> un sistema <strong>di</strong> coor<strong>di</strong>nate rettangolare si<br />

ottiene una procedura equivalente al metodo <strong>di</strong> eliminazione <strong>di</strong> Gauss. Lasciamo al<br />

lettore la verifica <strong>di</strong> questa proprietà.<br />

<strong>4.</strong>11.3 Metodo del gra<strong>di</strong>ente coniugato<br />

Il modo più naturale <strong>di</strong> scegliere l’insieme dei vettori y 0 ( ) , y 1 ( ) , y 2 ( ) ,..., y n!1 ( ) è<br />

Le ragioni sono essenzialmente le seguenti.<br />

1. Dalla relazione (<strong>4.</strong>217) si ha imme<strong>di</strong>atamente che<br />

y k ( ) = r k ( ) per 0 ! k ! n " 1 . (<strong>4.</strong>219)<br />

r i ( )T r j ( ) = 0 per i < j . (<strong>4.</strong>220)<br />

Allora l’insieme dei residui r 0 ( ) ,r 1 ( ) ,r 2 ( ) ,...,r n!1 ( ) è un insieme <strong>di</strong> vettori tra <strong>di</strong> loro<br />

ortogonali. Dunque ciascun residuo è ortogonale sia ai residui che alle <strong>di</strong>rezioni<br />

precedenti. Inoltre dalla relazione (<strong>4.</strong>218) si ha anche<br />

z i ( )T r i ( ) = r i<br />

2<br />

( )<br />

per ogni i . (<strong>4.</strong>221)


2. Dall’equazione (<strong>4.</strong>187) si ha che:<br />

i<br />

r ( )T r<br />

j +1 ( ) = r i<br />

55<br />

( )T r j<br />

( ) ! " kr i<br />

( )T Az j<br />

Utilizzando la proprietà <strong>di</strong> ortogonalità dei residui si ottiene dalla (<strong>4.</strong>222)<br />

( ) (<strong>4.</strong>222)<br />

r i ( )T Az j ( ) = 0 per i < j . (<strong>4.</strong>223)<br />

Dunque z j ( ) è A-ortogonale con i residui precedenti. Da questa proprietà segue<br />

imme<strong>di</strong>atamente che:<br />

Inoltre abbiamo:<br />

! ij = "<br />

i<br />

r ( )T Az j<br />

z j ( )T Az j<br />

! ii = "<br />

In conseguenza <strong>di</strong> ciò la (<strong>4.</strong>214) <strong>di</strong>venta<br />

z k ( ) = r k ( ) + ! kz ( )<br />

( ) = 0 per i < j . (<strong>4.</strong>224)<br />

i<br />

r ( )T Az i<br />

z i ( )T Az i<br />

( )<br />

( ) # ! i . (<strong>4.</strong>225)<br />

k "1 ( ) per k = 1,2,... (<strong>4.</strong>226)<br />

dove z 0 ( ) = r 0 ( ) , r 0 ( ) = b ! Ax 0 ( ) e x 0 ( ) è arbitrario. L’espressione <strong>di</strong> ! k data dalla<br />

(<strong>4.</strong>225) è tale che<br />

( k +1)<br />

E ( x ) = E x k<br />

z<br />

( ) ( ) 1!<br />

k ( )T r k ( ) ( ) 2<br />

z k ( )T Az k ( ) ( ) r k ( )T A !1 r k<br />

"<br />

%<br />

$<br />

'<br />

$<br />

( ) ( ) '<br />

#<br />

&<br />

(<strong>4.</strong>227)<br />

sia minimo per fissato E x k ( ) ( ) al variare <strong>di</strong> z k<br />

ortogonali r k ( ) k !1<br />

e z<br />

( k +1)<br />

E ( x ) equivale a determinare il minimo <strong>di</strong> z k ( )T Az k<br />

( ) nell’iperpiano definito dale <strong>di</strong>rezioni<br />

( ) . In conseguenza della (<strong>4.</strong>221) la determinazione del minimo <strong>di</strong><br />

T<br />

( ) . Essendo<br />

z k ( )T Az k ( ) = r k ( ) k "1<br />

#<br />

( )<br />

$ + ! kz %<br />

& A r k ( ) k "1<br />

#<br />

( )<br />

$ + ! kz %<br />

&<br />

2 ( k "1)T<br />

( k "1)<br />

( k)T<br />

( k "1)<br />

( k)T<br />

k<br />

= ! k z Az + 2!r Az + r Ar<br />

il minimo <strong>di</strong> z k ( )T Az k ( ) si ottiene per il valore <strong>di</strong> ! k dato dalla (<strong>4.</strong>225).<br />

Infine si verifica imme<strong>di</strong>atamente che (se r i ( ) ! 0 per i = 0,1,2,..., k ! 1)<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

( ) ,<br />

(<strong>4.</strong>228)


! k =<br />

2<br />

( k)<br />

r<br />

2<br />

2<br />

k "1<br />

56<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009<br />

r<br />

( )<br />

2<br />

per k = 1,2,... . (<strong>4.</strong>229)<br />

Di seguito è riassunto l’algoritmo del gra<strong>di</strong>ente coniugato: per k = 0,1,2,...<br />

w k ( ) = Az k<br />

! k =<br />

( )<br />

( k)<br />

r<br />

2<br />

2<br />

w k ( )T z k<br />

k +1<br />

x ( ) = x k<br />

( )<br />

( ) + ! k ˆz k<br />

( )<br />

k +1<br />

r ( ) = r k ( ) " ! kw k<br />

# k +1 =<br />

( k +1)<br />

r<br />

r k ( )<br />

2<br />

2<br />

2<br />

2<br />

( )<br />

k +1<br />

z ( ) k +1<br />

= r ( ) + # k +1z k<br />

( )<br />

(<strong>4.</strong>230)<br />

dove z 0 ( ) = r 0 ( ) , r 0 ( ) = b ! Ax 0 ( ) e x 0 ( ) è il valore iniziale <strong>di</strong> tentativo. Come abbiamo<br />

<strong>di</strong>mostrato, il metodo del gra<strong>di</strong>ente coniugato converge alla soluzione in al più n passi.<br />

Se n è troppo grande un criterio <strong>di</strong> arresto può essere r k<br />

2 ! " b dove ! è una<br />

2<br />

tolleranza assegnata.<br />

Il numero <strong>di</strong> operazioni per calcolare Az k ( ) , in particolare delle moltiplicazioni, è<br />

dell’or<strong>di</strong>ne <strong>di</strong> n 2 . Se il numero <strong>di</strong> iterazioni è n , si hanno n 3 moltiplicazioni, un numero<br />

superiore a quello richiesto nella fattorizzazione <strong>di</strong> Cholesky n 3 ( / 3)<br />

. Di conseguenza il<br />

metodo del gra<strong>di</strong>ente coniugato è efficiente solo se la matrice A è sparsa o il numero <strong>di</strong><br />

iterazioni necessarie per ottenere una soluzione adeguata è molto più piccolo <strong>di</strong> n . Con<br />

un opportuno precon<strong>di</strong>zionamento è possibile ridurre il numero <strong>di</strong> iterazioni, [<strong>4.</strong>2].<br />

Per l’errore E x k<br />

Esercizio <strong>4.</strong>16<br />

( ) ( ) si ha<br />

E x k<br />

#<br />

( ) ( ) ! 2 %<br />

$ %<br />

K ( A)<br />

" 1&<br />

( E x<br />

K ( A)<br />

+ 1'(<br />

0<br />

k<br />

( )<br />

( ) ( ) . (<strong>4.</strong>231)<br />

Implementare in MATLAB l’algoritmo del gra<strong>di</strong>ente coniugato. Risolvere il<br />

problema dell’Esercizio <strong>4.</strong>15 con il metodo del gra<strong>di</strong>ente coniugato e confrontare<br />

l’errore e la velocità <strong>di</strong> convergenza ottenuto con questo metodo con quelli ottenuti con<br />

il metodo del gra<strong>di</strong>ente con <strong>di</strong>scesa rapida.<br />


i<br />

Z ( ) e<br />

( i)<br />

R<br />

57<br />

3. In<strong>di</strong>chiamo con i sottospazi generati rispettivamente dall’insieme dei<br />

vettori z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z i!1 ( ) e r 0 ( ) ,r 1 ( ) ,r 2 ( ) ,...,r n!1 ( )<br />

i<br />

Z ( ) = span z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z i!1 ( )<br />

{ } , R i ( ) = span r 0<br />

( ) ,r 1 ( ) ,r 2 ( ) ,...,r i!1 ( )<br />

{ } . (<strong>4.</strong>232)<br />

Siccome le <strong>di</strong>rezioni z 0 ( ) ,z 1 ( ) ,z 2 ( ) ,...,z i!1 ( ) sono costruite attarverso le (<strong>4.</strong>226), il<br />

sottospazio Z i ( ) è uguale al sottospazio R i ( ) . Inoltre dalla relazione (<strong>4.</strong>187) segue che<br />

0<br />

span r<br />

( ) ,r 1 ( ) ,...,r k ( )<br />

( ) = span r 0 ( ) , Ar 0 ( ) ,..., A k r 0 ( )<br />

Essendo Z i ( ) = R i ( ) dalla (<strong>4.</strong>233) segue anche che<br />

Il sottospazio span r 0<br />

0<br />

span z<br />

( ) ,z 1 ( ) ,...,z k ( )<br />

( ) = span r 0 ( ) , Ar 0 ( ) ,..., A k r 0 ( )<br />

( ) . (<strong>4.</strong>233)<br />

( ) . (<strong>4.</strong>234)<br />

( ) , Ar 0 ( ) ,...,A k r 0 ( )<br />

( ) è un esempio <strong>di</strong> sottospazio <strong>di</strong> Krylov 6 .<br />

Riassumendo nel metodo del gra<strong>di</strong>ente coniugato, scegliendo z 0 ( ) = r 0<br />

verificate le seguenti proprietà per k ! 1 e nell’ipotesi che r i ( ) ! 0 per 0 ! i ! k :<br />

Referenze<br />

( ) , sono<br />

r k ( )T z i ( ) = 0 , per i ! k " 1 (<strong>4.</strong>235)<br />

( ) ( ) T<br />

k<br />

z ( )T Az i ( ) = Az k<br />

0<br />

span r<br />

z i ( ) = 0 , per i ! k " 1 (<strong>4.</strong>236)<br />

r k ( )T r i ( ) = 0 , i ! k " 1 (<strong>4.</strong>237)<br />

( ) ,r 1 ( ) ,...,r k<br />

( ( ) ) = span r 0 ( ) , Ar 0 ( ) ,..., A k r 0 ( )<br />

( ) (<strong>4.</strong>238)<br />

( ) ,z 1 ( ) ,...,z k<br />

( ( ) ) = span r 0 ( ) , Ar 0 ( ) ,..., A k r 0 ( )<br />

( ) (<strong>4.</strong>239)<br />

0<br />

span z<br />

[<strong>4.</strong>1] V. Comincioli, Analisi numerica: meto<strong>di</strong> ed applicazioni, McGraw-Hill, Milano<br />

1990.<br />

[<strong>4.</strong>2] G. H. Golub, C.F. van Loan, Matrix Computations, The Johns Hopkins University<br />

Press, Baltimore 1983.<br />

[<strong>4.</strong>3] A. Quarteroni, F. Saleri, Introduzione al Calcolo Scientifico, Springer, Milano<br />

2002.<br />

[<strong>4.</strong>4] J.M. Ortega, W. C. Rheinboldt, Iterative solution of nonlinear equations in several<br />

variables, Academic Press, New York, 1969.<br />

[<strong>4.</strong>5] J. R. Shewchuk, An Introduction to the Conjugate Gra<strong>di</strong>ent Method Without the<br />

Agonizing Pain, School of Computer Science, Carnegie Mellon University, 199<strong>4.</strong><br />

6 Un sottospazio <strong>di</strong> Krylov è ottenuto applicando ripetutamente una matrice a un vettore.<br />

G. Miano, Appunti del Corso <strong>di</strong> Modelli Numerici per i Campi, 2009

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!