Sei sulla pagina 1di 15

Relazione Secondo Compitino

Calcolo Numerico
Francesco Morandini

June 20, 2020

1
Indice
1 Introduzione 3
1.1 Premessa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Esercizio 1 4
2.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3 Esercizio 2 6
3.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 Esercizio 3 7
4.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

5 Esercizio 4 8
5.0.1 LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.0.2 Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

6 Esercizio 5 11
6.0.1 Modello lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.0.2 Modello quadratico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.0.3 Modello potenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
6.0.4 Modello esponenziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6.1 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

7 Esercizio 6 13
7.1 Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.1.1 Trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7.1.2 Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.1.3 Richardson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
7.2 Risultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2
1 Introduzione
In questa relazione andrò a esporre e a commentare il funzionamento e i relativi risultati delle
function MATLAB relative ai vari metodi iterativi per la risoluzione di sistemi lineari, di inter-
polazione polinomiale e quadratura numerica.
In particolare commenterò sia le function relative ai metodi iterativi sia gli script che permettono
la chiamata delle varie funzioni.
La function è la parte algoritmica del nostro metodo iterativo, mentre lo script riguarda tutta la
parte di visualizzazione e inizializzazione delle variabili della function stessa.

Prima di iniziare a commentare lo svolgimento degli esercizi assegnati, volevo riportare le for-
mule per l’implementazione dei tre metodi iterativi dato lo splitting della matrice A in A = L + D
+ U.

ˆ Jacobi: M x(k+1) = N x(k) + b con M = D, N = −(L + U )

ˆ Gauss-Seidel: M x(k+1) = N x(k) + b con M = L + D, N = −U

ˆ SOR: M x(k+1) = N x(k) + ωb con M = ωL + D, N = (1 − ω)D − ωU

Con L=matrice triangolare inferiore, U=matrice triangolare superiore e D=matrice diagonale.

1.1 Premessa
All’interno degli esercizi più volte sarà richiesto di modificare le funzioni con delle variabili basate
sul proprio numero di matricola, in particolare:

ˆ m7 = cifra diversa da 0 più a destra del numero di matricola (nel mio caso m7=3)

ˆ m6 = seconda cifra diversa da 0 più a destra del numero di matricola (nel mio caso m6=6)

Le matrici che che andremo a trattare saranno generalmente diagonali e/o triangolari. Per questo
scopo ci viene in aiuto il comando diag di MATLAB e i comandi tril e triu. Il comando diag ha
come parametri di input due valori: il primo è il numero o il vettore da diagonalizzare, mentre il
secondo rappresenta in quale diagonale andrà messo tale valore/vettore. Ad esempio se voglio nella
diagonale sotto alla principale tutti ”1” dovrò scrivere prima il vettore unitario della grandezza del
numero di elementi di quella diagonale (vett=ones(n-1,1)) e successivamente A=diag(vett,-1).

3
2 Esercizio 1

 
β −α 0 0 0
−α β −α 0 0 
 
A=  0 −α β −α 0 


 0 0 −α β −α
0 0 0 −α β

Il primo esercizio consiste nella risoluzione del sistema lineare con la matrice A tramite metodi
iterativi stazionari (Jacobi, Gauss-Seidel, SOR).
Questi metodi per convergere hanno bisogno che siano verificate alcune ipotesi preliminari:
La matrice di iterazione E = M −1 ∗ N abbia raggio spettrale minore di 1, oppure che la matrice
sia diagonalmente dominante in senso stretto cioè che i valori posti sulla diagonale principale
siano maggiori in modulo della somma degli altri valori sempre in modulo.

A partire dalla function jacobi.m viene richiesto di implementare i metodi di Gauss-Seidel e SOR
con le opportune modifiche e confrontare i risultati.
Tutti e tre i metodi iterativi hanno come parametri di input la matrice A, il vettore nullo x0,
il termine noto b, la tolleranza sugli scarti tol per determinare l’arresto e il numero massimo di
iterazioni itmax. Il metodo SOR ha inoltre il parametro ω detto parametro di rilassamento che
deve valere 0 < ω < 2 per la convergenza. Inoltre non tutti i valori di omega fanno convergere SOR
alla stessa velocità, esiste infatti un valore di ω migliore degli altri detto omega ottimale. Questo
valore può essere calcolato a partire dal raggio spettrale della matrice di iterazione di Gauss-Seidel
(o Jacobi elevandolo al quadrato) tramite la formula
2
ω= √
1+ 1 − ρESeidel

Questa formula può essere usata solo se Jacobi converge e i suoi autovalori sono tutti reali (matrice
simmetrica). Nel nostro caso siccome la matrice A è simmetrica e inoltre vedremo che Jacobi
converge allora possiamo applicare la formula. Queste appena elencate sono le ipotesi del teorema
di Young-Varga.

4
2.1 Risultati

Come possiamo vedere dal grafico i tre metodi iterativi hanno velocità di convergenza diverse:
SOR>Gauss-Seidel>Jacobi. In particolare:

ˆ ρ(EJ ) = 0.2386

ˆ ρ(ES ) = 0.4771

ˆ ρ(ESOR ) = 0.9956

E il numero di iterazioni necessarie per avere uno scarto minore della tolleranza sono rispettiva-
mente:

ˆ iterJacobi = 43 con uno scarto pari a 9.0132e-11

ˆ iterG−S = 24 con uno scarto pari a 3.5934e-11

ˆ iterSOR = 14 con uno scarto pari a 5.2041e-11

5
3 Esercizio 2

4 −1 0 −1 0 0 0 0 0 T1 100
     
−1 4 −1 0 −1 0 0 0 0 T 2 100
     
 0 −1 4 0 0 −1 0 0 0 T 3 200
     
−1 0 0 4 −1 0 −1 0 0 T 4  0 
     
 0 −1 0 −1 4 −1 0 −1 0  T 5 =  0 
     
0
 0 −1 0 −1 4 0 0 −1

T 6 100
   
0
 0 0 −1 0 0 4 −1 0 

T 7  0 
   
0 0 0 0 −1 0 −1 4 −1 T 8  0 
0 0 0 0 0 −1 0 −1 4 T9 100

L’esercizio 2 consiste nel risolvere il sistema lineare riportato qua sopra tramite il metodo di Sovrar-
ilassamento (SOR) dopo aver verificato le ipotesi del teorema di Young-Varga (vedi es.1). Se le
ipotesi sono verificate (come nel nostro caso) allora possiamo calcolare analiticamente il valore ω
ottimale. Nell’esercizio si richiede di confrontare il valore calcolato analiticamente con l’ω calcolato
sperimentalmente reiterando il metodo con valori diversi di ω, precisamente ω = [1 : 0.025 : 1.5].
Lo script tramite la funzione find di MATLAB cerca nel vettore delle iterate il valore minimo e in
base alla sua posizione si ricava quante volte omega è dovuto aumentare per raggiungere il valore
ottimale.

3.1 Risultati
Di seguito riporto il grafico delle iterazioni in funzione di ω:

Come si può constatare dal grafico il valore di ω ottimale calcolato sperimentalmente lo si ha


dopo 8 reiterate ricavando quindi un valore di ωsp = 1.175, contro un valore calcolato analiticamente
di ωan = 1.1716.

6
4 Esercizio 3
Esercizio 3 si chiede di generare una matrice biciclica e coerentemente ordinata tramite la function
MATLAB delsq e numgrid, specificatamente con il seguente valore dipendente dalle variabili m6 e
m7 definite sopra:
nx = 20 + 3 ∗ m6 + 2 ∗ m7 = 44
A = delsq(numgrid(0 S 0 , nx))
Che produce la seguente matrice:

Il termine noto b va impostato in modo che la soluzione vera sia un vettore unitario. Inoltre
inizializzare: tolleranza=10−8 e iterazioni massime=10000.
Tale sistema va risolto tre volte:

ˆ Gauss-Seidel

ˆ SOR con ω = 1.5

ˆ SOR con ω ottimale calcolato tramite la formula per le matrici bicicliche coerentemente ordi-
nate in cui ρG−S si può calcolare tramite una formula valida per le matrici che discretizzano
l’equazione di Laplace, cioè:
π 2 h2 1
ρ(ES ) ≈ (1 − 2 ), dove h= nx−1

7
4.1 Risultati

Come possiamo notare dal grafico del profilo di convergenza dei tre metodi iterativi c’è una grande
differenza in termini di velocità di convergenza tra Gauss-Seidel e SOR, ma anche tra i SOR stessi
con ω differenti. Quindi il parametro ω influisce particolarmente sulla velocità di convergenza.
Ricordandoci infatti che Gauss-Seidel è ”semplicemente” SOR con ω = 1. Di seguito riporto la
norma dell’errore dei tre metodi utilizzati:
ˆ Norma errore Gauss-Seidel: 1.860560442576e-06
ˆ Norma errore SOR con ω = 1.5: 6.055148378184e-07
ˆ Norma errore SOR con ω calcolato sperimentalmente: 4.542348932000e-08
La differenza tra i metodi è dell’ordine di 10 volte di volta in volta dal primo al terzo. Quindi è
molto più conveniente utilizzare SOR con ω calcolato sperimentalmente sia a livello computazione
che a livello di accuratezza del risultato finale.

5 Esercizio 4
Nell’esercizio 4 si chiede di reimplementare la function delsq dell’esercizio 3 per la costruzione
di matrici bicicliche coerentemente ordinate, ma con la differenza che in questo caso andremo a
generare un vettore di matrici a dimensione crescente con nx = [52 102 152 202 302 402]. In questo
caso i metodi iterativi da applicare sono:
ˆ SOR con ω calcolato analogamente all’esercizio 3
ˆ Fattorizzazione LU di MATLAB
ˆ Fattorizzazione di Cholesky di MATLAB
Inoltre per ogni metodo e per ogni matrice si chiede di generare un vettore contenente i tempi di
calcolo per la risoluzione dei sistemi. A tal proposito ci viene d’aiuto la funzione tic toc di MAT-
LAB. tic fa partire il timer, quindi andrà posto appena prima della chiamata del metodo iterativo,
mentre toc ferma il timer, quindi andrà posto subito dopo.

8
5.0.1 LU
Il metodo di fattorizzazione di LU consiste nel dividere il sistema di partenza in due sistemi di più
facile risoluzione. Nello specifico in MATLAB LU viene chiamato [L,U]=lu(A).
La matrice U si ricava dall’eliminazione di Gauss a partire dalla matrice A e sarà una matrice
triangolare superiore.
Mentre la matrice L avrà 1 sulla diagonale principale e sotto di essa ci saranno i valori li,j ri-
cavati dalla divisione del pivot e degli altri elementi della colonna sotto di esso che permettono
l’eliminazione di Gauss.
Ad esempio:

    
2 1 3 1 0 0 2 1 3
A=  4 −1 3 =  2 1 0 0 −3 −3
−2 5 5 −1 −2 1 0 0 2
In questo esempio di matrici 3x3, la prima matrice dopo l’uguale è L e la seconda U.
(
Ly = P b
Dopo aver chiamato la function lu si vengono a creare due sistemi lineari triangolari:
Ux = y
Che risolveremo:
ˆ y = L\b

ˆ xnew = U \y

5.0.2 Cholesky
Come per la fattorizzazione LU, anche la fattorizzazione di Cholesky scompone il sistema lineare
di partenza in due sistemi lineari di più facile risoluzione. Nello specifico:
La matrice di partenza deve essere simmetrica e definita positiva, (tutti i minori principali siano
maggiori di zero, oppure tutti gli autovalori maggiori di zero) per avere una fattorizzazione unica.
Nel nostro caso specifico per come costruiamo le matrici di partenza le ipotesi sono tutte confermate.
La matrice iniziale A andrà scomposta in due matrici triangolari M ed M T che si ricavano come
segue: A = M M T

    
2 1 1 m11 0 0 m11 m21 m31
A= 1 2 1 = m21 m22 0  0 m22 m32 
1 1 2 m31 m32 m33 0 0 m33
Quindi risolvendo il sistema lineare si ricavano i valori di mij con cui andremo a costruire gli effettivi
due sistemi lineari finali. Poniamo Ax = M M T x = b poi M T x = y con cui andremo a impostare i
seguenti sistemi lineari:

(
My=b
y=MT x

9
Che risolveremo:

ˆ y = M \b

ˆ xnew = M T \y

5.1 Risultati
Di seguito possiamo vedere il grafico con i tempi di calcolo in funzione della dimensione della matrice
per i vari metodi:

Come si può vedere dal grafico la fattorizzazione LU è vantaggiosa per matrici di piccole dimensioni
e via via i tempi aumentano più velocemente rispetto agli altri metodi. Sempre dal grafico possiamo
notare come invece per matrici di grandi dimensioni il metodo che conviene è Cholesky.
Norma degli errori SOR:

ˆ 1.886243190065e-07 con tempo di calcolo 0.01673

ˆ 3.787642408462e-07 con tempo di calcolo 0.18165

ˆ 5.671291949779e-07 con tempo di calcolo 0.55238

ˆ 7.648805512851e-07 con tempo di calcolo 1.31257

ˆ 1.150121299010e-06 con tempo di calcolo 4.71810

ˆ 1.535137233239e-06 con tempo di calcolo 15.97303

Norma degli errori LU:

ˆ 2.885793847210e-13 con tempo di calcolo 0.02437

ˆ 1.683270920689e-12 con tempo di calcolo 0.24724

ˆ 8.130678512803e-12 con tempo di calcolo 0.91617

10
ˆ 4.809636398277e-11 con tempo di calcolo 2.56093

ˆ 3.002587387678e-10 con tempo di calcolo 12.44065

ˆ 1.114301441039e-09 con tempo di calcolo 34.90504

Norma degli errori Cholesky:

ˆ 8.298722167958e-14 con tempo di calcolo 0.12859

ˆ 5.150728932895e-13 con tempo di calcolo 0.07671

ˆ 1.753613883760e-12 con tempo di calcolo 0.24138

ˆ 3.331015312236e-12 con tempo di calcolo 0.56123

ˆ 1.241629616908e-11 con tempo di calcolo 2.04781

ˆ 1.652733057238e-11 con tempo di calcolo 10.83322

6 Esercizio 5
xi 0.25 1.5 2 3.5 6 7 10
yi 0.57616 2.09507 2.64663 4.21591 6.66505 7.60714 10.34546

Nell’esercizio 5 si chiede di approssimare tramite la function polyfit di MATLAB secondo quattro


modelli, i punti sperimentali opportunamente corretti tramite la formula: ynew = yi + (m6−1)i+(m7∗i)
10 .

La function polyfit ha 3 parametri di input e si implementa come segue:


p=polyfit(xi,ynew,grado del polinomio)
e restituisce come output i coefficienti del polinomio del grado desiderato.

6.0.1 Modello lineare


Come primo modello abbiamo il lineare:
p1=polyfit(xi,ynew,1)

6.0.2 Modello quadratico


Come secondo modello abbiamo il quadratico:
p2=polyfit(xi,ynew,2)

6.0.3 Modello potenza


Come terzo modello abbiamo la potenza:
ppot = polyf it(log(xi), log(ynew), 1)
a0 = exp(ppot(2))
a1 = ppot(1)
f unpot = @(x)a0 ∗ (x.a1 )
Nel modello potenza chiamiamo polyfit lineare con input il logaritmo dei valori di partenza e ci

11
ricaviamo la funzione a ritroso. log(y) = log(a0 ) + a1 log(x).
Infatti dobbiamo passare dalla retta iniziale: Y = A0 + A1 X alla funzione: y = a0 (xa1 ) e per fare
ciò dobbiamo fare a0 = exp(A0 ), a1 = A1 ed x = exp(X).

6.0.4 Modello esponenziale


Come quarto e ultimo modello abbiamo l’esponenziale:
pexp = polyf it(xi, log(ynew), 1)
a0e = exp(pexp(2))
a1e = pexp(1)
f unexp = @(x)a0e ∗ exp(a1e ∗ x)
Il modello esponenziale ha un approccio analogo al modello potenza, ma con la differenza che in
questo caso essendo esponenziale possiamo scrivere: log(y) = log(a0 ) + a1 x e quindi per passare
dalla retta Y = A0 + A1 X alla funzione y = a0 ea1 x dobbiamo porre a0 = exp(A0 ), a1 = exp(A1 )
ed x = X.

6.1 Risultati

Somma scarti lineare: 1.40191


Somma scarti quadratica: 0.30165
Somma scarti potenza: 1.22819
Somma scarti esponenziale: 48.68952
Infatti come possiamo notare dal grafico non è una sorpresa il fatto che lo scarto minimo sia il
quadratico perchè approssima meglio i punti sperimentali, a differenza per esempio dell’esponenziale
che passa molto distante da essi avendo quindi un errore circa 161 volte superiore.

12
7 Esercizio 6
Come ultimo esercizio è richiesta la quadratura numerica di due integrali con il metodo dei trapezi,
di Cavalieri-Simpson e con l’estrapolazione di Richardson.

7.1 Metodi
Di seguito andrò a esporre i tre metodi con le relative formule e commenti.
La quadratura prevede l’approssimazione della funzione integranda attraverso la suddivisione in
intervalli. I punti presi in considerazione vengono chiamati nodi. La formuala generale è:
Z b n
X
I= f (x)dx ≈ ωk f (xk )
a k=0

che tramite il teorema della media integrale possiamo trasformare in:


n
(n)
X
In = (b − a) f (xk )Ck
k=0

dette formule di Newton-Cotes.

7.1.1 Trapezi

Il primo metodo richiesto è quello dei trapezi. Il modello più semplice è composto da un intervallo,
in cui vogliamo approssimare la funzione, con due nodi agli estremi. In pratica questo metodo
traccia una retta tra il primo e il secondo punto e calcola l’area al di sotto di essa, quindi in
generale non è un metodo molto preciso.
(1)
In questo metodo il valore della media integrale Ck = 12 avendo cosı̀ una formula:

(b − a)
In = [f (a) + f (b)]
2
Se gli intervalli sono n allora si avrà la formula composta:
 
(b − a) f (x0 ) f (xN )
In = + f (x1 ) + ... + f (xN −1 ) +
N 2 2

con un errore pari a:


(b − a)3 II
ET = − f (ξ)
12n2

13
7.1.2 Cavalieri-Simpson

Il secondo metodo richiesto è Cavalieri-Simpson. Il modello più semplice è composto da un intervallo


con due nodi agli estremi più un terzo nodo nel punto medio. Questo metodo è decisamente più
preciso di quello dei trapezi, infatti in questo caso la funzione viene approssimata da una parabola.
(2) (2) (2)
Per simpson semplice il valore della media integrale vale: C0 = C2 = 61 e C1 = 32 avendo cosı̀
una formula:    
1 2 a+b 1
In = (b − a) f (a) + f + f (b)
6 3 2 6
che possiamo semplificare in:
   
(b − a) a+b
In = f (a) + 4f + f (b)
6 2

Se gli intervalli sono n allora si avrà la formula composta:


N −1 N −1
" #
(b − a) X X
In = f (x0 ) + 2 f (x2r ) + 4 f (x2s+1 ) + f (x2N )
6N
r=1 s=0

con un errore pari a:


(b − a)5 IV
ET = − f (ξ)
2880n4

7.1.3 Richardson
Come terzo metodo avevamo l’estrazpolazione di Richardson, che permette una ulteriore approssi-
mazione di Cavalieri-Simpson.
Per implementare la formula di Richardson occorre valutare C-S almeno due volte: la prima con N
sotto intervalli e la seconda con 2N sotto intervalli. La formula è:
16I2n − In
In =
15

14
7.2 Risultati

(1)

Come possiamo notare dai grafici e come ci aspettavamo dalla teoria il metodo più preciso e più
veloce è l’estrapolazione di Richardson seguita da C-S e infine trapezi. Integrali da valutare:
Z 10

A: ex−m7 sin( x)dx
m7−1
Z m6 √
B: xdx
0
Nel primo integrale il rapporto tra errori consecutivi tende rispettivamente:

ˆ Trapezi: 4

ˆ Cavalieri-Simpson: 16

ˆ Richardson: 64

Nel secondo integrale invece c’è un anomalia infatti i rapporti tendono tutti e tre a: 2.828 ≈ 2 2.
Questo accade perché la funzione B in un intorno destro di 0 ha derivata quarta e seconda che
tendono a −∞, andando contro l’affermazione che le derivate debbano essere limitate. Infatti se
notiamo anche gli errori nell’integrale B sono molto più elevati rispetto all’integrale A, proprio per
questo comportamento anomalo della derivata in un intorno destro di 0.
Ad esempio per C-S:

A: 6.62794263917021e-10
B: 1.2873769001942e-05

Una differenza di ben 105 !!

15

Potrebbero piacerti anche