Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Calcolo Numerico
Francesco Morandini
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.
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:
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 ω:
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 ω 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:
10
4.809636398277e-11 con tempo di calcolo 2.56093
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
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.1 Risultati
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
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
13
7.1.2 Cavalieri-Simpson
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
15