Uploaded by antonio rossi

Laboratorio01 parte2

advertisement
METODI ANALITICI E NUMERICI PER L’INGEGNERIA
Corso di Laurea in Ingegneria Meccanica
Proff. S. Perotto, G. Verzini
A.A. 2022 – 2023
Politecnico di Milano
Dr. N. Ferro, A. Gerbi, E. Temellini
Esercitazione 1B
Soluzione di Sistemi di Equazioni Lineari:
Metodi Diretti
Il metodo di fattorizzazione LU (con pivoting)
Data una matrice quadrata A di dimensione n × n non singolare è possibile fattorizzarla con
il prodotto di due matrici L ed U , dove L è una matrice triangolare inferiore ed U è una matrice
triangolare superiore. Tale fattorizzazione permette di risolvere un sistema lineare del tipo
Ax = b, con A = LU.
Una volta calcolata la fattorizzazione LU di A si può risolvere il sistema Ax = b risolvendo in
sequenza i due sistemi triangolari
Ly = b, U x = y.
(1)
Se necessario, si può ricorrere alla tecnica del pivoting, che consiste nell’effettuare una permutazione
delle righe di A. La matrice A viene premoltiplicata per un’oppurtuna matrice di permutazione P . Si
ottiene quindi il sistema lineare:
P Ax = P b =⇒ LU x = P b.
Qualora si utilizzi il pivoting i due sistemi (1) diventano
Ly = P b,
U x = y.
(2)
L’algoritmo della fattorizzazione LU con pivoting è il seguente.
(1)
Posto A(1) = A (in componenti aij = aij , per i, j = 1, . . . , n) e P = I si calcoli:
per k = 1, . . . , n − 1
(k)
(k)
trovare r̄ tale che |ar̄k | = max |ark |
r=k,...n
scambiare la riga k con la riga r̄ sia in A che in P
per i = k + 1, . . . , n
(k)
lik =
aik
,
(k)
akk
per j = k + 1, . . . , n
(k+1)
aij
(k)
(k)
= aij − lik akj .
Al termine di questo processo, gli elementi della matrice triangolare U sono ottenuti come:
uij = aij
per i = 1, . . . , n
e j = 1, . . . , i,
mentre gli elementi di L sono i coefficienti lik generati dall’algoritmo. In particolare, gli elementi
diagonali di L non sono calcolati, perché per l’unicità della fattorizzazione sono posti uguale ad 1.
I sistemi (1) (o la variante con pivotazione (2)) risultano più agevoli da risolvere perché, essendo
rispettivamente triangolari inferiore e superiore, possono essere risolti efficientemente con gli schemi
delle sostituzioni in avanti e all’indietro. In particolare il sistema Ly = b può essere risolto con il
seguente algoritmo:
1
y1 =
yi =
b1
l11
1
lii
bi −
i−1
X
lij yj ,
(3)
i = 2, . . . , n
lii ̸= 0,
j=1
e in modo analogo U x = y con:
xn =
xi =
yn
unn
1 uii
yi −
n
X
(4)
uij xj ,
i = n − 1, . . . , 1
uii ̸= 0.
j=i+1
La funzione Matlab® lu calcola la fattorizzazione LU con pivoting per righe. La sua sintassi
completa è
>>[L,U,P]=lu(A);
dove P è la matrice di permutazione.
Esercizio 1
Una sorgente di fluido refrigerante di portata q0 raffredda n macchine distribuite in parallelo come
schematizzato in figura.
La caduta di pressione ∆pi in ogni macchina è legata alla portata di fluido qi che la attraversa
tramite la relazione:
∆pi = Ri qi ,
dove Ri rappresenta la resistenza e gli attriti nel passaggio del fluido attraverso l’i-esima macchina. Si
vuole determinare la portata qi che raggiunge ciascuna macchina. Il calcolo delle portate qi conduce
a un sistema lineare Aq = b, dove q = [q1 . . . , qn ]T è il vettore delle portate incognite, A è la matrice:


1
1
1
1
···
1
R1 −R2
0
0
···
0 


0
R2 −R3 0
···
0 


,
.
.
.
.
A=
.
.
.
.
 .
.
.
0
. 


 ..
..
.. 
.
.
.
.
 .
.
.
.
. 
0
0
0
· · · Rn−1 −Rn
e b è il vettore di dimensione n:
b = [q0 , 0, 0, · · · , 0]T .
n
X
La prima equazione del sistema lineare esprime il fatto che
qi = q0 , mentre le altre n − 1 equazioni
i
si ricavano tenendo conto che le cadute di pressione ∆pi in ogni macchina sono tutte uguali (essendo
le macchine in parallelo), quindi per ogni i, con i = 1, . . . , n − 1, possiamo scrivere l’equazione Ri qi −
Ri+1 qi+1 = 0.
2
1. Si ponga n = 20, Ri = 1 con i = 1, . . . , n e q0 = 2 e si assegnino in Matlab® la matrice A e il
vettore dei termini noti b.
2. Si calcoli la fattorizzazione LU della matrice A, mediante la funzione Matlab® lu. Verificare
che la tecnica del pivoting non è stata usata in questo caso.
3. Verificare utilizzando il comando spy che la matrice L è sparsa, mentre la matrice U viene
riempita.
4. Implementare gli algoritmi di sostituzione in avanti e all’indietro mediante due funzioni Matlab®
la cui interfaccia sarà rispettivamente:
function [y] = fwsub(L,b) e function [x] = bksub(U,y)
La funzione Matlab® fwsub.m, dati in ingresso una matrice triangolare inferiore L ∈ Rn×n e
un vettore b ∈ Rn , restituisce in uscita il vettore y, soluzione del sistema Ly = b, calcolata
mediante l’algoritmo della sostituzione in avanti (3).
Analogamente, la funzione bksub.m, dati in ingresso una matrice triangolare superiore U ∈ Rn×n
e un vettore y ∈ Rn , restituisce in uscita il vettore x, soluzione del sistema U x = y, calcolata
mediante l’algoritmo della sostituzione in indietro (4).
5. Risolvere numericamente, utilizzando le funzioni fwsub.m e bksub.m implementate al punto
precedente, i due sistemi triangolari necessari per ottenere la soluzione del sistema di partenza
Aq = b.
6. Si calcoli la norma 2 dell’errore relativo ∥errrel ∥ = ∥qex − q∥/∥qex ∥ e la norma 2 del residuo normalizzato ∥resnor ∥ = ∥b − Aq∥/∥b∥ sapendo che la soluzione esatta è il vettore
q0
qex (i) =
, i = 1, . . . , n. Si commenti il risultato ottenuto basandosi sul valore del numero
n
di condizionamento della matrice A. (Si utilizzino i comandi norm e cond).
7. Si ponga R1 = 103 e si calcoli la nuova distribuzione delle portate. Si calcoli il numero di
condizionamento di A e si commenti il risultato ottenuto.
8. È stata effettuata qualche permutazione della righe di A per effettuare la fattorizzazione LU nel
punto precedente? Se sı̀, quale?
Esercizio 3
Spesso, in applicazioni concrete, ci si trova a dover risolvere sistemi lineari la cui matrice è tridiagonale,
cioè del tipo:


a1 c1





 e1 a2
c2








.
.
.
..
..
..
A=
.








e
a
c
n−2
n−1
n−1




en−1
an
In tale situazione, un algoritmo molto efficiente è l’algoritmo di Thomas:
1. sfrutta la struttura tridiagonale della matrice per calcolare in modo rapido la fattorizzazione LU
della matrice A. Le matrici L, U che si ottengono risultano bidiagonali;
3
2. utilizza tali informazioni sulla struttura di L, U per risolvere efficientemente i due sistemi Ly = b
e U x = y.
In particolare, se A ∈ Rn×n è della forma di cui sopra, allora le matrici L ed U sono date da:




1
α1 c1








 δ1 1



α
c
2
2
















..
..
..
..
L=
U =
,
,
.
.
.
.















δn−2
1
αn−1 cn−1 








δn−1 1
αn
con
ei−1
,
αi = ai − δi−1 ci−1 ,
i = 2, . . . , n.
αi−1
Quindi possiamo risolvere in sequenza i due sistemi bidiagonali tramite le relazioni:
α1 = a1 ,
(Ly = b)
δi−1 =
y1 = b1 ,
yi = bi − δi−1 yi−1 ,
i = 2, . . . , n
yn
yi − ci xi+1
,
xi =
,
i = n − 1, . . . , 1.
αn
αi
Il costo computazionale complessivo per l’applicazione dell’algoritmo di Thomas è di 8n − 7 operazioni
2
contro le O( n3 ) dell’applicazione della fattorizzazione LU .
3
(U x = y)
xn =
1. Si implementi in Matlab® l’algoritmo di Thomas per risolvere un sistema lineare tridiagonale.
L’interfaccia dovrà essere:
function [L,U,x] = thomas(A,b)
2. Si utilizzi la funzione thomas per risolvere il sistema lineare Ax = b, dove A ∈ Rn×n , x, b ∈ Rn ,
per n = 1000, con:
A = tridiag(−1, 2, −1) e b = [1, 1, . . . , 1]T .
Si riportino i valori di xn e Unn = αn cosı̀ ottenuti. Si stimi inoltre il risparmio computazionale garantito dall’utilizzo dell’algoritmo di Thomas rispetto all’applicazione del metodo di
fattorizzazione LU completo.
Esercizio 4
1
, con i, j = 1, . . . n),
i+j−1
classico esempio di matrice mal condizionata:

1
1
1

2
3
1
1
1


3
4
2
1
1
1
H=
3
4
5

..
..
 ..
.
.
.

1
1
1
La matrice H, (H(i, j) =
n
n+1
n+2
è nota come matrice di Hilbert e costituisce un
···
···
···
..
.
···
1
n
1
n+1
1
n+2
..
.
1
2n − 1







.






Si ripeta l’Esercizio 2 sostituendo la matrice V con la matrice H. La funzione Matlab® hilb
permette di generare la matrice di Hilbert di dimensione n × n.
4
HOMEWORK
Esercizio 2
Dato il vettore p = [p1 , p2 , · · · , pn ]T , si definisca la matrice di Vandermonde:
 n−1

p1
· · · p11 1


pn−1 · · · p1 1
2
 2


V (p) = 
 ..
.. . . ..  .
 .
. .
.


pn−1
···
n
p1n
1
Fissato n, si costruisca il vettore p = [1/n, 2/n, · · · , 1]T . Si consideri ora il sistema lineare V x = b,
e si costruisca il vettore dei termini noti b in modo da avere come soluzione esatta del sistema il vettore
xex = [1, 1, . . . , 1]T . Può essere utile utilizzare il comando vander di Matlab® che genera la matrice
di Vandermonde dato un vettore in ingresso (vedere help vander).
1. Per n = 5, si calcoli il vettore b e successivamente si risolva numericamente il sistema lineare
V x = b utilizzando la fattorizzazione LU della matrice. È stata effettuata qualche permutazione
delle righe di V ? Si calcoli la norma 2 dell’errore relativo commesso, la norma 2 del residuo
normalizzato e il numero di condizionamento della matrice. Quali considerazioni si possono
fare?
2. Si ripetano i punti precedenti per n = 3, 4, 5, . . . , 15. Si rappresentino su un grafico in scala
semi-logaritmica gli andamenti dell’errore relativo, del residuo normalizzato e del numero di
condizionamento in funzione di n. Commentare il grafico ottenuto.
Esercizio 5
Si considerino le matrici


50 1 3
A =  1 6 0 ,
3 0 1


50 1 10
B =  3 20 1  ,
10 4 70


7 8 9
C = 5 4 3 .
1 2 6
(5)
1. Si verifichi, utilizzando Matlab® o Octave , se le matrici A, B e C soddisfano la condizioni
necessaria e sufficiente per l’esistenza della fattorizzazione LU (senza usare pivoting per riga).
2. Utilizzare la funzione lu per fattorizzare le matrici A, B, e C.
3. Supponiamo ora di voler risolvere il sistema Ax = b con A definita in (5). Si utilizzi come
termine noto b, un vettore tale che la soluzione esatta del sistema sia xex = [1, 1, 1]T . Si calcoli
la soluzione del sistema Ax = b, utilizzando le funzioni bksub.m e fwsub.m.
4. Si calcoli la norma 2 dell’errore relativo ∥xex − x∥2 /∥xex ∥2 e la norma 2 del residuo normalizzato
∥b − Ax∥2 /∥b∥2 conoscendo la soluzione esatta.
5
Download