Metodi Diretti per la risoluzione di sistemi lineari

Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Corso di Calcolo Numerico
Dott.ssa M.C. De Bonis
Università degli Studi della Basilicata, Potenza
Facoltà di Ingegneria
Corso di Laurea in Ingegneria Meccanica
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Risoluzione di Sistemi Lineari
Vogliamo trovare un’approssimazione delle soluzioni di
sistemi di n equazioni lineari in n incognite:


a1,1 x1
+a1,2 x2
+ · · · +a1,n xn
= b1





a x
+a2,2 x2
+ · · · +a2,n xn
= b2


 2,1 1
..
..
..
..
..
(1)
.
.
.
.
.





an−1,1 x1 +an−1,2 x2 + · · · +an−1,n xn = bn−1




an,1 x1
+an,2 x2
+ · · · +an,n xn
= bn
Ponendo

a1,1

 a2,1


..
A=
.


 a
 n−1,1
an,1
a1,2
···
a1,n−1
a1,n
a2,2
..
.
···
..
.
an,n−1
..
.
a2,n
..
.
an−1,2
···
an−1,n−1
an−1,n
an,2
···
an,n−1
an,n


b1


 b2



 .

 b =  ..





 b

 n−1
bn
e x = [x1 x2 · · · xn−1 xn ]T , il sistema (1) diventa:
Ax = b,
A ∈ Rn×n ,
b, x ∈ Rn
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis










Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
È noto che il sistema (1) ammette un’unica soluzione se e
solo se la matrice A è non singolare, cioè
det(A) 6= 0.
In questo caso possiamo scrivere
x = A−1 b.
Il metodo di risoluzione che certamente conoscete è la
Regola di Cramer:
xi =
det(Ai )
,
det(A)
i = 1, . . . , n,
dove Ai denota la matrice ottenuta da A sostituendo la
colonna i−esima con il vettore b.
I determinanti coinvolti potrebbero essere calcolati
utilizzando la Regola di Laplace scritta nella forma
det(A) =
n
X
(−1)j+1 a1,j det(A1,j ),
j=1
dove A1,j rappresenta la matrice di ordine n − 1 ottenuta
da A eliminando la prima e la j−esima colonna.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
La Regola di Cramer non è ammissibile come metodo
numerico in quanto il suo costo computazionale è
dell’ordine di [(n + 1)(n − 1)n]!
Supponendo di poter effettuare ogni operazione
moltiplicativa in 7 · 10−8 secondi, per risolvere un sistema
20 × 20 occorrono circa 2 · 106 anni!!
Si potrebbe pensare di calcolare A−1 e risolvere il sistema
utilizzando la formula
x = A−1 b.
Tra tutti i metodi che si conoscono per il calcolo della
matrice inversa, quello meno “costoso” ha un costo
computazionale dell’ordine di n3 . Inoltre è necessario
eseguire il prodotto A−1 b che ha un costo computazionale
di n2 .
In seguito vedremo dei metodi numerici per la risoluzione
di un sistema lineare che sono molto più efficienti dal punto
di vista computazionale.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
I metodi numerici per la risoluzione di un sistema lineare si
suddividono in due classi:
• Metodi diretti: in assenza di errori di
arrotondamento la soluzione viene calcolata
esattamente in un numero finito di passi;
• Metodi iterativi: attraverso un processo iterativo
viene generata una successione infinita di vettori
convergente, sotto opportune condizioni, alla soluzione
cercata. Anche in assenza di errori di arrotondamento
non si ottiene mai la soluzione esatta perchè ad un
certo punto è necessario arrestare il processo.
I criteri di scelta di un algoritmo sono:
• stabilità
• occupazione di memoria
• costo computazionale
Non esiste un algoritmo “migliore” degli altri in assoluto.
La scelta viene fatta in funzione delle caratteristiche della
matrice A del sistema (“sparsità”, dimensione, struttura).
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Definizione Una matrice A ∈ Rn×n si dice densa se la
maggior parte dei suoi elementi è non nullo.
Definizione Una matrice A ∈ Rn×n si dice sparsa se il
numero dei suoi elementi non nulli è dell’ordine di n.
Osservazione Per memorizzare in un calcolatore una
matrice sparsa (soprattutto se n è molto grande) è possibile
utilizzare solo tre vettori di lunghezza n: uno per
memorizzare gli elementi non nulli, uno per memorizzare i
corrispondenti indici di riga ed uno per memorizzare i
corrispondenti indici di colonna.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
I metodi diretti risolvono il problema iniziale
trasformandolo in problemi equivalenti aventi la stessa
soluzione ma matrici dei coefficienti differenti.
In generale, se la matrice A del sistema è densa i metodi
diretti sono più efficienti.
Se, invece, la matrice A del sistema è sparsa, i metodi
diretti non preservano la sparsità delle matrici coinvolte nel
procedimento, anzi con il procedere del metodo il numero
degli elementi non nulli presenti in queste matrici
generalmente cresce e (se n è molto grande) può ben presto
saturare la memoria centrale del calcolatore.
In questi casi è utile e, spesso indispensabile, utilizzare i
metodi iterativi perchè, invece, quest’ultimi lasciano
inalterata la matrice A del sistema.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Condizionamento del problema
Supponiamo di introdurre una perturbazione ∆A ∈ Rn×n
sulla matrice A e una perturbazione ∆b ∈ Rn sul vettore
dei termini noti b.
La soluzione che calcoleremo, supponendo che i numeri
siano rappresentabili con infinite cifre e che tutte le
operazioni aritmetiche siano fatte esattamente, non sarà x
ma y = x + ∆x, ∆x ∈ Rn , cioè la soluzione sarà a sua volta
perturbata. Risolveremo allora il sistema
(A + ∆A)y = (b + ∆b).
Anche se la matrice A è non singolare, A + ∆A potrebbe
risultare singolare.
Tuttavia, supponendo che A + ∆A è non singolare e che
kA−1 kk∆Ak < 12 otteniamo la seguente maggiorazione per
l’errore relativo indotto sulla soluzione x:
kδxk ≤ 2 cond(A) (kδAk + kδbk) ,
dove cond(A) = kAkkA−1 k e k · k denota una fissata norma
matriciale indotta.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
La quantità cond(A) viene chiamata indice o numero di
condizionamento della matrice A.
cond(A) rappresenta il coefficiente di amplificazione delle
perturbazioni indotte sulla matrice A e sul termine noto b.
Se cond(A) è “piccolo” il problema è ben condizionato,
altrimenti è mal condizionato.
Osservazione Per qualunque norma matriciale indotta
k · k si ha
cond(A) = kAkkA−1 k ≥ kAA−1 k = kIk = 1.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Il seguente teorema precisa meglio il significato di cond(A)
Teorema Per ogni matrice non singolare A ∈ Rn×n e per
ogni norma matriciale indotta, la quantità (cond(A))−1
rappresenta la distanza relativa minima di A dall’insieme di
tutte le matrici singolari di ordine n, cioè
½
¾
1
kA − Bk
= min
: B ∈ Rn×n singolare
cond(A)
kAk
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Esempi di matrici mal condizionate sono:
Matrici di Hilbert

1
 1

 2
 1
Hn = 
 3
 .
 ..

1
n
1
2
1
3
1
4
1
3
1
4
1
5
···
..
.
···
..
.
1
n+1
1
n+2
···
..
.
···
1
n
1
n+1
1
n+2
..
.










1
2n−1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Matrici di Vandermonde





Vn = 




1
1
1
···
1
x1
x2
x3
···
xn
x21
..
.
x22
..
.
x23
..
.
···
..
.
x2n
..
.
xn−1
1
xn−1
2
x3n−1
···
xnn−1
xi 6= xj
per










i 6= j
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Richiami sulle Norme di Vettori e Matrici
Una norma vettoriale è una funzione che associa ad un
vettore x ∈ Rn un numero reale kxk con le seguenti
proprietà:
1. kxk > 0,
∀x 6= 0 e kxk = 0 ⇔ x = 0;
2. kcxk = |c|kxk,
∀c ∈ R;
3. kx + yk ≤ kxk + kyk,
∀y ∈ Rn .
Le norme vettoriali più frequentemente utilizzate sono:
• norma infinito:
kxk∞ = max |xi |
1≤i≤n
• norma 1:
kxk1 =
n
X
|xi |
i=1
• norma euclidea:
Ã
kxk2 =
n
X
! 12
|xi |
2
=
√
xT x
i=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Analogamente, una norma matriciale è una funzione che
associa ad una matrice A ∈ Rn×n il numero reale kAk tale
che
1. kAk > 0,
∀A 6= 0 e kAk = 0 ⇔ A = 0;
2. kcAk = |c|kAk,
∀c ∈ R;
3. kA + Bk ≤ kAk + kBk,
4. kABk ≤ kAkkBk,
∀B ∈ Rn×n ;
∀B ∈ Rn×n .
Le norme matriciali più note sono:
• norma infinito: kAk∞ = max
1≤i≤n
• norma 1: kAk1 = max
1≤j≤n
n
X
n
X
|ai,j |
j=1
|ai,j |
i=1
q
• norma spettrale: kAk2 = ρ(AT A),
dove ρ(A) è il raggio spettrale della matrice A, cioè il
modulo massimo degli autovalori di A;

 12
n X
n
X
• norma di Frobenius: kAkF = 
|ai,j |2  .
i=1 j=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Data una norma vettoriale e una norma matriciale, si dice
che le due norme sono compatibili se
kAxk ≤ kAkkxk,
∀A ∈ Rn×n , x ∈ Rn .
Una norma vettoriale può risultare compatibile con più
norme matriciali.
Ad ogni norma vettoriale possiamo associare una norma
matriciale nel seguente modo:
kAk = sup
x6=0
kAxk
= max kAxk.
kxk
kxk=1
Una norma cosı̀ definita viene chiamata naturale o
indotta da quella del vettore.
Per le norme matriciali naturali abbiamo inoltre
kIk = max kIxk = 1.
kxk=1
Le norme matriciali k · k∞ , k · k1 e k · k2 sono naturali. La
norma k · kF non è naturale in quanto
1
2
kIkF = n .
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Si ha
kxk∞
induce kAk∞
kxk1
induce kAk1
kxk2
induce kAk2
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Metodi Diretti
Sistemi Triangolari
Siano
x = (x1 x2 · · · xn )T
Denotiamo con

l1,1

 l2,1


..
L=
.


 l
 n−1,1
ln,1
b = (b1 b2 · · · bn )T
e
0
0
···
0
l2,2
..
.
0
..
···
..
.
0
..
.
ln−1,2
···
ln−1,n−1
0
ln,2
···
ln,n−1
ln,n
.










matrice triangolare inferiore (Low)
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
e con






U =





u1,1
u1,2
···
u1,n−1
u1,n
0
0
..
.
u2,2
..
.
..
.
···
..
.
u2,n−1
..
.
u2,n
..
.
0
un−1,n−1
un−1,n
0
···
0
0
un,n










matrice triangolare superiore (Up)
Vogliamo risolvere i sistemi
Lx = b
e
Ux = b
Osservazione
det(L) = l1,1 l2,2 · · · ln,n 6= 0
det(U ) = u1,1 u2,2 · · · un,n 6= 0
⇔
⇔
li,i 6= 0 ∀i = 1, . . . , n
ui,i 6= 0 ∀i = 1, . . . , n
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Algoritmo di sostituzione in avanti (forward
substitution)
Lx = b


l1,1 x1
= b1





l2,1 x1 + l2,2 x2
= b2



l3,1 x1 + l3,2 x2 + l3,3 x3
= b3


..
..



.
.




ln,1 x1 + ln,2 x2 + ln,3 x3 + · · · + ln,n xn = bn
b1
l1,1
b2 − l2,1 x1
x2 =
l2,2
b3 − l3,1 x1 − l3,2 x2
x3 =
l3,3
..
.
x1 =
bi −
xi =
i−1
X
k=1
li,i
li,k xk
,
i = 4, . . . , n
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
x1 = b1 /l1,1 ;
for i=2:n
xi = bi ;
for k=1:i-1
xi = xi − li,k ∗ xk ;
end
xi = xi /li,i ;
end
1
operazione
i-1
operazioni
1
operazione
costo computazionale
n
X
n(n + 1)
n2
i=
'
2
2
i=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Algoritmo di sostituzione all’indietro (backward
substitution)
Ux = b


u1,1 x1 + u1,2 x2 + u1,3 x3 + · · · + u1,n xn
= b1





u2,2 x2 + u2,3 x3 + · · · + u2,n xn
= b2



..
..
.
.





un−1,n−1 xn−1 + un−1,n xn = bn−1




un,n xn = bn
bn
xn =
un,n
bn−1 − un−1,n xn
xn−1 =
un−1,n−1
bn−2 − un−2,n−1 xn−1 − un−2,n xn
xn−2 =
un−2,n−2
..
.
bi −
xi =
n
X
k=i+1
ui,i
ui,k xk
,
i = n − 3, n − 4, . . . , 2, 1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
xn = bn /un,n ;
for i=n-1:-1:1
xi = bi ;
for k=i+1:n
xi = xi − ui,k ∗ xk ;
end
xi = xi /ui,i ;
end
1
operazione
n-i
operazioni
1
operazione
costo computazionale
1
X
n
X
n2
n(n + 1)
'
n−i+1=
i=
2
2
i=n
i=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Osservazione
Gli Algoritmi di sostituzione in avanti e all’indietro sono
ben definiti se le matrici L e U sono non singolari, cioè
li,i 6= 0,
ui,i 6= 0,
∀i = 1, . . . , n
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Metodo di eliminazione di Gauss
Sia A ∈ Rn×n una generica matrice di ordine n
due vettori colonna di lunghezza n. Scriviamo
esplicitamente il sistema Ax = b.



a1,1 x1 + a1,2 x2 + a1,3 x3 · · · + a1,n xn




a2,1 x1 + a2,2 x2 + a2,3 x3 · · · + a2,n xn
..
..
..


.
.
.




an,1 x1 + an,2 x2 + an,3 x3 · · · + an,n xn
e x, b ∈ Rn
= b1
= b2
..
.
= bn
Supponendo che a1,1 6= 0. Possiamo eliminare l’incognita x1
dalla 2a , 3a , . . . , n−esima equazione sommando all’i−esima
equazione i = 2, . . . , n la prima equazione moltiplicata per
mi,1 = −
ai,1
,
a1,1
i = 2, . . . , n.
Eseguiamo, cioè, le seguenti combinazioni lineari

(2)

a

 i,j = ai,j + mi,1 a1,j
i, j = 2, . . . , n


 (2)
bi = bi + mi,1 b1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Il nuovo sistema, equivalente a quello precedente, diventa


a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1




(2)
(2)
(2)
(2)

a
x
+
a
x
+
·
·
·
+
a
x
=
b

2
3
n
2,2
2,3
2,n
2


(2)
(2)
(2)
(2)
a3,2 x2 + a3,3 x3 + · · · + a3,n xn = b3


..
..
..
..



.
.
.
.




(2)
(2)
(2)
(2)
an,2 x2 + an,3 x3 + · · · + an,n xn = bn
Supponendo che a2,2 6= 0. Possiamo eliminare l’incognita x2
dalla 3a , 4a , . . . , n−esima equazione sommando all’i−esima
equazione i = 3, . . . , n la seconda equazione moltiplicata per
(2)
mi,2 = −
ai,2
(2)
a2,2
,
i = 3, . . . , n.
Eseguiamo, cioè, le seguenti combinazioni lineari

(3)
(2)
(2)

a
=
a
+
m
a
i,2

i,j
2,j
 i,j


 (3)
(2)
(2)
bi = bi + mi,2 b2
i, j = 3, . . . , n
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Il nuovo sistema, equivalente a quello precedente, diventa


a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1




(2)
(2)
(2)
(2)

a
x
+
a
x
+
·
·
·
+
a
x
=
b

2
3
n
2,2
2,3
2,n
2


(3)
(3)
(2)
a3,3 x3 + · · · + a3,n xn = b3


..
..
..
..



.
.
.
.




(3)
(3)
(2)
an,3 x3 + · · · + an,n xn = bn
(2)
(3)
Gli elementi a1,1 , a2,2 , a3,3 , . . . , che compaiono durante le
successive eliminazioni vengono detti elementi pivot.
Dopo (n − 1) passi, supponendo che tutti gli elementi pivot
siano non nulli, si ottiene il seguente sistema triangolare
superiore equivalente ai precedenti


a1,1 x1 + a1,2 x2 + a1,3 x3 + · · · + a1,n xn = b1




(2)
(2)
(2)
(2)

a
x
+
a
x
+
·
·
·
+
a
x
=
b

2,2 2
2,3 3
2,n n
2


(3)
(3)
(3)
a3,3 x3 + · · · + a3,n xn = b3


..
..



.
.




(n)
(n)
an,n xn = bn
che può essere risolto con l’Algoritmo di sostituzione
all’indietro.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Esempio Consideriamo il seguente sistema


2x1 − x2 + x3 − 2x4 = 0





2x2
− x4 = 1

x1
− 2x3 + x4 = 0





2x + x + x
=4
2
3
4
applicando il metodo di Gauss con
m2,1 = 0,
m3,1 = −
1
2
m4,1 = 0
si ottiene il sistema


2x1 − x2 + x3 − 2x4





2x
−x
2






1
2 x2
4
− 52 x3 + 2x4
2x2 + x3 + x4
=0
=1
=0
=4
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Con
m3,2
si ha
1
=−
4
m4,2 = −1


2x1 − x2 + x3 − 2x4





2x
−x
=0






= − 14
2
4
− 52 x3 + 94 x4
x3 + 2x4
Infine, con
m4,3
si ottiene
=1
=3
2
=
5


2x1 − x2 + x3 − 2x4





2x
−x
=0






= − 14
2
4
− 52 x3 + 94 x4
29
10 x4
=1
=
Da cui, sostituendo all’indietro, si ha
µ
¶µ
¶
1 9
2
x4 = 1, x3 = − − x4
−
= 1,
4 4
5
29
10
x2 =
1 + x4
= 1,
2
x2 − x3 + 2x4
x1 =
=1
2
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Ponendo
(1)
ai,j = ai,j
e
(1)
bi = bi ,
i, j = 1, . . . , n,
il seguente schema di calcolo riassume il metodo di
eliminazione di Gauss:
Per k = 1, 2, . . . , n − 1

(k)
a

i,k


m
=
−

i,k
(k)


a

k,k




(k)
(k)
(k+1)

+
m
a
=
a
a

i,k k,j ,
i,j
i,j








 (k+1)
(k)
bi
= bi + mi,k bk
i, j = k + 1, . . . , n
Osservazione
Il metodo di Gauss si può applicare se e soltanto se ad ogni
(k)
passo k = 1, . . . , n − 1 l’elemento pivot ak,k 6= 0.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Consideriamo le sottomatrici di A
Ak = (ai,j )i,j=1,...,k ,
k = 1, . . . , n,
dette matrici principali di testa di A. Vale il seguente
teorema
Teorema Sia A ∈ Rn×n . Gli elementi pivot
(k)
ak,k , k = 1, . . . , n, sono tutti diversi da zero se e soltanto se
tutte le matrici principali di testa di A sono non singolari,
cioè
det(Ak ) =
6 0,
∀k = 1, . . . , n.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Esempi di matrici per le quali la condizione
det(Ak ) =
6 0,
∀k = 1, . . . , n,
è verificata sono:
• matrici a diagonale dominante per righe, cioè
|ai,i | >
n
X
|ai,j |,
i = 1, . . . , n;
j=1
j6=i
• matrici a diagonale dominante per colonne, cioè
|aj,j | >
n
X
|ai,j |,
j = 1, . . . , n, ;
i=1
j6=i
• matrici simmetriche definite positive, cioè
AT = A e
xT Ax > 0,
∀x ∈ Rn , x 6= 0.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
···
for k=1:n-1
for i=k+1:n
ai,k = −ai,k /ak,k ;
1
operazione
for j=k+1:n
ai,j = ai,j + ai,k ∗ ak,j ; n-k
operazioni
end
bi = bi + ai,k ∗ bk ;
1
operazione
end
end
U=triu(A);
Si risolve il sistema triangolare superiore
U x = b con l’algoritmo di sostituzione
all’indietro
costo computazionale
n−1
X
k=1
n−1
n−1
2
X
X
n
n2
2
2
=2
[2(n − k) + (n − k) ] +
i+
i +
2
2
i=1
i=1
n(n − 1) n(n − 1)(2n − 1) n2
=2
+
+
2
6
2
n3
5
n3
n3
2
2
=
+n − n≤
+n '
3
6
3
3
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Pivoting e stabilità
(k)
Se al k−esimo passo si trova ak,k = 0, il metodo di Gauss,
cosı̀ come è stato descritto, non può proseguire.
(k)
Se ak,k = 0 necessariamente qualche altro elemento
(k)
ai,k , i = k + 1, . . . , n, della colonna k−esima della matrice
dei coefficienti deve essere non nullo, altrimenti la matrice
dei coefficienti sarebbe singolare.
(k)
Se, ad esempio, ar,k 6= 0, basta scambiare l’equazione
k−esima con la r−esima e poi procedere con le
eliminazioni.
Dunque, ogni sistema non singolare può essere sempre
ricondotto alla forma triangolare superiore con il metodo di
Gauss più eventuali scambi di equazioni.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Per assicurare una migliore stabilità numerica al metodo di
eliminazione di Gauss è spesso necessario permutare
l’ordine delle equazioni anche quando l’elemento pivot non
è esattamente zero, ma è molto piccolo (in valore assoluto)
rispetto agli altri elementi.
Per cercare di evitare catastrofiche propagazioni di errori è
di solito necessario scegliere, al generico passo k−esimo,
l’elemento pivot seguendo una delle seguenti strategie:
• Pivoting parziale: si sceglie r uguale al più piccolo
intero ≥ k tale che
(k)
(k)
|ar,k | = max |ai,k |
k≤i≤n
e, se r 6= k, si scambia l’equazione k−esima con
l’r−esima;
• Pivoting totale: si sceglie la coppia (r, s), con r, s ≥ k
tale che
(k)
|a(k)
|
=
max
|a
r,s
i,j |
k≤i,j≤n
e si scambiamo l’equazione k−esima con l’r−esima e
l’incognita k−esima (con il suo coefficiente) con
l’s−esima.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
La strategia di pivoting parziale è la meno “costosa” e,
poichè, in generale, risulta soddisfacente, essa è la strategia
più utilizzata.
Osservazione Il metodo di eliminazione di Gauss senza
pivoting è comunque numericamente stabile quando:
• la matrice A del sistema è simmetrica e a diagonale
dominante (la strategia di pivot non produce scambi);
• la matrice A del sistema è simmetrica e definita
positiva.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Esempio Consideriamo il sistema lineare Ax = b di ordine
n = 18, dove
µ
¶
2i − 1
ai,j = cos (j − 1)
π , i, j = 1, . . . , n,
2n
e
bi =
n
X
ai,j ,
i = 1, . . . , n,
j=1
la cui soluzione esatta è x = (1, 1, . . . , 1)T .
cond(A) = kAk∞ kA−1 k∞ = 16.90251471518910
Risolvendo il sistema con il metodo di eliminazione di
Gauss senza e con la strategia di pivoting parziale, si
ottengono i seguenti risultati:
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Gauss
Gauss + pivoting parziale
9.999999968425205e-001
9.999999999999993e-001
1.000000005848771e+000
1.000000000000000e+000
9.999999953310822e-001
1.000000000000001e+000
1.000000003291504e+000
1.000000000000001e+000
9.999999977773912e-001
9.999999999999997e-001
1.000000001703849e+000
1.000000000000000e+000
9.999999983501708e-001
1.000000000000000e+000
1.000000001767299e+000
1.000000000000001e+000
9.999999982508074e-001
9.999999999999998e-001
1.000000001433063e+000
9.999999999999999e-001
9.999999991425489e-001
9.999999999999993e-001
1.000000000200525e+000
1.000000000000000e+000
1.000000000347843e+000
9.999999999999996e-001
9.999999993163441e-001
9.999999999999990e-001
1.000000000800448e+000
9.999999999999996e-001
9.999999992564082e-001
1.000000000000000e+000
1.000000000564552e+000
1.000000000000000e+000
9.999999996959291e-001
9.999999999999999e-001
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Metodo di Gauss e Fattorizzazione LU
Il metodo di eliminazione di Gauss consiste nel costruire
una successione di matrici
[A|b] = [A(1) |b(1) ] . . . [A(k) |b(k) ] . . . [A(n) |b(n) ]
in modo tale che, per k = 1, . . . , n − 1,
[A(k+1) |b(k+1) ] = M (k) [A(k) |b(k) ]
dove

M
(k)










=









1
0
...
0
..
.
1
..
0
..
.
.

...
..
.
0
0
1
0
0
mk+1,k
1
0
..
.
0
..
.
mk+2,k
..
.
0
..
.
0 ...
0
mn,k
0
..
.
..
.
..
.
..
...
0
.
0
.. 

. 




.. 
. 









0 

1
è la matrice elementare di Gauss.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Si ha
A
= [M (1) ]−1 A(2) = [M (1) ]−1 [M (2) ]−1 A(3) = · · ·
= [M (1) ]−1 · · · [M (n−1) ]−1 A(n)
e
b = [M (1) ]−1 · · · [M (n−1) ]−1 b(n) .
Ponendo
L = [M (1) ]−1 · · · [M (n−1) ]−1 ,
U = A(n)
e
y = b(n) ,
otteniamo
A = LU
e b = Ly,
dove L è una matrice triangolare inferiore e U è una
matrice triangolare superiore.
Dunque, il sistema
Ax = b
diventa
LU x = Ly
e, dopo aver applicato il metodo di eliminazione di Gauss,
rimane da risolvere il sistema triangolare superiore
U x = y.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Osservazione Il metodo di eliminazione di Gauss calcola
esplicitamente la matrice U . La matrice L è


1
0 ...
...
0

.. 


0
. 
 −m2,1 1


..


..
..
..


.
.
.
.



.. 
..

.
1
. 


L=

..
..


.


.
−mk+1,k 1




.. ..


.
.
−m
k+2,k




..
..
..

.
.
.
1
0 


−mn,1 . . . . . . −mn,k
. . . . . . −mn,n−1 1
Calcolate le matrici L e U , per risolvere il sistema Ax = b,
basta risolvere i sistemi
Ly = b e
U x = y,
il primo triangolare inferiore e il secondo triangolare
superiore.
3
Il costo computazionale è n3 + n2 di cui
sola fattorizzazione A = LU .
n3
3
−
n
3
≤
n3
3
per la
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Eseguire la fattorizzazione LU di A può essere utile se:
• è necessario risolvere p sistemi
Ax1 = b1 ,
Ax2 = b2 ,
...,
Axp = bp ,
cioè il sistema
A ∈ Rn×n , X, B ∈ Rn×p
³ 3
´
Il costo computazionale p n3 + n2 si riduce a
AX = B,
n3
3
con
+ pn2 .
Se p = n e B = I, risolvere il sistema AX = B, è
equivalente a calcolare A−1 .
• si vuole calcolare il det A. Infatti
det(A) = det(LU ) = det(L) det(U ) = det(U ) =
n
Y
ui,i .
i=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Il metodo di Gauss con la variante del pivot esegue
ΠA = LU
e Πb = Ly
dove Π ∈ Rn×n , detta matrice di permutazione,
contiene le informazioni relative agli scambi di righe.
Vale il seguente
Teorema Per ogni matrice A ∈ Rn×n esiste una matrice
di permutazione Π ∈ Rn×n tale che
ΠA = LU.
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Metodo di Cholesky
Sia A ∈ Rn×n una matrice simmetrica definita positiva.
Vale il seguente
Teorema Se A ∈ Rn×n è una matrice simmetrica definita
positiva esiste ed è unica la fattorizzazione
A = LLT .
Posto A = (ai,j )i,j=1,...,n e L = (li,j )i,j=1,...,n , si ha
ai,j =
n
X
T
li,k lk,j
=
k=1
n
X
li,k lj,k .
k=1
Poichè la matrice è simmetrica, possiamo considerare solo
gli elementi di A con j ≤ i. Otteniamo
ai,j =
j−1
X
li,k lj,k + li,j lj,j ,
i = 1, . . . , n, j = 1, . . . , i − 1
k=1
e
ai,i =
i−1
X
2
2
li,k
+ li,i
,
i = 1, . . . , n.
k=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Da cui

v
u

i−1

X
u


2

li,k
li,i = tai,i −




k=1







"
#


j−1

X

1


li,k lj,k

li,j = lj,j ai,j −
i = 1, . . . , n
j = 1, . . . , i − 1
k=1
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
···
for i=1:n
li,i = 0;
for k=1:i-1
2
li,i = li,i + li,k
;
i − 1 operazioni
end
p
li,i = ai,i − li,i ;
1 operazione
for j=1:i-1
li,j = 0;
for k=1:j-1
li,j = li,j + li,k ∗ lj,k ;
j − 1 operazioni
end
li,j = (ai,j − li,j )/lj,j ;
1 operazione
end
end
Si risolve il sistema triangolare inferiore
Ly = b con l’algoritmo di sostituzione
in avanti e il sistema triangolare superiore
LT x = y con l’algoritmo di sostituzione
all’indietro
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis
Facoltà di Ingegneria - Laurea Triennale in Ingegneria Meccanica
Costo computazionale
n
X
i=1

i +
i−1
X

j  + n2
=
j=1
n
X
i+
i=1
=
=
=
'
2
i=1
n
X
n
+ n2
n
1X 2 1X
i+
i −
i + n2
2 i=1
2 i=1
i=1
n
=
n
X
i(i − 1)
n
1X
1X 2
i+
i + n2
2 i=1
2 i=1
n(n + 1) (n + 1)n(2n + 1)
+
+ n2
4
12
n3
3
n
+ n2 +
6
2
3
n3
6
Corso di Calcolo Numerico - Dott.ssa M.C. De Bonis