Il 0% ha trovato utile questo documento (0 voti)
37 visualizzazioni167 pagine

Metodi Numerici - Equazioni Differenziali

Caricato da

Giovanni
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
37 visualizzazioni167 pagine

Metodi Numerici - Equazioni Differenziali

Caricato da

Giovanni
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Dispense di

Metodi Numerici
per le Equazioni Differenziali

Dott. Marco Caliari

a.a. 2012/13

La versione più aggiornata (al 9 agosto 2013) si trova


all’indirizzo
http://profs.sci.univr.it/∼caliari/aa1213/equazioni differenziali/dispense.pdf
Questi appunti non hanno nessuna pretesa di completezza. Sono solo
alcune note ed esercizi che affiancano l’insegnamento di Metodi Numerici per
le Equazioni Differenziali. Sono inoltre da considerarsi in perenne “under
revision” e pertanto possono contenere discrepanze, inesattezze o errori.
Indice

0 Preliminari 7

1 Interpolazione polinomiale a tratti 8


1.1 Interpolazione lineare a tratti . . . . . . . . . . . . . . . . . . 8
1.1.1 Errore di interpolazione . . . . . . . . . . . . . . . . . 9

2 Formule di quadratura gaussiana 10


2.1 Quadratura gaussiana di Chebyshev(-Lobatto) . . . . . . . . . 11

3 Metodi iterativi per sistemi lineari 13


3.1 Metodi di Richardson . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 Metodo del gradiente precondizionato . . . . . . . . . . 14
3.1.2 Metodo del gradiente coniugato precondizionato . . . . 15
3.1.3 Test d’arresto . . . . . . . . . . . . . . . . . . . . . . . 16

4 Memorizzazione di matrici sparse 17


4.1 Alcuni comandi per matrici sparse . . . . . . . . . . . . . . . . 18

5 Sistemi tridiagonali 19

6 Metodo di Newton 21
6.1 Metodo di Newton inesatto . . . . . . . . . . . . . . . . . . . 22

7 Esponenziale di matrice 23
7.1 Formula delle variazioni delle costanti . . . . . . . . . . . . . 23
7.2 Calcolo di exp(A) . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.2.1 Matrici piene, di modeste dimensioni . . . . . . . . . . 24
7.2.2 Matrici sparse, di grandi dimensioni . . . . . . . . . . . 26

8 Esercizi 28

3
4 INDICE

1 BVPs 30
9 Introduzione 31

10 Differenze finite 32
10.1 Differenze finite centrate del secondo ordine . . . . . . . . . . 32
10.2 Convergenza per un problema modello . . . . . . . . . . . . . 35
10.2.1 Unicità . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
10.2.2 Esistenza . . . . . . . . . . . . . . . . . . . . . . . . . 36
10.2.3 Regolarità . . . . . . . . . . . . . . . . . . . . . . . . . 36
10.2.4 Esistenza ed unicità per il problema discretizzato . . . 37
10.2.5 Consistenza . . . . . . . . . . . . . . . . . . . . . . . . 38
10.2.6 Proprietà di A . . . . . . . . . . . . . . . . . . . . . . . 38
10.2.7 Stabilità . . . . . . . . . . . . . . . . . . . . . . . . . . 38
10.2.8 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . 39
10.3 Altre differenze finite . . . . . . . . . . . . . . . . . . . . . . . 40
10.3.1 Su nodi non equispaziati . . . . . . . . . . . . . . . . . 40
10.3.2 Non centrate . . . . . . . . . . . . . . . . . . . . . . . 41
10.3.3 Di ordine più elevato . . . . . . . . . . . . . . . . . . . 41
10.4 Condizioni al bordo . . . . . . . . . . . . . . . . . . . . . . . . 41
10.4.1 Condizioni di Dirichlet . . . . . . . . . . . . . . . . . . 41
10.4.2 Condizioni di Neumann . . . . . . . . . . . . . . . . . 42
10.4.3 Importanza delle condizioni al bordo . . . . . . . . . . 43
10.5 Un esempio: l’equazione della catenaria . . . . . . . . . . . . . 44
10.5.1 Iterazioni di punto fisso . . . . . . . . . . . . . . . . . . 45
10.5.2 Metodo di Newton . . . . . . . . . . . . . . . . . . . . 45
10.6 Norme ed errori . . . . . . . . . . . . . . . . . . . . . . . . . . 46

11 Metodo di shooting 48
11.1 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . 48
11.2 Metodo di Newton . . . . . . . . . . . . . . . . . . . . . . . . 49
11.3 Problema ai limiti con frontiera libera . . . . . . . . . . . . . . 50

12 Equazione di Poisson 52
12.1 Equazione di Poisson bidimensionale . . . . . . . . . . . . . . 52
12.1.1 Condizioni al bordo di Dirichlet . . . . . . . . . . . . . 52
12.1.2 Condizioni al bordo miste . . . . . . . . . . . . . . . . 54

13 Metodi variazionali 56
13.1 Un problema modello . . . . . . . . . . . . . . . . . . . . . . . 56
13.1.1 Metodo di approssimazione variazionale . . . . . . . . . 58
INDICE 5

13.1.2 Estensione al caso bidimensionale . . . . . . . . . . . . 66


13.2 Metodi spettrali . . . . . . . . . . . . . . . . . . . . . . . . . . 66
13.2.1 Trasformata di Fourier . . . . . . . . . . . . . . . . . . 68
13.2.2 Trasformata di Fourier discreta . . . . . . . . . . . . . 69
13.3 Metodi di collocazione . . . . . . . . . . . . . . . . . . . . . . 76
13.3.1 Condizioni al bordo . . . . . . . . . . . . . . . . . . . . 77

14 Esercizi 81

2 ODEs 83
15 Introduzione 84
15.1 Riduzione in forma autonoma . . . . . . . . . . . . . . . . . . 85
15.2 Equazioni di ordine superiore al primo . . . . . . . . . . . . . 85

16 Metodi ad un passo 86
16.1 Metodo di Eulero . . . . . . . . . . . . . . . . . . . . . . . . . 86
16.2 Metodo dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . 88
16.3 theta-metodo . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
16.3.1 Risoluzione di un metodo implicito . . . . . . . . . . . 92
16.3.2 Newton inesatto e passo variabile . . . . . . . . . . . . 94
16.3.3 Caso lineare . . . . . . . . . . . . . . . . . . . . . . . . 95
16.4 Verifica dell’implementazione . . . . . . . . . . . . . . . . . . . 95

17 Metodi multistep 97
17.1 Metodi di Adams-Bashforth . . . . . . . . . . . . . . . . . . . 97
17.2 Metodi lineari multistep . . . . . . . . . . . . . . . . . . . . . 99
17.2.1 Metodi BDF . . . . . . . . . . . . . . . . . . . . . . . . 101
17.3 Consistenza e stabilità . . . . . . . . . . . . . . . . . . . . . . 103
17.4 Influenza degli errori di arrotondamento . . . . . . . . . . . . 108

18 Metodi di Runge-Kutta 110


18.1 Metodi di Runge–Kutta espliciti . . . . . . . . . . . . . . . . . 110
18.2 Un esempio di metodo di Runge–Kutta implicito . . . . . . . . 115
18.3 Metodi di Runge-Kutta embedded . . . . . . . . . . . . . . . . 118

19 A-stabilità 122
19.1 A-stabilità dei metodi di Runge-Kutta espliciti . . . . . . . . . 124
19.2 A-stabilità dei metodi lineari multistep . . . . . . . . . . . . . 126
19.3 Equazioni stiff . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
19.3.1 Risoluzione di un metodo implicito per problemi stiff . 129
6 INDICE

20 Integratori esponenziali 130

21 Esercizi 133

3 PDEs 136
22 Equazioni ADR 137
22.1 Equazione del calore . . . . . . . . . . . . . . . . . . . . . . . 137
22.1.1 Esistenza di una soluzione . . . . . . . . . . . . . . . . 137
22.1.2 Unicità della soluzione . . . . . . . . . . . . . . . . . . 140
22.2 Metodo di Fourier . . . . . . . . . . . . . . . . . . . . . . . . . 141
22.3 Metodo delle linee . . . . . . . . . . . . . . . . . . . . . . . . . 142
22.3.1 Differenze finite . . . . . . . . . . . . . . . . . . . . . . 143
22.3.2 Condizioni al bordo di Dirichlet . . . . . . . . . . . . . 144
22.3.3 Condizioni al bordo di Neumann (costanti) . . . . . . . 145
22.4 Equazione di trasporto-diffusione . . . . . . . . . . . . . . . . 145
22.4.1 Stabilizzazione mediante diffusione artificiale . . . . . . 147
22.4.2 Elementi finiti . . . . . . . . . . . . . . . . . . . . . . . 150
22.4.3 Errori spaziali e temporali . . . . . . . . . . . . . . . . 151
22.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

4 Temi d’esame 154

5 Bibliografia 166
Bibliografia 167
Parte 0

Preliminari

7
Capitolo 1

Interpolazione polinomiale a
tratti

Data una funzione f : [a, b] → R e un’insieme {xi }m


i=1 ⊂ [a, b] di nodi ordinati
(xi−1 < xi ), consideriamo l’interpolante polinomiale a tratti pck−1 f di grado
k − 1. Su ogni intervallo [xi , xi+1 ] di lunghezza hi = xi+1 − xi essa è il
polinomio di grado k − 1
ai,1 (x − xi )k−1 + ai,2 (x − xi )k−2 + . . . + ai,k−1 (x − xi ) + ai,k . (1.1)
Dunque, l’interpolante polinomiale a tratti è completamente nota una volta
noti i nodi e i coefficienti di ogni polinomio.
In GNU Octave, l’interpolante polinomiale a tratti è definita mediante
una struttura solitamente chiamata pp (piecewise polynomial) che si costrui-
sce con il comando mkpp(x,P), ove x è il vettore di nodi e P è la matrice, con
riferimento a (1.1),
Pij = ai,j .
Nota una struttura pp, è possibile valutare il valore dell’interpolante in un
generico target x̄ con il comando ppval(pp,xbar).

1.1 Interpolazione lineare a tratti


Dati i vettori [x1 , . . . , xm ]T e [f1 , . . . , fm ]T , nell’intervallo [xi , xi+1 ] l’interpo-
lante lineare a tratti coincide con il polinomio di grado uno
fi+1 − fi
(x − xi ) + fi
hi
Pertanto, si costruisce la corrispondente struttura pp con il comando
> pp = mkpp(x,[(f(2:m)-f(1:m-1))./h,f(1:m-1)])

8
1.1. INTERPOLAZIONE LINEARE A TRATTI 9

1.1.1 Errore di interpolazione


Il risultato fondamentale sull’errore di interpolazione è

f (n) (ξ)
f (x) − pn−1 f (x) = (x − x1 ) · (x − x2 ) · . . . · (x − xn )
n!
ove pn−1 f è il polinomio di grado n − 1 interpolatore di f sui nodi {xi }ni=1 e ξ
un opportuno punto nell’involucro convesso di x ∪ {xi }ni=1 . Per l’interpolante
lineare a tratti pc1 f , si ha dunque per x ∈ [xi , xi+1 ]

f ′′ (ξ)
f (x) − pc1 f (x) = (x − xi )(x − xi+1 ) (1.2)
2
e pertanto

f ′′ (ξ) h2
|f (x) − pc1 f (x)| ≤ max , x ∈ [xi , xi+1 ]
ξ∈[xi ,xi+1 ] 2 4

((x − xi )(xi+1 − x) è una parabola rivolta verso il basso di vertice (xi +


h/2, h2 /4)) da cui
h2
kf − pc1 f k∞ ≤ kf ′′ k∞
8
Derivando rispetto a x l’equazione (1.2), si ottiene

f ′′ (ξ)
f ′ (x) − (pc1 f )′ (x) = [(x − xi+1 ) + (x − xi )]
2
e pertanto

f ′′ (ξ)
|f ′ (x) − (pc1 f )′ (x)| ≤ max 2h, x ∈ [xi , xi+1 ]
ξ∈[xi ,xi+1 ] 2

da cui
kf ′ − (pc1 f )′ k∞ ≤ hkf ′′ k∞
Capitolo 2

Formule di quadratura
gaussiana

Dato un intervallo (a, b) (eventualmente anche non limitato) e una funzione


peso w(x) non negativa su (a, b), si considera il prodotto scalare
Z b
(f, g) = f (x)g(x)w(x)dx
a

con l’ipotesi
Z b
|x|k w(x)dx < ∞, k≥0
a

Allora, esiste un’unica famiglia {pj (x)}j , pj (x) polinomio di grado j, orto-
normale rispetto al prodotto scalare
Z b
pj (x)pi (x)w(x)dx = δij
a

Gli zeri {xn }m


n=1 del polinomio pm (x) sono interni all’intervallo (a, b) e assieme
ai pesi
Z b
wn = Ln (x)w(x)dx, 1 ≤ n ≤ m
a

ove Ln (x) è il polinomio di Lagrange che vale 1 in xn e zero in tutti gli altri
nodi, costituiscono una formula di quadratura gaussiana esatta fino al grado
polinomiale 2m − 1, cioè
Z b m
X
pj (x)w(x)dx = pj (xn )wn , 0 ≤ j ≤ 2m − 1
a n=1

10
2.1. QUADRATURA GAUSSIANA DI CHEBYSHEV(-LOBATTO) 11

In particolare
Z b m
X
δij = pj (x)pi (x)w(x)dx = pj (xn )pi (xn )wn , 0 ≤ i, j ≤ m − 1
a n=1

Nel caso in cui (a, b) sia limitato, esiste un’unica formula di quadratura esatta
fino al grado polinomiale 2m − 3 che usa come nodi x̄1 = a, x̄m = b e gli zeri
m−1
{x̄n }n=2 del polinomio di grado m − 2 della famiglia di polinomi ortogonali
rispetto alla funzione peso w(x)(x − a)(b − x). In questo caso si ha, in
particolare,
Z b m
X 0≤i≤m−3
δij = pj (x)pi (x)w(x)dx = pj (x̄n )pi (x̄n )w̄n ,
a n=1
0≤j ≤m−1
p
La famiglia {φj (x)}m
j=1 , ove φj (x) = pj−1 (x) w(x) è ovviamente ortonormale
rispetto al prodotto scalare
Z b
(f, g) = f (x)g(x)dx
a

e per essa valgono le osservazioni fatte sopra riguardo al calcolo degli integrali.

2.1 Quadratura gaussiana di Chebyshev e di


Chebyshev–Lobatto
Per integrali del tipo Z 1
f (x)
√ dx
−1 1 − x2
i polinomi ortogonali da considerare sono quelli di Chebyshev

pj (x) = Tj (x) = cos(j arccos(x))

che soddisfano la relazione di ricorrenza


T0 (x) = 1, T1 (x) = 1
Tj+1 (x) = 2xTj (x) − Tj−1 (x), j≥1

Gli zeri del polinomio di grado m soddisfano


π
m arccos(x) = + (n − 1)π, 1≤n≤m
2
12 CAPITOLO 2. FORMULE DI QUADRATURA GAUSSIANA

(gli angoli devono essere compresi tra 0 e mπ) da cui


µπ ¶ µ ¶
2
+ (n − 1)π π (2n − 1)π
xn = cos = sin − , 1≤n≤m
m 2 2m

(la seconda formula produce nodi anche numericamente simmetrici) e i cor-


rispondenti pesi di quadratura sono costanti e valgono
π
wn = , 1≤n≤m
m
I nodi di (Gauss–)Chebyshev–Lobatto sono invece
µ ¶ µ ¶
(n − 1)π π (n − 1)π
x̄n = cos = sin − , 1≤n≤m
m−1 2 m−1

e i corrispondenti pesi
 π

 per n = 1 o n = m
2(m − 1)
w̄n = π

 per 2 ≤ n ≤ m − 1
m−1
Capitolo 3

Metodi iterativi per sistemi di


equazioni lineari

I metodi iterativi per la soluzione del sistema lineare

Ax = b (3.1)

si basano sull’idea di calcolare la soluzione come limite di una successione di


vettori
x = lim x(l) .
l→∞

Una strategia generale per costruire la successione {x(l) }l è basata sullo split-
ting A = P − M , ove P è non singolare. Assegnato x(1) , il termine x(l+1) è
calcolato ricorsivamente come

P x(l+1) = M x(l) + b, l≥1 (3.2)

Posto e(l) = x − x(l) , si ha

e(l) = Bel−1 , B = P −1 M = I − P −1 A ,

ove B è chiamata matrice di iterazione.


Lemma 1. Si ha liml→∞ e(l) = 0 per ogni e(1) se e solo se liml→∞ B l = 0,
cioè se e solo se ρ(B) < 1.

3.1 Metodi di Richardson


Indicato con r(l) il residuo

r(l) = b − Ax(l) = Ax − Ax(l) = A(x − x(l) ) = Ae(l) ,

13
14 CAPITOLO 3. METODI ITERATIVI PER SISTEMI LINEARI

il metodo (3.2) può essere riscritto come

P (x(l+1) − x(l) ) = r(l) . (3.3)

In questo contesto, P viene chiamata matrice di precondizionamento o pre-


condizionatore di A e viene scelta in modo che la matrice di iterazione
B = I − P −1 A abbia un raggio spettrale minore di 1 e la risoluzione di
(3.3) sia “facile”.
Una generalizzazione dello schema (3.3) è il metodo di Richardson: dato
x(1) , x(l+1) è calcolato ricorsivamente come

P (x(l+1) − x(l) ) = αr(l) ,

ove α è un opportuno parametro di accelerazione. Dati x(1) e r(1) = b−Ax(1) ,


l’algoritmo per calcolare x(l+1) è

P z (l) = r(l)
x(l+1) = x(l) + αz (l) (3.4)
r(l+1) = r(l) − αAz (l)

Il costo di un’iterazione è dato essenzialmente dalla risoluzione di un sistema


lineare P z (l) = r(l) facile e dal prodotto matrice-vettore Az (l) . Tali metodi
risulteranno particolarmente vantaggiosi per matrici sparse, in cui il numero
di elementi diversi da zero è O(N ) piuttosto che O(N 2 ) (e dunque il costo
di un prodotto matrice-vettore è O(N )), se l’ordine della matrice è N .
Il calcolo del residuo r(l+1) = r(l) − αAz (l) (invece di r(l+1) = b − Ax(l+1) )
permette di ridurre la propagazione, attraverso il prodotto matrice-vettore,
degli errori, in quanto il vettore z (l) , contrariamente a x(l+1) , diminuisce in
modulo al crescere di l.

3.1.1 Metodo del gradiente precondizionato


Siano A e P simmetriche e definite positive. Il metodo di Richardson può
essere generalizzato con una scelta dinamica del parametro di accelerazione,
prendendo α = αl in modo tale che
p
kx − x(l+1) kA , kykA = y T Ay

sia minima. Si ha
kx − x(l+1) k2A = (x − x(l) − αl z (l) )T A(x − x(l) − αl z (l) ) =
T T
= αl2 z (l) Az (l) − 2αl z (l) A(x − x(l) ) + (x − x(l) )T A(x − x(l) )
3.1. METODI DI RICHARDSON 15

e dunque il minimo è dato dalla scelta


T
z (l) r(l)
αl = T
.
z (l) Az (l)
Il metodo ottenuto si chiama metodo del gradiente precondizionato. Dati x(1)
e r(1) , l’algoritmo per calcolare x(l+1) è

P z (l) = r(l)
T
z (l) r(l)
αl = T
z (l) Az (l) (3.5)
(l+1)
x = x(l) + αl z (l)
r(l+1) = r(l) − αl Az (l)

Nel caso si scelga P = I, si ottiene il metodo del gradiente (noto anche come
steepest descent).

3.1.2 Metodo del gradiente coniugato precondizionato


Siano A e P simmetriche e definite positive. Il metodo del gradiente coniugato
precondizionato è una generalizzazione del metodo di Richardson in cui

x(l+1) = x(l) + αl p(l)

ove i {p(l) }l sono coniugati, cioè soddisfano


T
p(i) Ap(j) = 0, i 6= j

Per soddisfare questa proprietà è necessaria l’introduzione di un ulteriore


parametro βl . Dati x(1) , r(1) , P z (1) = r(1) e p(1) = z (1) , l’algoritmo per
calcolare x(l+1) è
T
z (l) r(l)
αl = T
p(l) Ap(l)
x(l+1) = x(l) + αl p(l)
r(l+1) = r(l) − αl Ap(l)
(3.6)
P z (l+1) = r(l+1)
T
z (l+1) r(l+1)
βl+1 = T
z (l) r(l)
p(l+1) =z (l+1)
+ βl+1 p(l)
16 CAPITOLO 3. METODI ITERATIVI PER SISTEMI LINEARI

Teorema 1. Il metodo del gradiente coniugato applicato ad una matrice di


ordine N converge in al più N iterazioni (in aritmetica esatta).
Dimostrazione. La dimostrazione (omessa) si basa essenzialmente sul fatto
che p(1) , . . . , p(N ) sono vettori linearmente indipendenti e non ce ne possono
essere più di N .
Per questo motivo, tale metodo è detto semiiterativo.

Stima dell’errore
Vale la seguente stima dell’errore:
Ãp !l−1
cond (P −1 A) − 1
2
ke(l) kA ≤ 2 p ke(1) kA
−1
cond2 (P A) + 1

dalle quale si osserva che


• la stima d’errore decresce in ogni caso, poiché il numeratore è più
piccolo del denominatore;

• in particolare, nel caso P = I;

• tanto più è piccolo il numero di condizionamento di P −1 A, tanto più il


metodo ha convergenza veloce;

• nel caso limite di P = A, si ha ke(l) kA ≤ 0.

3.1.3 Test d’arresto


Un primo stimatore è costituito dal residuo: si arresta cioè il metodo iterativo
quando
kr(l) k ≤ tol · kbk
Infatti, dalla precedente si ricava

ke(l) k
≤ tol · cond(A)
kxk
Una modifica consiste in

kr(l) k ≤ tol · kr(1) k (3.7)

che coincide con il precedente nel caso in cui come x(1) venga scelto il vettore
di zeri.
Capitolo 4

Memorizzazione di matrici
sparse

Sia A una matrice sparsa di ordine N con m elementi diversi da zero. Esistono
molti formati di memorizzazione di matrici sparse. Quello usato da GNU
Octave è il Compressed Column Storage (CCS). Consiste di tre array: un
primo, data, di lunghezza m contenente gli elementi diversi da zero della
matrice, ordinati prima per colonna e poi per riga; un secondo, ridx, di
lunghezza m contenente gli indici di riga degli elementi di data; ed un terzo,
cidx, di lunghezza N + 1, il cui elemento i-esimo (i < N + 1) è la posizione
dentro data del primo elemento della colonna i e l’elemento (N +1)-esimo è il
numero totale di elementi diversi da zero incrementato di uno. Per esempio,
alla matrice  
1 0 0 0
0 2 3 0
A= 4 0 5 6

0 0 0 7
corrispondono i vettori

data = [1, 4, 2, 3, 5, 6, 7]
ridx = [1, 3, 2, 2, 3, 3, 4]
cidx = [1, 3, 4, 6, 8]

Talvolta, soprattutto in linguaggi di calcolo con array che iniziano dall’indice


0, gli array ridx e cidx hanno elementi decrementati di uno.
In GNU Octave, il formato CCS e l’implementazione del prodotto matri-
ce-vettore sono automaticamente usati dalla function sparse e dall’operato-
re *, rispettivamente.

17
18 CAPITOLO 4. MEMORIZZAZIONE DI MATRICI SPARSE

4.1 Alcuni comandi per matrici sparse


• Il comando speye(N) genera la matrice identità di ordine N .

• Il comando spdiags(v,0,N,N), ove v è un vettore colonna, genera la


matrice diagonale di ordine n avente v in diagonale. Se la dimensione
di v è minore di n, la diagonale viene riempita con zeri posti dopo il
vettore v. Se invece la dimensione di v è maggiore di N , vengono usate
solo le prime N componenti di v.
Sia V la matrice  
v11 v12 v13
 v21 v22 v23 
 
V =  .. .. .. 
 . . . 
vN 1 vN 2 vN 3
Il comando spdiags(V,-1:1,N,N) genera la matrice
 
v12 v23 0 0 ... 0
v11 v22 v33 0 ... 0 
 .. 
 ... ... 
 0 v 21 v 32 . 
 . . .. 
 .. .. ... ... ...
. 
 
 0 . . . 0 vN −2 1 vN −1 2 vN 3 
0 ... ... 0 vN −1 1 vN 2
Capitolo 5

Sistemi tridiagonali

La risoluzione di sistemi tridiagonali


Ax = b
con  
a1 c1 0 . . . ... 0
 b1 a2 c 2 0 ... 0 
 
 ... ... ... ... .. 
0 . 
A=
 ... ... ... ... ... .. 
 . 

0 ... ... 
bn−2 an−1 cn−1 
0 ... ... 0 bn−1 an
risulta particolarmente economica. Infatti, nel caso non sia necessario il
pivoting, si ha A = LU , ove
   
1 0 ... ... 0 α1 c1 0 ... 0
β1 1 0 . . . 0  0 α2 c2 . . . 0 
 .  . .. 
... ... ... . ... ... ...
.  , U =  ..
  
L=0 . 
. .
. . . . . . . . ...   0 . . . . . . αn−1 cn−1 
  
 ..
0 . . . 0 βn−1 1 0 ... ... 0 αn
con (
α1 = a1
βk−1 = bk−1 /αk−1 , αk = ak − βk−1 ck−1 , k = 2, 3, . . . , n
e dunque la fattorizzazione LU costa O(2n) flops. A questo punto si risolvono
i due sistemi Ly = b e U x = y, mediante
(
y1 = b1
yk = bk − βk−1 yk−1 , k = 2, 3, . . . n

19
20 CAPITOLO 5. SISTEMI TRIDIAGONALI

e (
xn = yn /αn
xk = (yk − ck xk+1 )/αk , k = n − 1, n − 2, . . . 1
con un ulteriore costo O(2n) flops. GNU Octave usa automaticamente questo
algoritmo per le matrici tridiagonali.
Capitolo 6

Metodo di Newton per sistemi


di equazioni non lineari

Consideriamo il sistema di equazioni non lineari




 f1 (x1 , x2 , . . . , xN ) = 0


 f2 (x1 , x2 , . . . , xN ) = 0
..


 .


fN (x1 , x2 , . . . , xN ) = 0

che può essere riscritto, in forma compatta,

f (x) = 0 .

Dato x(1) , il metodo di Newton per calcolare x(r+1) è

J (r) δx(r) = −f (x(r) )


(6.1)
x(r+1) = x(r) + δx(r)

ove J (r) è la matrice Jacobiana, definita da

(r) ∂fi (x(r) )


Jij = (r)
. (6.2)
∂xj

Il criterio d’arresto solitamente usato è

kδx(r) k ≤ tol

In Matlab/Octave l’implementazione potrebbe essere:

21
22 CAPITOLO 6. METODO DI NEWTON

f = @(x) ... % f
J = @(x) ... % jacobiano di f
x0 = ... % guess iniziale
x = x0;
errest = -J(x) \ f(x);
while (norm(errest,inf) > Newt_tol)
x = x + errest;
errest = -J(x) \ f(x);
end

6.1 Metodo di Newton inesatto


Il metodo di Newton (6.1) richiede il calcolo della matrice Jacobiana e la sua
“inversione” ad ogni passo k. Questo potrebbe essere troppo oneroso (O(N 3 )
per un metodo diretto). Una strategia per ridurre il costo computazionale è
usare sempre la stessa matrice Jacobiana J (1) , oppure aggiornarla solo dopo
un certo numero di iterazioni, oppure ancora usarne una sua approssimazione
costante. In tal modo, per esempio, è possibile usare la stessa fattorizzazione
L(r) U (r) per più iterazioni successive e usarla per risolvere i sistemi lineari
(di costo O(N 2 )).
Capitolo 7

Esponenziale di matrice

Data una matrice quadrata A ∈ RN ×N , si definisce



X Aj
exp(A) =
j=0
j!

Tale serie converge per qualunque matrice A, essendo A un operatore lineare


tra spazi di Banach e avendo la serie esponenziale raggio di convergenza ∞.
Se A e B sono permutabili (cioè AB = BA), allora

exp(A + B) = exp(A) exp(B)

7.1 Formula delle variazioni delle costanti


Data l’equazione differenziale
(
y ′ (t) = ay(t) + b(t, y(t)), t>0
(7.1)
y(t0 ) = y0

y(t) ∈ R, la soluzione può essere scritta analiticamente mediante la formula


delle variazioni delle costanti
Z t
(t−t0 )a
y(t) = e y0 + e(t−τ )a b(τ, y(τ ))dτ (7.2)
t0

Infatti, si ha
Z t
′ (t−t0 )a
y (t) = ae y0 +a e(t−τ )a b(τ, y(τ ))dτ +e(t−t)a b(t, y(t)) = ay(t)+b(t, y(t))
t0

23
24 CAPITOLO 7. ESPONENZIALE DI MATRICE

Si osservi che
Z t Z t
¯t
(t−τ )a 1 (t−τ )a 1 (t−τ )a ¯¯
e dτ = − −ae dτ = − e ¯ =
t0 a t0 a t0
(t−t )a
1¡ ¢ e 0
−1
= − 1 − e(t−t0 )a = (t − t0 ) =
a (t − t0 )a
= (t − t0 )ϕ1 ((t − t0 )a) ,
ove

ez − 1 X z j
ϕ1 (z) = = (7.3)
z j=0
(j + 1)!

e, analogamente,
Z t
e(t−τ )a (τ − t0 )dτ = (t − t0 )2 ϕ2 ((t − t0 )a)
t0

ove

ez − 1 − z X z j
ϕ2 (z) = = (7.4)
z2 j=0
(j + 2)!

Consideriamo ora un sistema differenziale


(
y ′ (t) = Ay(t) + b(t, y(t)), t>0
y(t0 ) = y 0

Ancora, la soluzione esplicita può essere scritta come


Z t
y(t) = exp((t − t0 )A)y 0 + exp((t − τ )A)b(τ, y(τ ))dτ
t0

7.2 Calcolo di exp(A)


Come per la risoluzione di sistemi lineari, non esiste il modo per calcolare
exp(A), ma diversi modi, ognuno adatto a particolari situazioni.

7.2.1 Matrici piene, di modeste dimensioni


Questi metodi si applicano, in pratica, a quelle matrici per le quali si usano
i metodi diretti per la risoluzione di sistemi lineari.
7.2. CALCOLO DI EXP(A) 25

Decomposizione spettrale Se la matrice è diagonalizzabile, cioè A =


V DV −1 , allora exp(A) = V exp(D)V −1 , ove exp(D) è la matrice diagonale
con elementi ed1 , ed2 , . . . , edN . Basta infatti osservare che

A2 = (V DV −1 )2 = (V DV −1 )(V DV −1 ) = V D2 V −1

e scrivere exp(A) come serie di Taylor. La decomposizione spettrale di una


matrice costa, in generale, O(N 3 ). Si ottiene in GNU Octave con il comando
eig.

Approssimazione razionale di Padé Si considera un’approssimazione


razionale della funzione esponenziale

z a1 z p−1 + a2 z p−2 + . . . + ap
e ≈ , (7.5)
b1 z q−1 + b2 z q−2 + . . . + bq
ove bq = 1 per convenzione. Essa è chiamata diagonale quando p = q. Si
può dimostrare che le approssimazioni diagonali sono le più efficienti. Fissato
il grado di approssimazione, si sviluppa in serie di Taylor la funzione espo-
nenziale e si fanno coincidere quanti più coefficienti possibile. Per esempio,
fissiamo p = q = 2. Si ha allora
µ ¶
z2 z3
1+z+ + + . . . (b1 z + 1) = a1 z + a2
2 6
z2
b1 z + 1 + b1 z 2 + z + + o(z 2 ) = a1 z + a2
2
da cui 

 1 = a2

b 1 + 1 = a1
 b1 + 1 = 0


2
L’approssimazione di Padé si estende banalmente al caso matriciale. Consi-
derando sempre il caso p = q = 2, si ha

exp(A) ≈ B = (b1 A + I)−1 (a1 A + a2 I) ,

cioè B è soluzione del sistema lineare (b1 A + I)B = a1 A + a2 I.


L’approssimazione di Padé è accurata solo quando |z| < 1/2 (o, nel caso
matriciale, kAk2 < 1/2). Per la funzione esponenziale esiste una tecnica,
chiamata scaling and squaring che permette di aggirare il problema. Si usa
infatti la proprietà
¡ ¢2 ³ ´j
j 2
ez = ez/2 = ez/2
26 CAPITOLO 7. ESPONENZIALE DI MATRICE

Se |z| > 1/2, allora |z|/2j < 1/2 per j > log2 (|z|) + 1. Si calcola dunque
j
l’approssimazione di Padé di ez/2 e poi si eleva al quadrato j volte. Per la
funzione ϕ1 vale
1 ³z ´
ϕ1 (z) = (ez/2 + 1)ϕ1
2 2
Anche l’approssimazione di Padé matriciale ha costo O(N 3 ). In GNU Octave
si usa una variante di questa tecnica nel comando expm.

7.2.2 Matrici sparse, di grandi dimensioni


I metodi visti nel paragrafo precedente ignorano l’eventuale sparsità delle
matrici. Inoltre, negli integratori esponenziali, non è mai richiesto di calcolare
esplicitamente funzioni di matrice, ma solo funzioni di matrice applicate a
vettori, cioè exp(A)v (è l’analoga differenza tra calcolare A−1 e A−1 v). Si
possono allora usare dei metodi iterativi.

Metodo di Krylov Mediante la tecnica di Arnoldi è possibile, tramite


prodotti matrice-vettore, decomporre A in VmT AVm = Hm , ove Vm ∈ Rn×m ,
VmT Vm = In , Vm e1 = v e Hm è matrice di Hessenberg di ordine m (con
m ≪ n). Allora AVm ≈ Vm Hm e quindi

exp(A)Vm ≈ Vm exp(Hm ) ⇒ exp(A)v ≈ Vm exp(Hm )e1

Il calcolo di exp(Hm ) è fatto mediante l’approssimazione di Padé. Il costo


della tecnica di Arnoldi è O(nm2 ) se A è matrice sparsa. È necessario inoltre
memorizzare la matrice Vm .

Interpolazione su nodi di Leja Se il polinomio pm (z) interpola ez nei


nodi ξ0 , ξ1 , . . . , ξm , allora pm (A)v è una approssimazione di exp(A)v. È una
buona approssimazione se i nodi sono buoni (non equispaziati, per esempio)
e se sono contenuti nell’involucro convesso dello spettro di A. È difficile
stimare a priori il grado di interpolazione m necessario. È conveniente usare
la formula di interpolazione di Newton

pm−1 (z) = d1 + d2 (z − ξ1 ) + d3 (z − ξ1 )(z − ξ2 ) + · . . . · +dm (z − ξ1 ) · · · (z − ξm−1 )

ove {di }i sono le differenze divise. Tale formula si può scrivere, nel caso
matriciale,
Ãm−1 !
Y
pm−1 (A)v = pm−2 v + dm wm , wm = (A − ξi I) v = (A − ξm−1 )wm−1
i=1
7.2. CALCOLO DI EXP(A) 27

Dunque, la complessità è O(N m) è richiesta la memorizzazione di un solo


vettore w.
Quali nodi usare? I nodi di Chebyshev, molto buoni per l’interpolazione,
non possono essere usati, in quanto non permettono un uso efficiente della
formula di interpolazione di Newton (cambiano tutti al cambiare del grado).
I nodi di Leja sono distribuiti asintoticamente come i nodi di Chebyshev e,
dati i primi m − 1, ξm è il nodo per cui
m−1
Y m−1
Y
|ξm − ξi | = max |ξ − ξi | ,
ξ∈[a,b]
i=1 i=1

ove l’intervallo [a, b] è in relazione con lo spettro di A, per esempio [a, b] =


σ(A) ∩ {y = 0}. Il primo nodo coincide, solitamente, con l’estremo dell’in-
tervallo [a, b] di modulo massimo. È chiaro che l’insieme dei primi m nodi
di Leja coincide con l’unione di {ξm } con l’insieme dei primi m − 1 nodi di
Leja.
Capitolo 8

Esercizi

1. Implemetare le functions [data,ridx,cidx] = full2ccs(A) e [A] =


ccs2full(data,ridx,cidx) e le functions che, dati data, ridx e cidx,
implementano i prodotti matrice vettore Ax e AT x.

2. Si risolvano 6 sistemi lineari con le matrici di Hilbert di ordine N =


4, 6, 8, 10, 12, 14 (hilb(N)) e termine noto scelto in modo che la solu-
zione esatta sia il vettore [1, 1, . . . , 1]T usando il comando \ di GNU
Octave, il metodo del gradiente precondizionato e il metodo del gra-
diente coniugato precondizionato. Per questi ultimi due, si usi una
tolleranza pari a 10−6 , un numero massimo di iterazioni pari a 2000,
il precondizionatore diagonale e un vettore iniziale x(1) di zeri. Si ri-
porti, per ogni N , il numero di condizionamento della matrice, l’errore
in norma infinito rispetto alla soluzione esatta e il numero di iterazioni
dei metodi iterativi.

3. Risolvere il sistema non lineare


(
f1 (x1 , x2 ) = x21 + x22 − 1 = 0
f2 (x1 , x2 ) = sin(πx1 /2) + x32 = 0

con il metodo di Newton (6.1). Si usi una tolleranza pari a 10−6 , un


numero massimo di iterazioni pari a 150 e un vettore iniziale x(1) =
[1, 1]T . Si risolva lo stesso sistema non lineare usando sempre la matrice
Jacobiana relativa al primo passo e aggiornando la matrice Jacobiana
ogni r iterazioni, ove r è il più piccolo numero di iterazioni che permette
di ottenere la stessa soluzione con la tolleranza richiesta calcolando solo
due volte la matrice Jacobiana.

4. Si implementi una function [a,b] = padeexp(p) che restituisce i coef-

28
29

ficienti dell’approssimazione razionale di Padé (7.5) (con p = q) per la


funzione esponenziale.
Parte 1

BVPs
(Problemi ai limiti)

30
Capitolo 9

Introduzione

Consideriamo il seguente problema ai limiti (boundary value problem)


 ′′ ′
 u (x) = f (x, u(x), u (x)), x ∈ (a, b)

u(a) = ua (9.1)

 u(b) = u
b

ove u(x) ∈ R. Le condizioni ai bordi sono di Dirichlet quando viene prescritto


il valore della soluzione u(x) e di Neumann quando viene prescritto il valore
della derivata della soluzione u′ (x). Si possono avere anche condizioni miste,
ad esempio  ′′ ′
 u (x) = f (x, u(x), u (x)), x ∈ (a, b)

u(a) = ua

 u′ (b) = u′
b

Con un’unica notazione si può scrivere


 ′′ ′
 u (x) = f (x, u(x), u (x)),
 x ∈ (a, b)
αa u(a) + βa u′ (a) = γa

 α u(b) + β u′ (b) = γ
b b b

Quando i valori prescritti ai bordi sono nulli, si parla di condizioni omogenee.

31
Capitolo 10

Differenze finite

10.1 Differenze finite centrate del secondo or-


dine
Sia u ∈ C 3 ([a, b]) e xi = a + (i − 1)h, 1 ≤ i ≤ m, h = (b − a)/(m − 1).
Sviluppando in serie di Taylor (resto di Lagrange), si ha
h2 ′′ h3
u(xi+1 ) = u(xi ) + hu′ (xi ) + u (xi ) + u(3) (x̂i )
2 6
2 3
h h
u(xi−1 ) = u(xi ) − hu′ (xi ) + u′′ (xi ) − u(3) (x̃i )
2 6
da cui
u(xi+1 ) − u(xi−1 )
(1) (1)
u′ (xi ) = ∆u(xi ) − τi = − τi
2h
(1) 2
ove τi = h6 u(3) (x̄i ) è l’errore locale (u(3) (x̂i ) + u(3) (x̃i ) = 2u(3) (x̄i ), per
un opportuno x̄i , per il teorema dei valori intermedi). Analogamente, sia
u ∈ C 4 ([a, b]). Si ha
h2 ′′ h3 h4
u(xi+1 ) = u(xi ) + hu′ (xi ) + u (xi ) + u(3) (xi ) + u(4) (x̂i )
2 6 24
2 3
′ h ′′ h (3) h4 (4)
u(xi−1 ) = u(xi ) − hu (xi ) + u (xi ) − u (xi ) + u (x̃i )
2 6 24
da cui
(2) u(xi+1 ) − 2u(xi ) + u(xi−1 ) (2)
u′′ (xi ) = ∆2 u(xi ) − τi = − τi (10.1)
h2
(2) 2
ove τi = h12 u(4) (x̄i ). Queste approssimazioni della derivata prima e seconda
di chiamano differenze finite centrate del secondo ordine. Il termine “cen-
trate” si riferisce al fatto che i punti xi sono equispaziati e si usano i valori

32
10.1. DIFFERENZE FINITE CENTRATE DEL SECONDO ORDINE 33

della funzione u(x) in uno stesso numero di punti a sinistra e a destra di xi


per ricavare un’approssimazione delle derivate. Il termine “secondo ordine”
si riferisce al fatto che l’errore locale è proporzionale alla seconda potenza del
passo di discretizzazione h. Ovviamente sono possibili altri tipi di approssi-
mazione, basati su nodi non equispaziati, non centrate e di ordine diverso.

10
errore derivata se onda
stima errore derivata se onda diff12.m
errore derivata prima
stima errore derivata prima

1
errore in norma innito

0.1

0.01
10 20 50 100
m

Figura 10.1: Errori nell’approssimazione delle derivate prima e seconda per


la funzione u(x) = sin(3x).

In Figura 10.1 si vedono gli errori (in norma infinito) tra la derivata
prima e seconda della funzione u(x) = sin(3x) e la relativa approssimazione
mediante differenze finite centrate del secondo ordine (asterischi) e le stime
h2 /6 · ku(3) k∞ e h2 /12 · ku(4) k∞ (linea continua), rispettivamente, ove h =
2π/(m − 1). In Figura 10.2 si vede invece che per la funzione u(x) = |x|7/2 ,
l’approssimazione della derivata prima mediante differenze finite centrate ha
effettivamente ordine due, mentre quella della derivata seconda no, in quanto
non esiste la derivata quarta di u(x) (h = 2/(m − 1)).
Una volta scelto il tipo di discretizzazione, invece del problema originale
(9.1) si risolve il problema discretizzato
 2
 ∆ ui = f (xi , ui , ∆ui ),
 2≤i≤m−1
u 1 = ua

u = u
m b
34 CAPITOLO 10. DIFFERENZE FINITE

1
diff12ns.m errore derivata se onda
errore derivata prima
h2

0.1
errore in norma innito

0.01

0.001

10 20 50 100
m

Figura 10.2: Errori nell’approssimazione delle derivate prima e seconda per


la funzione u(x) = |x|7/2 .

nell’incognita u = [u1 , u2 , . . . , um−1 , um ]T , ove


ui+1 − ui−1
∆ui =
2h
u i+1 − 2ui + ui−1
∆2 u i =
h2
Si tratta dunque di risolvere un sistema di m equazioni (in generale) non
lineari nelle incognite ui , 1 ≤ i ≤ m.
In forma matriciale,
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
2 3 2 3
∆u1 ∆2 u 1
2 3 2 3
6−1 0 1 0 ... 07 61 −2 1 0 ... 07
6 ∆u2 7 6 7 6 ∆2 u 2 7 6 7
6 ∆u3 7 .7 6 ∆2 u 3 7 .7
.. 7 .. 7
6 7 6 6 7 6
1 6
6 0 −1 0 1 0 1 6
60 1 −2 1 0
. 7= 7, .. 7= 2 6
6 7 7 6 7 7
. 2h 6 .. .. .. .. .. h 6 .. .. .. .. ..
6 6 6 7
6 . 7
6 . . . . .
7 6 . 7
. . . .
7
6
4∆u
7
5 6 07 7
6
4∆2 u
7
5
6.
6 07 7
m−1 4 0 m−1
... 0 −1 0 15 40 ... 0 1 −2 15
∆um ∆2 u m
∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗

ove la prima e l’ultima riga devono essere trattate a parte, solitamente per
includere le condizioni al bordo. Le matrici relative alle approssimazione
della derivata prima e seconda possono essere costruite con i comandi
> toeplitz(sparse(1,2,-1/(2*h),1,m),sparse(1,2,1/(2*h),1,m));
e
> toeplitz(sparse([1,1],[1,2],[-2/h^2,1/h^2],1,m));
rispettivamente.
10.2. CONVERGENZA PER UN PROBLEMA MODELLO 35

10.2 Convergenza per un problema modello


Consideriamo il seguente problema modello (elasticità della trave)
 ′′
 −u (x) + q(x)u(x) = g(x),
 x ∈ (a, b)
u(a) = ua (10.2)

 u(b) = u
b

con q, g ∈ C 0 ([a, b]), q(x) ≥ 0 per x ∈ [a, b]. La funzione q(x) dipende dal
materiale di cui è fatta la trave e g(x) è la densità di carico trasversale. La so-
luzione u(x) rappresenta il momento flettente. Vogliamo studiare l’esistenza,
l’unicità e la regolarità della soluzione analitica.

10.2.1 Unicità
Se u1 (x) e u2 (x) sono due soluzioni di (10.2), allora z(x) = u1 (x) − u2 (x)
soddisfa il problema omogeneo
 ′′
 −z (x) + q(x)z(x) = 0,
 x ∈ (a, b)
z(a) = 0 (10.3)

 z(b) = 0

Proposizione 1. Se z(x) è soluzione di (10.3), allora z(x) ≡ 0.

Dimostrazione (metodo dell’energia). Moltiplicando l’equazione per z(x) ed


integrando si ha
Z b Z b
′′
0= −z (x)z(x)dx + q(x)z(x)2 dx =
a a
Z b Z b
′ b ′ 2
= [−z (x)z(x)]a + z (x) dx + q(x)z(x)2 dx =
a a
Z b Z b
= z ′ (x)2 dx + q(x)z(x)2 dx
a a

Poiché le funzioni integrande sono non negative, si ha che deve essere neces-
sariamente z(x) ≡ 0.

Dunque, u1 (x) ≡ u2 (x).


36 CAPITOLO 10. DIFFERENZE FINITE

10.2.2 Esistenza
Sia z(x) = c1 z1 (x) + c2 z2 (x) la soluzione generale di −z ′′ (x) + q(x)z(x) =
0, con z1 (x) e z2 (x) indipendenti (lo spazio delle soluzioni dell’equazione
lineare omogenea ha proprio dimensione due). La soluzione di (10.3) (che
corrisponde a c1 = c2 = 0) si ottiene imponendo
(
c1 z1 (a) + c2 z2 (a) = 0
c1 z1 (b) + c2 z2 (b) = 0

Poiché sappiamo che z(x) ≡ 0 è l’unica soluzione, si ha che la matrice


· ¸
z1 (a) z2 (a)
z1 (b) z2 (b)
è non singolare.
La soluzione generale di −u′′ (x) + q(x)u(x) = g(x) è u(x) = c1 z1 (x) +
c2 z2 (x) + s(x) (s(x) soluzione particolare che si ottiene dalla tecnica delle
variazioni delle costanti, cioè supponendo s(x) = c1 (x)z1 (x) + c2 (x)z2 (x),
c1 (x) e c2 (x) da ricavare). La soluzione di (10.2) si ottiene imponendo
(
c1 z1 (a) + c2 z2 (a) = ua − s(a)
c1 z1 (b) + c2 z2 (b) = ub − s(b)

cioè risolvendo un sistema lineare non singolare che ammette dunque (unica)
soluzione.

10.2.3 Regolarità
Proposizione 2. Se q, g ∈ C k ([a, b]), allora u ∈ C k+2 ([a, b]).

Dimostrazione. Se q, g ∈ C 0 ([a, b]), poiché la soluzione u esiste, u′′ è definita


in ogni punto x ∈ [a, b], e dunque u′ esiste (ed è derivabile). Quindi u ∈
C 0 ([a, b]) e quindi u′′ ∈ C 0 ([a, b]). Dunque u ∈ C 2 ([a, b]). Sia vero adesso
l’enunciato per k e siano q, g ∈ C k+1 ([a, b]): poiché anche u ∈ C k+1 ([a, b]), si
ha u′′ ∈ C k+1 ([a, b]) da cui u ∈ C k+3 ([a, b]).
Si è costretti a ridursi ad un problema modello perché problemi ai limiti
anche molto semplici possono non avere soluzione: si consideri, per esempio,
 ′′
 u (x) + u(x) = 0, x ∈ (0, π)

u(0) = 0

 u(π) = 1
10.2. CONVERGENZA PER UN PROBLEMA MODELLO 37

La soluzione generale è c1 cos(x) + c2 sin(x), ma non è possibile imporre le


condizioni al bordo.
Ci occupiamo adesso di analizzare la convergenza del problema modello
discretizzato mediante differenze finite centrate del secondo ordine, che si
scrive 
ui+1 − 2ui + ui−1
− + q i u i = gi , 2 ≤ i ≤ m − 1


h2
 u1 = u a


um = u b
ove qi = q(xi ) e gi = g(xi ).

10.2.4 Esistenza ed unicità per il problema discretiz-


zato
Il sistema lineare da risolvere per trovare u = [u1 , u2 , . . . , um−1 , um ]T è
    
1 0 ... ... ... 0 u1 ua /h2
−1 2 + q2 h2 −1 0 ... 0  u2   g2 
 
..     
  u3   g3 
1  0 −1 2 + q3 h2 −1 0 .    
  ..  =  .. 
h2  ... ... ... ... ...

 0  .   . 
   

 0 ... 0 −1 2 + qm−1 h2 −1 um−1   gm−1 
0 ... ... 0 0 1 um ub /h2

e può essere semplificato in

2 + q 2 h2 −1 0 ... ... 0
2 3
u2 g2 + ua /h2
2 3 2 3
.
..
6 7
6
6 −1 2 + q 3 h2 −1 0 ... 76 u 7 6
76 3 7 6 g3 7
7
76 . 7 6 .
.. .. .. ..
6
6 76 . 7 6 .
7
1 6 0 . . . . 0 76 . 7 6 .
7
=6
6 76 7
h2 6 .. .. .. .. 76 . 7 .
7
76 . 7 6 7 6 . 7
0 . . . . 0 76 . 7 6 .
6 7
6 7
.. 7 um−2 5 4 gm−2
6 74 5
6
4 . ... 0 −1 2 + qm−2 h2 −1 5
um−1 gm−1 + ub /h 2
0 ... ... 0 −1 2 + qm−1 h2

cioè
Au = g (10.4)

ove adesso u = [u2 , . . . , um−1 ]T .

Proposizione 3. Il sistema lineare (10.4) è non singolare e dunque ammette


un’unica soluzione.
38 CAPITOLO 10. DIFFERENZE FINITE

Dimostrazione (metodo dell’energia discreto). Dato z = [z2 , z3 , . . . , zm−1 ]T ,


consideriamo il prodotto z T Az. Si ha
1
z T Az = [(2 + q2 h2 )z22 − z2 z3 − z3 z2 + (2 + q3 h2 )z32 − z3 z4 + . . . +
h2
+ . . . − zm−1 zm−2 + (2 + qm−1 h2 )zm−1 2
]=
1
= 2 [z22 + (z2 − z3 )2 + (z3 − z4 )2 + . . . + (zm−2 − zm−1 )2 + zm−1 2
]+
h
m−1
X
+ qi zi2 ≥ 0
i=2

Poiché si ha una somma di elementi non negativi, l’uguaglianza a 0 si può


avere solo quando tutti gli elementi sono nulli e quindi per solo per z nullo.
Dunque la matrice A è definita positiva e quindi non singolare.

10.2.5 Consistenza
Se si sostituisce ui con la soluzione analitica u(xi ), da (10.1) si ottiene

u(xi+1 ) − 2u(xi ) + u(xi−1 ) (2)
− + q(xi )u(xi ) − g(xi ) = −τi , 2 ≤ i ≤ m − 1


h2

 u(x1 ) = ua

u(xm ) = ub

da cui si deduce che il metodo numerico è consistente di ordine 2.

10.2.6 Proprietà di A
A è una matrice simmetrica e diagonalmente dominante. È possibile usare
i metodi iterativi, semi-iterativi e diretti senza pivoting per la soluzione del
sistema lineare. Inoltre, è una M -matrice, cioè i suoi elementi extra-diagonali
sono non positivi e la sua inversa ha elementi non negativi.

10.2.7 Stabilità
Consideriamo due soluzioni relative a dati perturbati g̃ e ḡ. Si ha

Aũ = g̃
Aū = ḡ

da cui
(ũ − ū) = A−1 (g̃ − ḡ)
10.2. CONVERGENZA PER UN PROBLEMA MODELLO 39

Si potrebbe pensare che se il dato g non è perturbato, allora non ha senso


considerare eventuali dati perturbati. Non è cosı̀: si deve comunque risolvere
il sistema lineare Au = g e si commette un errore (anche usando un metodo
diretto e a maggior ragione un metodo iterativo). Quindi, in pratica, si trova
ũ piuttosto che u. La soluzione approssimata di Au = g può essere allora
pensata come soluzione esatta di Aũ = g̃, ove g̃ è definito proprio da g̃ = Aũ.
Ecco allora che abbiamo a che fare con dati perturbati.
Se si vuole che le perturbazioni sui dati non si ripercuotano in maniera
distruttiva sulle soluzioni, occorre che la matrice A−1 sia limitata in norma
indipendentemente da h, in particolare per h → 0. Consideriamo la matrice
Aq=0 corrispondente alla stessa discretizzazione nel caso q(x) ≡ 0. Si ha
A − Aq=0 = diag(q2 , . . . , qm−1 ) ≥ 0. Allora

A−1
q=0 − A
−1
= A−1
q=0 (A − Aq=0 )A
−1
≥0

perché Aq=0 e A sono M -matrici. Allora A−1 ≤ A−1 −1


q=0 e quindi kA k∞ ≤
−1 −1 −1 T
kAq=0 k∞ . Osserviamo poi che kAq=0 k∞ = kAq=0 [1, . . . , 1] k∞ e che v =
A−1 T
q=0 [1, . . . , 1] è la soluzione discreta (approssimata) di
 ′′
 −v (x) = 1

v(a) = 0

 v(b) = 0

la cui soluzione analitica è v(x) = (x−a)(b−x)/2. Poiché v (4) (x) ≡ 0 l’errore


(2)
locale τi , per questo problema, è nullo e la soluzione discreta coincide, nei
nodi, con la soluzione analitica. Dunque

kA−1 −1 T
q=0 k∞ = kAq=0 [1, . . . , 1] k∞ = max vi =
2≤i≤m−1

(b − a)2
= max v(xi ) ≤ max v(x) ≤
2≤i≤m−1 x∈[a,b] 8

e poiché kA−1 k∞ ≤ kA−1


q=0 k∞ , si ha la maggiorazione richiesta.

10.2.8 Convergenza
Definiamo eh = [e2,h , . . . , em−1,h ]T = [u2 − u(x2 ), . . . , um−1 − u(xm−1 )]T , h =
(b − a)/(m − 1). Poiché

A[u2 , . . . , um−1 ]T = g
(2)
A[u(x2 ), . . . , u(xm−1 )]T = g − τ h
40 CAPITOLO 10. DIFFERENZE FINITE

(2) (2) (2)


ove τ h = [τ2,h , . . . , τm−1,h ]T , si deduce eh = A−1 τ h . Combinando i risulta-
ti di consistenza e stabilità, si ottiene, per il problema (10.2) discretizzato
mediante differenze finite centrate del secondo ordine,
(b − a)2 h2 (4)
keh k∞ ≤ ku k∞
8 12
e dunque l’errore è proporzionale a h2 , posto che u ∈ C 4 ([a, b]).

10.3 Altre differenze finite


10.3.1 Su nodi non equispaziati
Dati tre nodi xi−1 , xi , xi+1 , con hi−1 = xi − xi−1 e hi = xi+1 − xi , si ha
h2i ′′ h3
u(xi+1 ) = u(xi ) + hi u′ (xi ) + u (xi ) + i u(3) (xi ) + O(h4i )
2 6
2
h h3
u(xi−1 ) = u(xi ) − hi−1 u′ (xi ) + i−1 u′′ (xi ) − i−1 u(3) (xi ) + O(h4i−1 )
2 6
da cui
′ u(xi+1 ) − u(xi−1 ) 1 h2i − h2i−1 ′′ 1 h3i−1 + h3i (3)
u (xi ) = − u (xi ) − u (xi )+
hi−1 + hi 2 hi−1 + hi 6 hi−1 + hi
+ O(max{h4i−1 , h4i })

Se hi−1 e hi non differiscono troppo (precisamente, se la loro differenza


è O(max{h2i−1 , h2i })), allora l’approssimazione con il rapporto incrementa-
le centrato è di ordine O(max{h2i−1 , h2i }). Analogamente, si può costruire
un’approssimazione della derivata seconda
u(xi+1 )−u(xi )
′′ hi
− u(xi )−u(x
hi−1
i−1 )

u (xi ) ≈ hi−1 +hi


2

La matrice corrispondente all’approssimazione mediante differenze finite di


ordine due della derivata prima con griglia non equispaziata è (senza tener
condo delle condizioni ai bordi)
 
  ∗ ∗ ∗ ∗ ∗ ∗ 
u′ (x1 ) 1 u(x1 )
 h1−1 0 0 ... 0 
 u′ (x2 )
  +h2 h1 +h2  u(x2 ) 
   .. ..  

 u′ (x3 )
 
  0 −1
0 1 . .  u(x3 ) 

h2 +h3 h2 +h3
 .. ≈ ..
 .. 
 .   .. .. .. .. 
. 
  . . . . . 0  
u′ (xm−1 )  −1 1

 u(xm−1 )
 0 ... 0 hm−2 +hm−1 0 hm−2 +hm−1
u′ (xm ) u(xm )
∗ ∗ ∗ ∗ ∗ ∗
10.4. CONDIZIONI AL BORDO 41

Dati i nodi x (vettore colonna di lunghezza m), è possibile costruire il vettore


[h1 , h2 , . . . , hm−1 ]T con il comando h=diff(x). Allora la matrice, a meno
della prima e dell’ultima riga, può essere costruita, direttamente in formato
sparso, con i comandi
> d = 1./(h(1:m-2)+h(2:m-1));
> spdiags([[-d;0;0],[0;0;d]],[-1,1],m,m)
La costruzione della matrice relativa alla derivata seconda è analoga.

10.3.2 Non centrate


È possibile approssimare la derivata prima e seconda usando i nodi che stanno
solo a sinistra (o a destra) del nodo corrente. Per esempio,
u(x2 ) − u(x1 ) −3u(x1 ) + 4u(x2 ) − u(x3 )
u′ (x1 ) = + O(h) = + O(h2 )
h 2h
u(x 1 ) − 2u(x 2 ) + u(x 3 )
u′′ (x1 ) = + O(h) =
h2
2u(x1 ) − 5u(x2 ) + 4u(x3 ) − u(x4 )
= + O(h2 )
h2
Ciò può risultare utile per l’approssimazione ai bordi.

10.3.3 Di ordine più elevato


Si possono per esempio costruire differenze finite di ordine quattro centrate
u(xi−2 ) − 8u(xi−1 ) + 8u(xi+1 ) − u(xi+2 )
u′ (xi ) = + O(h4 )
12h
−u(xi−2 ) + 16u(xi−1 ) − 30u(xi ) + 16u(xi+1 ) − u(xi+2 )
u′′ (xi ) = 2
+ O(h4 )
12h

10.4 Condizioni al bordo


10.4.1 Condizioni di Dirichlet
Se vengono prescritti i valori u(a) = ua o u(b) = ub , conviene discretizzare,
in un primo momento, il problema ai limiti senza tener conto delle condizioni
al bordo. Per esempio, la discretizzazione del problema ai limiti
 ′′
 u (x) = 1, x ∈ (a, b)

u(a) = ua

 u(b) = u
b
42 CAPITOLO 10. DIFFERENZE FINITE

senza tener conto delle condizioni al bordo diventa


    
−2 1 0 0 ··· 0 u1 1
 1 −2 1 0 · · · 0   u2  1
   
 
... ... ... . . . ..   ..   .. 
1 0 .   .  .
  .  = .
h2  ... . . . . . . . . . ...

0  .  .
   .  .
 0 ··· 0 1 −2 1  um−1  1
0 ··· 0 0 1 −2 um 1
Poi, si correggono le equazioni relative ai nodi al bordo
    
1 0 0 0 ··· 0 u1 ua /h2
1 −2 1 0 · · · 0  u2   1 
 ..     
. . . .   ..   .. 
0 . . . . . . . .
1  .  .   . 
 .  =  . 
h2  ... . . . . . . . . . . . .

0  .   . 
  .   . 
0 · · · 0 1 −2 1 um−1   1 
0 ··· 0 0 0 1 um ub /h2
In questo modo, però, la simmetria della matrice viene persa. Pertanto,
non è più possibile applicare gli appositi metodi per la risoluzione di sistemi
lineari simmetrici. Un metodo numericamente equivalente, detto metodo di
penalizzazione, è quello di modificare i soli elementi diagonali della prima e
dell’ultima riga inserendo un numero molto grande
    
M 1 0 0 ··· 0 u1 M ua
 1 −2 1 0 · · · 0   u2   1 
    
. . . . . . . . . . . . ..   ..   .. 
1 0 .  .   . 
=
h2  ... . . . . . . . . . . . . 0   ...   ... 
  
    
 0 · · · 0 1 −2 1  um−1   1 
0 ··· 0 0 1 M um M ub
Per poter usare l’algoritmo di Choleski, è inoltre necessario che la matrice
sia definita positiva. Conviene allora considerare il problema −u′′ (x) = −1.

10.4.2 Condizioni di Neumann


Un modo per imporre le condizioni di Neumann, per esempio u′ (a) = u′a , e
conservare l’ordine di accuratezza due (e che si può usare anche con i problemi
parabolici, vedi paragrafo 22.3.3) è quella di introdurre una variabile fittizia
u0 ≈ u(a − h), approssimare la derivata u′ (a) con
u2 − u 0
u′ (a) ≈
2h
10.4. CONDIZIONI AL BORDO 43

u(x)
u3

u2
u1
u0

y = u′a (x − x2 ) + u2

h h
x0 a = x1 x2 x3

Figura 10.3: Imposizione di una condizione di Neumann sull’estremo sinistro.

e porla uguale a u′a . In tal modo, risulta

u0 = u2 − 2hu′a

Tale espressione per u0 va usata poi in qualunque stencil di discretizzatione.


Per esempio, la discretizzazione dell’equazione

u′′ (x) − u′ (x) = 1

in x = a sarà
u0 − 2u1 + u2 u2 − u0 u2 − 2hu′a − 2u1 + u2 u2 − (u2 − 2hu′a )
− = − =
h2 2h h2 2h
2u2 − 2u1 − 2hu′a
= − u′a = 1
h2
da cui
2u2 − 2u1 2u′a
= 1 + + u′a
h2 h

10.4.3 Importanza delle condizioni al bordo


Spesso si trascura l’importanza di una corretta imposizione delle condizioni al
bordo e si pensa che l’influenza delle condizioni riguardi solamente un intorno
del bordo. Ovviamente non è cosı̀: basti pensare all’equazione differenziale

u′′ (x) = 1, x ∈ (−1, 1)

munita delle condizioni al bordo

u(−1) = u(1) = 0
44 CAPITOLO 10. DIFFERENZE FINITE

(la cui soluzione è u(x) = x2 /2 − 1/2) oppure


(
u(−1) = 0
u′ (1) = 0
(la cui soluzione è u(x) = x2 /2 − x − 3/2) oppure
u′ (−1) = u′ (1) = 0
(nessuna soluzione) oppure
(
u′ (−1) = −1
u′ (1) = 1
(infinite soluzioni u(x) = x2 /2 + k).

10.5 Un esempio: l’equazione della catenaria


Consideriamo l’equazione della catenaria
 p
′′

 u (x) = α 1 + u′ (x)2 , x ∈ (−1, 1)
u(−1) = 1


u(1) = 1
La discretizzazione mediante differenze finite centrate del secondo ordine è
   
u1 1
 u2   q ¡ −u1 ¢2 
 . 
 . 

 1 + u32h 

 .   .
.. 
A .  − α =b
 ..  q ¡ ¢ 
   um −um−2 2 
um−1   1+ 2h

um 1
Si tratta dunque di risolvere il sistema non lineare
p
F (u) = Au − α 1 + (Bu)2 − b = 0
ove
   
1 0 0 0 ··· 0 0 0 0 0 ··· 0
1 −2 1 0 · · · 0 −1 0 1 0 ··· 0
   .. 
. . . . . . . . . . . . ..  ... ... ... ...
1 
0 . 1 
0 .

A = 2 . , B=
... ... ... ...  2h  ... ... ... ... ...
 
h  .. 0 0
   
0 · · · 0 1 −2 1 0 ··· 0 −1 0 1
0 ··· 0 0 0 1 0 ··· 0 0 0 0
e b = [1/h2 − α, 0, . . . , 0, 1/h2 − α]T .
10.5. UN ESEMPIO: L’EQUAZIONE DELLA CATENARIA 45

10.5.1 Iterazioni di punto fisso


Si può tentare di risolvere il sistema di equazioni F (u) = 0 mediante itera-
zioni di punto fisso, che consistono nel risolvere il sistema lineare
q
Au(r+1) = α 1 + (Bu(r) )2 + b

L’applicazione del metodo risulta molto semplice: si può decomporre A nei


fattori LU una sola volta e risolvere due sistemi lineari triangolari ad ogni
iterazione. La funzione G deve essere una contrazione e ciò può essere difficile
da verificare. Inoltre, la convergenza risulta essere lineare. Per l’esempio
della catenaria, comunque, il metodo delle iterazioni di punto fisso converge
adeguatamente.

10.5.2 Metodo di Newton


Volendo applicare il metodo di Newton (a convergenza quadratica) è neces-
sario calcolare lo jacobiano di F (u), che risulta essere
JF (u(r) ) = A − αD(u(r) )B
ove 
(r)
 p (Bu )i

, i=j
D = (dij (u(r) )), dij (u(r) ) = 1 + (Bu(r) )2i

0, i=
6 j
A questo punto, l’iterazione del metodo di Newton consiste nella risoluzione
1 1e-3
errore
h2
catenaria.m
0.9

0.8
errore in norma innito
u(x)

0.7 1e-4

0.6

0.5

0.4 1e-5
-1 -0.5 0 0.5 1 20 30 40 50 60
x m

Figura 10.4: Soluzione dell’equazione della catenaria (sinistra, m = 60) e


ordine di convergenza (destra).

del sistema lineare


¡ ¢
JF (u(r) ) u(r+1) − u(r) = −F (u(r) )
46 CAPITOLO 10. DIFFERENZE FINITE

In generale, lo jacobiano di un funzionale F (u) calcolato in u(r) e appli-


cato a v è

dF (r) F (u(r) + εv) − F (u(r) )


JF (u(r) )v = (u )v = lim
du ε→0 ε
Come soluzione iniziale si prende solitamente una funzione semplice che
soddisfi le condizioni al bordo.

10.6 Norme ed errori


Data una funzione u(x) e due diverse discretizzazioni su nodi equispaziati
[ũ1 , . . . , ũm ] ≈ [u(x̃1 ), . . . , u(x̃m )] e [û1 , . . . , ûl ] ≈ [u(x̂1 ), . . . , u(x̂l )], {x̃i }i ⊂
[a, b], {x̂i }i ⊂ [a, b], non ha molto senso confrontare gli errori k[u(x̃1 ) −
ũ1 , u(x̃2 ) − ũ2 , . . . , u(x̃m ) − ũm ]k2 e k[u(x̂1 ) − û1 , y(x̂2 ) − û2 ,q . . . , u(x̂l ) − ûl ]k2 .
Si preferisce usare la norma infinito, oppure la norma kuk2 b−a
m
, che risulta
essere una approssimazione mediante quadratura con formula dei rettangoli
della norma in L2 di u(x).

10−2
fsc.m h2
errore rispetto alla soluzione esatta
errore rispetto alla soluzione di riferimento

10−3
errore in norma innito

10−4

10−5

10−6
10 102 103
m

Figura 10.5: Convergenza e falsa superconvergenza per la risoluzione di


u′′ (x) = − sin(x), u(0) = u(π) = 0.

Se si devono invece confrontare tra loro le due discretizzazioni, occorre che


i nodi siano “intercalati” e bisogna fare attenzione alla falsa superconvergenza
10.6. NORME ED ERRORI 47

(vedi Figura 10.5). Se si calcola una soluzione di riferimento con m̄ punti di


discretizzazione, si ha
¯ ¯
¯kum − uk∞ − ku − um̄ k∞ ¯ ≤ kum − um̄ k∞ ≤ kum − uk∞ + ku − um̄ k∞

da cui
kum − uk∞ − ε ≤ kum − um̄ k∞ ≤ kum − uk∞ + ε
se ku − um̄ k∞ = ε < kum − uk∞ . Ciò significa che si può stimare l’errore di
um usando una soluzione di riferimento um̄ solo se questa dista poco dalla
soluzione analitica e se m ≪ m̄, altrimenti la stima dice solo che kum −
um̄ k∞ / 2ε. Si ha cioè l’impressione che la soluzione numerica sia più vicina
alla soluzione analitica di quello che dovrebbe, invece è solo molto vicina a
quella di riferimento (per assurdo, se m = m̄, kum −um̄ k∞ = 0 6= kum −uk∞ ).
Una maniera molto comoda per verificare l’ordine di un metodo si basa
sulla seguente osservazione. Siano em̃ e em̂ gli errori corrispondenti a due
discretizzazioni con m̃ e m̂ punti. Supponiamo che
C
kem̃ k∞ =
(m̃ − 1)p
C
kem̂ k∞ =
(m̂ − 1)p

Si ricava

logkem̃ k∞ − logkem̂ k∞ = −p(log(m̃ − 1) − log(m̂ − 1))

Dunque, in un grafico logaritmico-logaritmico, l’errore kem k∞ si dispone su


una retta di pendenza −p (cioè parallelo alla “retta” (m − 1)−p ) rispetto a
m − 1.
Capitolo 11

Metodo di shooting

È possibile trasformare il problema (9.1) in un sistema differenziale del primo


ordine
y ′ (t) = f (t, y(t)), t ∈ (a, b]
tramite il cambiamento di variabili t = x, y1 (t) = u(x), y2 (t) = u′ (x),
f (t, y(t)) = [y2 (t), f (t, y1 (t), y2 (t)]T . Per quanto riguarda le condizioni ini-
ziali, mentre quella per y1 (t) è y1 (a) = ua , quella per y2 (t) non è definita. Si
può allora introdurre un parametro s ∈ R e considerare la seguente famiglia
di problemi ai valori iniziali
 ′
 y (t) = f (t, y(t)), t ∈ (a, b]

y1 (a) = ua (11.1)

 y (a) = s
2

Dato s, il sistema sopra può essere risolto con un opportuno metodo per
problemi ai valori iniziali. Poiché s è il valore della derivata prima di u(x), tale
metodo di risoluzione prende il nome di shooting. Chiamiamo y1 (t | y2 (a) = s)
(da leggersi “valore di y1 in t dato che y2 in a vale s”) la prima componente
della soluzione. Si dovrà ovviamente trovare s̄ tale che y1 (t | y2 (a) = s̄) =
u(x), t = x ∈ [a, b]. In particolare, dovrà essere y1 (b | y2 (a) = s̄) = ub .
Introduciamo allora la funzione
F (s) = y1 (b | y2 (a) = s) − ub
Si tratta di risolvere l’equazione (in generale non lineare) F (s) = 0.

11.1 Metodo di bisezione


Dati due valori s1 e s2 per cui F (s1 )F (s2 ) < 0, è possibile applicare il metodo
di bisezione per trovare lo zero di F (s). Poiché la soluzione di (11.1) è

48
11.2. METODO DI NEWTON 49

approssimata a meno di un errore dipendente dal passo di discretizzazione


temporale, la tolleranza richiesta per il metodo di bisezione dovrà essere
(leggermente) inferiore a tale errore.

11.2 Metodo di Newton


Per applicare il metodo di Newton, è necessario calcolare F ′ (s). Definiamo
a tal scopo

∂ ∂
v(x) = u(x | u′ (a) = s) = y1 (t | y2 (a) = s)
∂s ∂s

Derivando rispetto a s nel problema ai limiti


 ′′ ′
 u (x) = f (x, u(x), u (x)),
 x ∈ (a, b)
u(a) = ua

 u′ (a) = s

(la cui incognita u(x) è proprio u(x | u′ (a) = s)) si ha

∂ ′′ ∂
u (x) = f (x, u(x), u′ (x))
∂s ∂s

da cui, scambiando l’ordine di derivazione

v ′′ (x) = fu (x, u(x), u′ (x))v(x) + fu′ (x, u(x), u′ (x))v ′ (x), x ∈ (a, b)

Per quanto riguarda le condizioni iniziali per v(x), si ha


v(a) = u(a | u′ (a) = s) = 0
∂s
∂ ′
v ′ (a) = u (a | u′ (a) = s) = 1
∂s

Dunque, per calcolare F ′ (s) = v(b) occorre risolvere il sistema variazionale


(lineare in v(x))
 ′′ ′ ′ ′
 v (x) = fu (x, u(x), u (x))v(x) + fu′ (x, u(x), u (x))v (x),
 x ∈ (a, b)
v(a) = 0

 v ′ (a) = 1
50 CAPITOLO 11. METODO DI SHOOTING

In conclusione, per calcolare la coppia F (s) e F ′ (s) in un generico punto s,


occorre risolvere il sistema differenziale del primo ordine ai dati iniziali
 ′
 y1 (t) = y2 (t)





 y2′ (t) = f (t, y1 (t), y2 (t))




 y3′ (t) = y4 (t)

 y ′ (t) = f (t, y (t), y (t))y (t) + f (t, y (t), y (t))y (t)
4 y1 1 2 3 y2 1 2 4

 y1 (a) = ua




 y2 (a) = s




 y3 (a) = 0


y4 (a) = 1

fino al tempo t = b. Quindi F (s) = y1 (b) e F ′ (s) = y3 (b). Poiché le equazioni


per y1′ (t) e y2′ (t) non dipendono da y3 (t) e y4 (t), è possibile disaccoppiare le
prime due componenti dalle seconde due.
Una semplificazione del metodo di Newton che non richiede il calcolo di
F ′ (s) è il metodo delle secanti.

11.3 Problema ai limiti con frontiera libera


Un caso particolarmente interessante per l’applicazione del metodo di shoo-
ting è quello a frontiera libera (free boundary)
 ′′

 u (x) = f (x, u(x), u′ (x)), x ∈ (s, b)

 u(s) = α
(11.2)

 u′ (s) = β


u(b) = ub

ove i valori di u e di u′ sono assegnati in un punto incognito s, s < b. La


funzione di cui si deve trovare lo zero è, in questo caso,

F (s) = u(b | u(s) = α, u′ (s) = β) − ub

(scriveremo F (s) = u(b | s) − ub per brevità). Dati due punti s1 e s2 tali


che F (s1 )F (s2 ) < 0, l’applicazione del metodo di bisezione non presenta
difficoltà. Per quanto riguarda il metodo di Newton, il sistema variazionale
per
∂ u(x | s + h) − u(x | s)
v(x) = u(x | s) = lim
∂s h→0 h
11.3. PROBLEMA AI LIMITI CON FRONTIERA LIBERA 51

è analogo al caso precedente. L’unica diversità è data dalle condizioni iniziali


(in s). Si ha
u(s | s + h) − u(s | s)
v(s) = lim
h→0 h
Ora, u(s | s) = α. Poi

u(s | s + h) = u(s + h | s + h) − hu′ (s + h | s + h) + O(h2 ) = α − hβ + O(h2 )

Dunque, v(s) = −β. In maniera analoga

u′ (s | s + h) − u′ (s | s)
v ′ (s) = lim = −u′′ (s)
h→0 h
ove il valore u′′ (s) si ricava dal problema (11.2) e vale f (s, α, β).
Capitolo 12

Equazione di Poisson

Di particolare interesse è l’equazione di Poisson


−∇2 u(x) = f (x), x ∈ Ω ⊂ Rd
ove ∇2 è l’operatore laplaciano definito da
d
2
X ∂2
∇ =
k=1
∂x2k

L’equazione è solitamente accompagnata da condizioni al bordo di Dirichlet


o di Neumann.

12.1 Equazione di Poisson bidimensionale


Analizziamo numericamente in dettaglio il caso d = 2 (x = (x, y)) e Ω =
[a, b] × [c, d].

12.1.1 Condizioni al bordo di Dirichlet


Consideriamo dapprima il caso con condizioni al bordo di Dirichlet. Dunque


 −∇2 u(x, y) = f (x, y), (x, y) ∈ [a, b] × [c, d] ⊂ R2


 u(a, y) = Da (y)


u(b, y) = Db (y)




 u(x, c) = Dc (x)

 u(x, d) = D (x)
d

con le necessarie condizioni di compatibilità ai vertici. Introduciamo una


discretizzazione xi = a + (i − 1)hx , i = 1, 2, . . . , mx , hx = (b − a)/(mx − 1)

52
12.1. EQUAZIONE DI POISSON BIDIMENSIONALE 53

e yj = c + (j − 1)hy , j = 1, 2, . . . , my , hy = (d − c)/(my − 1). Introduciamo


infine la discretizzazione di u(x, y) definita da

uk ≈ u(xi , yj ), k = (j − 1)mx + i

di cui si vede un esempio in Figura 12.1. La matrice di discretizzazio-

u13 u14 u15 u16

u9 u10 u11 u12

u5 u6 u7 u8

u1 u2 u3 u4

Figura 12.1: Numerazione di una griglia bidimensionale

ne alle differenze finite centrate del secondo ordine, senza tener conto delle
condizioni al bordo, è data da

A = Imy ⊗ Ax + Ay ⊗ Imx

ove ⊗ indica il prodotto di Kronecker e

2 0 ... ... 0 2 0 ... ... 0


2 3 2 3
−1 −1
6 .7 6 .7
6 .7 6 .7
6−1
6 2 −1 0 ... .77 6−1
6 2 −1 0 ... .77
6 7 6 7
6 .. .. .. .. 7 6 .. .. .. .. 7
1 6 0 . . . . 1 6 0 . . . .
6 7 6 7
07 07
Ax = 6 7, Ay = 6 7
2
hx 6 2
hy 6
. . . . . . . .
6 7 6 7
.. .. .. .. .. .. .. ..
7 7
6 0 07 6 0 07
6 7 6 7
6 7 6 7
6 . 7 6 . 7
6 . 7 6 . 7
4 . ... 0 −1 2 −15 4 . ... 0 −1 2 −15
0 ... ... 0 −1 2 0 ... ... 0 −1 2

ove Ax ∈ Rmx ×mx e Ay ∈ Rmy ×my . Poi, le righe di indice, diciamo k, cor-
rispondente ad un nodo al bordo vanno sostituite con il vettore della base
54 CAPITOLO 12. EQUAZIONE DI POISSON

canonica ek , diviso per h2x + h2y . Il termine noto è [b1 , b2 , . . . , bmx my ]T , ove


 f (xi , yj ) se (xi , yj ) è un nodo interno, k = (j − 1)mx + i

 Da (yj )


 h2x +h2y se xi = a, k = (j − 1)mx + i

Db (yj )
bk = h2x +h2y se xi = b, k = (j − 1)mx + i

 D (x )
 h2xc+hi2y

 se yj = c, k = (j − 1)mx + i


 Dd (xi ) se yj = d, k = (j − 1)mx + i
h2 +h2
x y

Alternativamente, si può sostituire il solo termine diagonale delle righe cor-


rispondenti ad un nodo al bordo con un coefficiente M/(h2x + h2y ), M ≫ 1
e moltiplicare per M il corrispondente elemento nel termine noto. Questa
procedura permette di assegnare, di fatto, le condizioni al bordo di Dirichlet,
mantenendo la matrice A simmetrica.
In GNU Octave, la corretta numerazione dei nodi avviene con i comandi

> x = linspace(a,b,mx);
> y = linspace(c,d,my);
> [X,Y] = ndgrid(x,y);

e la costruzione della matrice A tramite il comando kron.

12.1.2 Condizioni al bordo miste


L’equazione di Poisson non può essere accompagnata solo da condizioni al
bordo di Neumann, altrimenti la soluzione è indeterminata. Consideriamo
allora il seguente problema con condizioni al bordo miste


 −∇2 u(x, y) = f (x, y), (x, y) ∈ [a, b] × [c, d] ⊂ R2




 u(b, y) = Db (y)

 u(x, c) = Dc (x), Dc (b) = Db (c)

∂u


 − (x, y) = Na (y), x = a, c < y < d


 ∂x

 ∂u

 (x, y) = Nd (x), y = d, x < b
∂y

La matrice di discretizzazione alle differenze finite centrate del secondo ordine


è data da
A = Imy ⊗ Ax + Ay ⊗ Imx
12.1. EQUAZIONE DI POISSON BIDIMENSIONALE 55

ove
2 0 ... ... 0 2 0 ... ... 0
2 3 2 3
−2 −1
6 .7 6 .7
6 .7 6 .7
6−1
6 2 −1 0 ... .77
6−1
6 2 −1 0 ... .77
6 7 6 7
6 .. .. .. .. 7 6 .. .. .. .. 7
1 6 0 . . . . 1 6 0 . . . .
6 7 6 7
07 07
Ax = 6 7, Ay = 6 7
h2 .. .. .. .. h2 .. .. .. ..
6 7 6 7
x 6 7 y 6 7
6 0
6 . . . . 07
7
6 0
6 . . . . 07
7
6 7 6 7
6 . 7 6 . 7
6 . 7 6 . 7
4 . ... 0 −1 2 −15 4 . ... 0 −1 2 −15
0 ... ... 0 −1 2 0 ... ... 0 −2 2

Poi, le righe di indice, diciamo k, corrispondente ad un nodo al bordo su cui


sono prescritte condizioni di Dirichlet vanno sostituite con il vettore della
base canonica ek , diviso per h2x + h2y . La riga di indice my , corrispondente al
nodo di bordo (a, c), va sostituita con
1 1
[0, . . . , 0, 1] ⊗ 2
[−2, 5, −4, 1, 0, . . . , 0] + 2 [0, . . . , 0, −2, 2] ⊗ [1, 0, . . . , 0]
hx hy

(si può verificare che lo stencil [2, −5, 4, −1]/h2x è un’approssimazione al se-
condo ordine della derivata seconda). Il termine noto è [b1 , b2 , . . . , bmx my ]T ,
ove

f (xi , yj )

 se (xi , yj ) è un nodo interno, k = (j − 1)mx + i

 Db (yj )

 h2 +h2
 se xi = b, k = (j − 1)mx + i
x y
Dc (xi )
bk = 2 2 se yj = c, k = (j − 1)mx + i
 hx +hy
 2Na (yi )


 f (xi , yj ) + hx
se xi = a, k = (j − 1)mx + i, j 6= 1, j 6= my

 2Nd (xi )
f (xi , yj ) + se yj = d, k = (j − 1)my + i, i =
6 mx
hy
Capitolo 13

Metodi variazionali

13.1 Formulazione variazionale di un proble-


ma modello
Un filo elastico sottoposto ad un carico soddisfa, sotto opportune ipotesi di
regolarità, l’equazione
(
−u′′ (x) = g(x), x ∈ (0, 1)
(13.1)
u(0) = u(1) = 0

ove u(x) rappresenta lo scostamento dalla posizione di riposo orizzontale.


Supponiamo che il carico sia g(x) = gε (x)
(
−u′′ (x) = gε (x), x ∈ (0, 1)
(13.2)
u(0) = u(1) = 0

ove

0
 0 ≤ x < 21 − ε
1 1
gε (x) = − 2ε 2
− ε ≤ x ≤ 21 + ε

 1
0 2
+ε<x≤1

La funzione discontinua gε rappresenta la densità di carico e il carico totale


vale
Z 1
gε (x)dx = −1
0

56
13.1. UN PROBLEMA MODELLO 57

La “soluzione” di (13.2) è

1 1


 − x 0≤x≤ −ε
 2
 2

 µ ¶2
1 1 ε−1 1 1
uε (x) = x− + −ε≤x≤ +ε


 4ε 2 4 2 2

 − 1 (1 − x) 1


+ε≤x≤1
2 2
In che senso soluzione? Chiaramente u′′ε (1/2 ± ε) non esiste e quindi non è
vero che −u′′ε (x) = gε (x), x ∈ (0, 1). Cerchiamo dunque una formulazione
alternativa che renda sensato il modello per un problema cosı̀ semplice e fisico
come (13.2).
Introduciamo il seguente spazio lineare:

V = {v: v ∈ C 0 ([0, 1]), v ′ continua a tratti e limitata, v(0) = v(1) = 0}

e il prodotto scalare su V
Z 1
(v, w) = v(x)w(x)dx
0

Teorema 2 (Formulazione variazionale). Se u(x) è la soluzione del proble-


ma (13.1), allora u ∈ V e

(u′ , v ′ ) = (g, v), ∀v ∈ V (13.3)

Dimostrazione. Sia u soluzione di (13.1). Allora, per ogni v ∈ V ,


Z 1 Z 1
′′
−u (x)v(x)dx = g(x)v(x)dx = (g, v)
0 0

Integrando per parti,


Z 1 ¯1 Z 1
′′ ′
u′ (x)v ′ (x)dx = (u′ , v ′ )
¯
−u (x)v(x)dx = −u (x)v(x)¯ +
0 0 0

poiché v(0) = v(1) = 0.


Per quanto visto per il problema modello (10.2), se g ∈ C 0 (0, 1), la so-
luzione di (13.1) esiste ed è unica. Per quanto appena dimostrato, essa è
soluzione anche di (13.3). Ritornando al problema modello (13.1), ove però
non facciamo ipotesi su g, la soluzione classica, quella di classe (almeno) C 2 ,
si chiama soluzione forte del problema (13.1), mentre la soluzione di (13.3)
58 CAPITOLO 13. METODI VARIAZIONALI

si chiama soluzione debole del problema (13.1). Con il teorema e l’esempio


precedenti abbiamo dimostrato che se esiste la soluzione forte, essa è anche
soluzione debole, ma non è sempre vero il contrario (cioè può esistere la sola
soluzione debole). Questo è il caso di (13.2), per cui la soluzione debole è
uε ∈ V , visto che
Z 1 Z 1 −ε Z 1 +ε Z 1
2 2
′ ′ ′ ′ ′ ′
uε (x)v (x)dx = uε (x)v (x)dx + uε (x)v (x)dx + u′ε (x)v ′ (x)dx =
1 1
0 0 2
−ε 2

Z 1 Z 1 Z
2
−ε 2
+ε 1
=− u′′ε (x)v(x)dx − u′′ε (x)v(x)dx − u′′ε (x)v(x)dx =
1 1
0 2
−ε 2

Z 1 Z 1 Z
+ε +ε 1
2 1 2
=− v(x)dx = gε (x)v(x)dx = gε (x)v(x)dx
1
2
−ε 2ε 1
2
−ε 0

Qualora si trovi una soluzione debole, ha però senso verificare se per caso
non sia anche forte. Infatti, se u ∈ V è soluzione di (13.3) e u ∈ C 2 ([0, 1])
(da notare che C 2 ([0, 1]) ⊂ V ) e g è continua allora 0 = (u′ , v ′ ) − (g, v) =
(−u′′ , v) − (g, v) = −(u′′ + g, v) per ogni v ∈ V . Poiché u′′ + g è continua, si
deduce −u′′ (x) = g(x) per 0 < x < 1.
Per quanto visto, la formulazione variazionale (13.3) del problema (13.1)
è in realtà le più “fisica”: pensando al problema della trave, essa permette
di descrivere, per esempio, anche il caso in cui la densità di carico g(x)
non sia continuo. Basta infatti che sia possibile calcolare (g, v), v ∈ V e
dunque basta, per esempio, che g sia continua a tratti. Quindi, in generale,
è possibile come modello per un fenomeno fisico la sola formulazione debole.
La soluzione debole, se esiste, è unica: infatti, se u1 e u2 sono due soluzioni
di (13.3), allora
(u′1 − u′2 , v ′ ) = 0, ∀v ∈ V
e in particolare per v = u1 − u2 . Dunque
Z 1
(u′1 (x) − u′2 (x))2 dx = 0
0

e quindi u′1 (x)


− u′2 (x)
= (u1 (x) − u2 (x))′ = 0. Pertanto u1 − u2 è costante e
siccome u1 (0) − u2 (0) = 0, allora u1 (x) − u2 (x) = 0.

13.1.1 Metodo di approssimazione variazionale


Prendiamo un sottospazio Vm di V di dimensione finita. Si cerca allora
û ∈ Vm tale che
(û′ , v ′ ) = (g, v), ∀v ∈ Vm (13.4)
(metodo di Galerkin).
13.1. UN PROBLEMA MODELLO 59

Teorema 3. Il problema (13.4) ha un’unica soluzione.

Dimostrazione. Sia {φj }m


j=1 una base di Vm . Allora, se esiste û(x) ∈ Vm
soluzione è
m
X
û(x) = ûj φj (x)
j=1

e il problema (13.4) si riscrive, per i = 1, 2, . . . , m,


Z ÃÃ m !′ ! m
1 X X
û′ (x)φ′i (x)dx = ûj φj , φ′i = (φ′j , φ′i )ûj = Au = (g, φi )
0 j=1 j=1

ove A = (aij ) = (φ′j , φ′i ) e u = [û1 , . . . , ûm ]T . Calcoliamo ora wT Aw per


w = [w1 , . . . , wm ]T . Si ha
m
à m !
X X
T ′ ′
w Aw = wi (φi , φj )wj
i=1 j=1

da cui, per la linearità del prodotto scalare,


ÃÃ m !′ Ã m !′ ! Z Ã m !2
X X 1 X
wT Aw = wi φi (x) , wj φj (x) = wj φ′j (x) dx ≥ 0
i=1 j=1 0 j=1

P
e l’unica possibilità per avere 0 è che wj φj (x) sia costante e dunque nullo
(poiché nullo ai bordi). Dunque, A è definita positiva.

La matrice A, che risulta essere simmetrica e definita positiva, si chiama


matrice di rigidezza (stiffness matrix) e il vettore (g, φi ) vettore di carico
(load vector). Vale poi il seguente risultato:

Teorema 4. Se u è soluzione di (13.3) e û di (13.4), allora

ku − ûk ≤ inf ku − vk (13.5)


v∈Vm

p
ove kvk = (v ′ , v ′ ).

Dimostrazione. Dalle uguaglianze

(u′ , v ′ ) = (g, v) ∀v ∈ V e, dunque, ∀v ∈ Vm


(û′ , v ′ ) = (g, v) ∀v ∈ Vm
60 CAPITOLO 13. METODI VARIAZIONALI

si ricava ((u − û)′ , v ′ ) = 0 per ogni v ∈ Vm . Dunque, se v ∈ Vm , allora


v − û ∈ Vm e quindi

((u − û)′ , (u − û)′ ) = ((u − û)′ , (u − v + v − û)′ ) = ((u − û), (u − v)′ ) ≤


≤ ku − ûkku − vk

(per la disuguaglianza di Cauchy–Schwartz) da cui

ku − ûk ≤ ku − vk, ∀v ∈ Vm

e quindi la tesi.
Per definizione, û è allora la proiezione ortogonale della soluzione esatta
u sul sottospazio Vm , tramite il prodotto scalare hu, vi = (u′ , v ′ ).
La scelta di Vm caratterizza il metodo. Da un lato bisogna considerare
la regolarità della soluzione richiesta. Dall’altro la difficoltà di assemblare la
matrice di rigidezza e di risolvere il sistema lineare.

Stabilità e consistenza
La consistenza del metodo di Galerkin discende dal fatto che se u ∈ V , allora

(u′ , v ′ ) = (g, v), ∀v ∈ Vm

(il metodo si dice fortemente consistente). Per quanto riguarda la stabilità,


cominciamo ad osservare che se û soddisfa (13.4), allora
¯Z 1 ¯ ¯Z 1 ¯
¯ ′
¯ ¯ ′
¯ p p
¯ 2xû(x)û (x)dx ¯ ≤ 2¯ û(x)û (x)dx ¯ ≤ 2 (û, û) (û′ , û′ )
¯ ¯ ¯ ¯
0 0

per la monotonia degli integrali (x ≤ 1 in [0, 1]) e la disuguaglianza di


Cauchy–Schwartz e

Z 1 Z 1 ¯1 Z 1
′ 2 ′ 2
û2 (x)dx
¯
2xû(x)û (x)dx = xû (x) dx = û (x)x¯ −
0 0 0 0

da cui p p p p
(û, û) ≤ 2 (û, û) (û′ , û′ ) = 2 (û, û) (û′ , û′ )
cioè p
(û, û) ≤ 2kûk
Poiché û soddisfa, in particolare,

(û′ , û′ ) = (g, û)


13.1. UN PROBLEMA MODELLO 61

si ricava, suppondendo g a quadrato sommabile,


p p p
kûk2 ≤ (g, g) (û, û) ≤ 2 (g, g)kûk

da cui p
kûk ≤ 2 (g, g)
Si conclude osservando che date due perturbazioni della soluzione ũ e ū
corrispondenti rispettivamente a g̃ e ḡ, allora

((ũ − ū)′ , v ′ ) = (g̃ − ḡ, v), ∀v ∈ Vm

e pertanto p
kũ − ūk ≤ 2 (g̃ − ḡ, g̃ − ḡ)
e cioè che piccole variazioni sui dati producono piccole variazioni sulle solu-
zioni.

Metodo degli elementi finiti (FEM)

φ1 φj−1 φj φj+1

h1 hj−1 hj hm−1
x1 x2 xj−2 xj−1 xj xj+1 xm

Figura 13.1: Hat functions

Introduciamo una discretizzazione dell’intervallo [0, 1] a passo variabile,


m−1
come in Figura 13.1. Lo spazio Vm è generato dalle funzioni di base {φj }j=2 ,
le quali sono definite da
x−x
j−1

 , xj−1 ≤ x ≤ xj
 hj−1


φj (x) = xj+1 − x , x ≤ x ≤ x
 j j+1


 hj

0, altrimenti
e 
 1

 , xj−1 < x < xj
 hj−1


φ′j (x) = 1
 − , xj < x < xj+1


 hj

 0, altrimenti
62 CAPITOLO 13. METODI VARIAZIONALI

Tuttavia, per permettere la trattazione di problemi con differenti condizioni


al bordo, consideriamo anche

 x2 − x , x1 ≤ x ≤ x2
φ1 (x) = h1

0, altrimenti

e 
 − 1, x <x<x
′ 1 2
φ1 (x) = h1

0, altrimenti
e 
 x − xm−1 , xm−1 ≤ x ≤ xm
φm (x) = hm−1

0, altrimenti
e 
1
 , xm−1 < x < xm
φ′m (x) = hm−1

0, altrimenti
Dunque, nell’approssimazione
m
X
û(x) = ûj φj (x)
j=1

i coefficienti ûj sono i valori di û nei nodi xj . Il problema (13.4) si riscrive


Z 1 m
X Z 1 m
X Z xi +hi

û (x)φ′i (x)dx = ûj φ′j (x)φ′i (x)dx = ûj φ′j (x)φ′i (x)dx =
0 j=1 0 j=1 xi −hi−1

Xm Z xi +hi
= ûj aij = g(x)φi (x)dx
j=1 xi −hi−1

Siccome il supporto di φj (x) è [xj−1 , xj+1 ], gli unici elementi non nulli aij
sono aii , ai i−1 e ai+1 i = ai i+1 . Per 1 < i < m,
Z xi µ ¶2
¶2 Z xi +hi µ
1 1 1 1
aii = (φ′i , φ′i )
= dx + − dx = +
xi −hi−1 hi−1 xi hi hi−1 hi
Z xi
1 1 1
ai i−1 = (φ′i−1 , φ′i ) = − · dx = − = ai−1 i
xi −hi−1 hi−1 hi−1 hi−1
13.1. UN PROBLEMA MODELLO 63

Per i = 1 e i = m, si ha invece
Z x1 +h1 µ ¶2
1 1
a11 = − dx =
h1 h1
Zx1x2
1 1 1
a21 = − · dx = − = a12
x2 −h1 h1 h1 h1
Z xm
1 1 1
am m−1 = − · dx = − = am−1 m
xm −hm−1 hm−1 hm−1 hm−1
Z xm µ ¶2
1 1
amm = − dx =
xm −hm−1 hm−1 hm−1

Per quanto riguarda il calcolo di (g, φi ) si può ricorrere alla formula del punto
medio: per 1 < i < m è
Z xi Z xi+1
x − xi−1 xi+1 − x
gi = (g, φi ) = g(x) dx + g(x) dx ≈
xi−1 hi−1 xi hi
µ ¶ µ ¶
xi−1 + xi hi−1 xi + xi+1 hi
≈g +g
2 2 2 2

Per i = 1 e i = m si ha invece
Z x2 µ ¶
x2 − x x1 + x2 h1
g1 = (g, φ1 ) = g(x) dx ≈ g
x1 h1 2 2
Z xm µ ¶
x − xm−1 xm−1 + xm hm−1
gm = (g, φm ) = g(x) dx ≈ g
xm−1 hm−1 2 2

L’approssimazione di
Z xi Z xi
x − xi−1
g(x)φi (x)dx = g(x) dx
xi−1 xi−1 hi−1

mediante la formula del punto medio produce un errore


¯ 3 µ ′
¶¯
¯ hi−1 ′′ ξi−1 − x i−1 2g (ξi−1 ) ¯
¯ g (ξi−1 ) + ¯ = O(h2i−1 ), ξi−1 ∈ (xi−1 , xi )
¯ 24 hi−1 hi−1 ¯

(occorre infatti valutare la derivata seconda di g(x)φi (x) in un opportuno


punto ξi−1 ). Siccome
µ ¶
xi−1 + xi g(xi−1 ) + g(xi )
g = + O(h2i−1 ) = ḡi−1 + O(h2i−1 )
2 2
64 CAPITOLO 13. METODI VARIAZIONALI

e, essendo la formula del punto medio esatta sulle funzioni lineari,


Z xi µ ¶
xi−1 + xi hi−1
φi (x)dx = φi hi−1 =
xi−1 2 2

la formula del punto medio viene di solito sostituita dalla formula equivalente
(nel senso dell’ordine di approssimazione)
Z xi Z xi +hi
hi−1 hi
gi = (g, φi ) ≈ ḡi−1 φi (x)dx + ḡi φi (x)dx = ḡi−1 + ḡi
xi −hi−1 xi 2 2

per 1 < i < m e da


Z x1 +h1
h1
g1 = (g, φ1 ) = ḡ1 φ1 (x)dx = ḡ1
x1 2
Z xm
hm−1
gm = (g, φm ) = ḡm−1 φm (x)dx = ḡm−1
xm −hm−1 2

La riga i-esima del sistema lineare risulta dunque essere


 . 
..
 
 .. 
h ³ ´ u
i  i−1  .
1 1 1 1
 ui  =  ḡi−1 hi−1 +ḡi hi 
  
0 . . . 0 − hi−1 hi−1
+ hi
− hi
0 . . . 0 2 

ui+1 
 .
..
..
.

e dunque molto simile (il termine noto è diverso, anche se dello stesso ordine)
a quella della discretizzazione con differenze finite del secondo ordine. Pertan-
to, è naturale aspettarsi, sotto opportune ipotesi di regolarità, che l’errore,
nella norma indotta dal prodotto scalare, rispetto alla soluzione analitica
tenda a zero come h2 , h = maxj hj (e ciò giustifica, a posteriori, la scelta
della formula di quadratura). Facilmente, usando la disuguaglianza (13.5) e
i risultati della Sezione 1.1.1, si può dimostrare
s
Z 1
c
ku − ûk ≤ ku − p1 uk = [u′ (x) − (pc1 u)′ (x)]2 dx ≤ hku′′ k∞
0

E quindi, ancora, ci si aspetta che se l’errore sulle derivate va a 0 come h,


allora l’errore sulla funzione vada a 0 come h2 . È importante sottolineare che
la similitudine con le differenze finite si ha solo per questo semplice problema
modello, per la scelta delle funzioni di base e per la scelta della formula di
quadratura.
13.1. UN PROBLEMA MODELLO 65

A questo punto si risolve il sistema lineare, dopo aver opportunamente


modificato la matrice e il termine noto per imporre le condizioni al bordo di
Dirichlet.
Nel caso di condizioni di Neumann (per esempio in u′ (0) = u′0 ), la forma
debole del problema è
¯1 Z 1 Z 1
′ ¯ ′ ′
−û (x)φi (x)¯ + û (x)φi (x)dx = g(x)φi (x)dx, 1 ≤ i ≤ m
0 0 0

Per i = 1, che è il caso di interesse, si ha


Z 1 Z 1
′ ′ ′
û (0) + û (x)φ1 (x)dx = g(x)φ1 (x)dx
0 0

Dunque, la prima riga del sistema lineare da risolvere è


Z 1 Z 1
′ ′ ′
û (x)φ1 (x)dx = −u0 + g(x)φ1 (x)dx
0 0

Da notare che il problema con due condizioni di Neumann non è ben definito,
in quanto se u(x) è soluzione, allora lo è anche u(x) + k.
Ovviamente, lo spazio Vm può essere costituito da funzioni molto più
regolari (per esempio polinomi di grado superiore).
Vediamo un approccio più generale all’implementazione del metodo degli
elementi finiti. Supponiamo di avere l elementi {ℓj }lj=1 (nel caso unidimen-
sionale, sono gli intervalli) ad ognuno dei quali sono associati due nodi. Con

ℓ1 ℓ2 ℓj−1 ℓj ℓl

x1 x2 xj−1 xj xj+1 xm

Figura 13.2: Nodi (numerati in basso) ed elementi (numerati in alto).

riferimento alla Figura 13.2, ove m = l + 1, si ha

ℓj,1 = j, ℓj,2 = j + 1, 1≤j≤l

che significa che l’elemento ℓj ha associati i nodi xj e xj+1 . Ogni elemento


contribuisce all’assemblaggio della matrice di stiffness e del termine noto. Per
quanto riguarda la matrice di stiffness, ad ogni elemento ℓj si associa
Z
1
φℓj,k ℓj,k = φ′ℓj,k (x)φ′ℓj,k (x)dx = , k = 1, 2
ℓ hj
Zj
1
φℓj,k ℓj,3−k = φ′ℓj,k (x)φ′ℓj,3−k (x)dx = − , k = 1, 2
ℓj hj
66 CAPITOLO 13. METODI VARIAZIONALI

Per quanto riguarda il termine noto, ad ogni elemento ℓj si associa

g(xℓj,1 ) + g(xℓj,2 )
gℓj = ḡj =
2
Pertanto si ha

• aij = 0, 1 ≤ i, j ≤ m, gi = 0, 1 ≤ i ≤ m

• for j = 1, . . . , l

for k = 1, 2
hj
aℓj,k ℓj,k = aℓj,k ℓj,k + φℓj,k ℓj,k , gℓj,k = gℓj,k + gℓj 2
aℓj,k ℓj,3−k = aℓj,k ℓj,3−k + φℓj,k ℓj,3−k
end

end

13.1.2 Estensione al caso bidimensionale


Tutto quanto detto si estende, in particolare, al caso bidimensionale. Si deve
usare la formula di Green
Z Z Z
2
∇ u(x)v(x)dx = − ∇u(x) · ∇v(x)dx + v(s)∇u(s) · ν(s)ds
Ω Ω ∂Ω

ove ν(s) è il versore esterno normale a ∂Ω.

13.2 Metodi spettrali


Sia X
u(x) = uj φj (x)
j

L’indice algebrico di convergenza è il più grande k tale che

lim |uj |j k < +∞


j→∞

Se tale limite è finito per ogni k, allora la serie si dice convergere esponen-
zialmente oppure spettralmente. Significa che |uj | decade più velocemente di
13.2. METODI SPETTRALI 67

ogni potenza negativa di j. Parleremo di metodi spettrali quando useremo


un’approssimazione di una serie convergente spettralmente
m
X
û(x) = ûj φj (x)
j=1

al posto di u(x). Quindi, useremo i metodi spettrali quando ci aspettiamo


soluzioni molto regolari.
Consideriamo un sistema {φj }j ortonormale rispetto al prodotto scalare
Z b
φj (x)φi (x)w(x)dx = δji
a

La formulazione di Galerkin di un problema ai limiti Lu = g, L operatore


differenziale lineare, diventa
m
X Z b Z b
ûj Lφj (x)φi (x)w(x)dx = g(x)φi (x)w(x)dx, 1≤i≤m
j=1 a a

Nel caso non si possano calcolare analiticamente o con formule di quadratura


esatte gli integrali, si ricorre alle formule di quadratura gaussiana (relative
alle funzioni φj (x)) a m punti, dando origine al sistema lineare
m
à m ! m
X X X
ûj Lφj (xn )φi (xn )wn = g(xn )φi (xn )wn = ĝi , 1≤i≤m
j=1 n=1 n=1
(13.6)
In tal caso si parla di metodi pseudospettrali. I coefficienti ûj che si trovano
risolvendo il sistema lineare si chiamano solitamente soluzione nello spazio
spettrale.
P Dati i coefficienti, si ricostruisce la soluzione nello spazio fisico
û φ
j j j (x). Detta F la matrice

F = (fij ) = φi (xj ) wj
P
e dati i coefficienti ûj , si calcola la soluzione fisica j ûj φj (x) sui nodi di
quadratura mediante
√   
w1 û(x1 ) û1
 √w2 û(x2 )   û2 
 = F T  .. 
   
 ..
 .   . 

wn û(xn ) ûm
68 CAPITOLO 13. METODI VARIAZIONALI

Da notare che F T = F −1 . Per quanto riguarda invece i coefficienti gi , essi


sono dati da    √ 
ĝ1 g(x1 ) w1
 ĝ2   g(x2 )√w2 
   
 ..  = F  .. 
.  . 

ĝn g(xn ) wn
Solitamente le funzioni {φj (x)}j sono polinomi ortonormali rispetto alla fun-
zione peso w(x). La soluzione u(x), però, potrebbe non essere efficacemente
approssimata da polinomi, per esempio se deve soddisfare particolari con-
dizioni al contorno (tipo vanishing boundary conditions, condizioni al bordo
periodiche o altro). Può essere utile allora la decomposizione
m
X m
X
p
u(x) ≈ ûj φj (x) w(x) = ûj ϕj (x)
j=1 j=1

La formulazione di Galerkin di Lu = g diventa allora


m
X Z b Z b
p p p
ûj L(φj (x) w(x))φi (x) w(x)dx = g(x)φi (x) w(x)dx, 1 ≤ i ≤ m
j=1 a a

Ad ogni modo, la differenza sostanzionale con il metodo degli elementi finiti


è che le funzioni di base sono regolari e a supporto globale.
Consideriamo ora un caso particolare di fondamentale importanza (per
l’analisi numerica in generale). Molte proprietà risultano comuni anche agli
altri metodi pseudospettrali.

13.2.1 Trasformata di Fourier


Sia [a, b] un intervallo di R, m > 0 pari e fissato. Consideriamo, per ogni
j ∈ Z,
ei(j−1−m/2)2π(x−a)/(b−a)
φj (x) = √
b−a
Allora,
Z b
φj (x)φk (x)dx = δjk (13.7)
a

Infatti, se j = k allora φj (x)φk (x) = 1/(b − a), altrimenti

ei2π(j−k)(x−a)/(b−a)
φj (x)φk (x) =
b−a
13.2. METODI SPETTRALI 69

e quindi
Z b Z 1
ei2π(j−k)y
φj (x)φk (x)dx = (b − a)dy = 0 ,
a 0 b−a
poiché l’integrale delle funzioni sin e cos in un intervallo multiplo del loro pe-
riodo è nullo. La famiglia di funzioni {φj }j si dice ortonormale nell’intervallo
[a, b] rispetto al prodotto scalare
Z b
(φj , φk ) = φj (x)φk (x)dx
a

Un risultato utile è il seguente


m
X
ei(n−1)2π(j−k)/m = mδjk , 1 ≤ j, k ≤ m (13.8)
n=1

È ovvio per j = k; altrimenti


m
X m−1
X ¡ ¢n
ei(n−1)2π(j−k)/m = ei2π(j−k)/m =
n=1 n=0
1 − ei2π(j−k) 1 − cos(2π(j − k))
= i2π(j−k)/m
= =0
1−e 1 − ei2π(j−k)/m
poiché −m + 1 ≤ j − k ≤ m − 1.

13.2.2 Trasformata di Fourier discreta


Sia u una funzione da [a, b] a C tale che u(a) = u(b). Supponiamo che u si
possa scrivere (ciò è vero, per esempio, per funzioni di classe C 1 ) come
+∞
X
u(x) = uj φj (x), uj ∈ C (13.9)
j=−∞

Fissato k ∈ Z, moltiplicando entrambi i membri per φk (x) e integrando


nell’intervallo [a, b], usando (13.7) si ottiene
Z b Z bà X +∞
!
u(x)φk (x)dx = uj φj (x)φk (x) dx =
a a j=−∞
∞ Z (13.10)
X b
= uj φj (x)φk (x)dx = uk
j=−∞ a
70 CAPITOLO 13. METODI VARIAZIONALI

Dunque, abbiamo un’espressione esplicita per uj . Analogamente si vede che


Z b +∞
X
|u(x)|2 dx = |uj |2 (identità di Parseval)
a j=−∞

La prima approssimazione da fare consiste nel troncare la serie infinita.


Osserviamo che, definito J = Z \ {1, 2, . . . , m},
Z b ¯¯ Xm
¯2
¯ Z b ¯¯X ¯2
¯
¯ ¯ ¯ ¯
¯u(x) − uj φj (x)¯ dx = ¯ uj φj (x)¯ dx =
a ¯ ¯ a ¯ ¯
j=1 j∈J
Z b ÃX !Ã
X
!
= uj φj (x) uk φk (x) dx =
a j∈J k∈J
X
= |uj |2
j∈J

Stimiamo adesso uj : posto λj = i(j − 1 − m/2)2π/(b − a) si ha, per funzioni


classe u ∈ C 2 , integrando per parti e tenendo conto che φj (a) = φj (b) =
di √
1/ b − a
Z b Z
1 1 b ′
uj = u(x)φj (x)dx = − √ (u(b) − u(a)) + u (x)φj (x)dx =
a λj b − a λj a
Z b
1 1 ′ ′ 1
=− √ (u(b) − u(a)) − 2 √ (u (b) − u (a)) + 2 u′′ (x)φj (x)dx
λj b − a λj b − a λj a
¡ −2
¢
= O (j − 1 − m/2)

Se anche u′ (a) = u′ (b) e u ∈ C 3 , allora, integrando ancora per parti, si ottiene


uj = O ((j − 1 − m/2)−3 ) e cosı̀ via: in generale, se u ∈ C k e ul periodica per
l = 1, 2, . . . , k − 2, allora
¡ ¢
uj = O (j − 1 − m/2)−k

Si ha dunque
X ¡ ¢ ¡ ¢
|uj |2 = |um+1 |2 + |u0 |2 + |um+2 |2 + |u−1 |2 + |um+3 |2 + . . . =
j∈J
¡ ¢ ¡ ¢ ¡ ¢
= O (m/2)−k + O (1 + m/2)−k + O (2 + m/2)−k + . . .

Se poi u è infinitamente derivabile e periodica (cioè tutte le derivate sono


periodiche), allora uj decade più velocemente di ogni potenza negativa di j.
13.2. METODI SPETTRALI 71

La seconda approssimazione da fare è utilizzare una formula di quadra-


tura per il calcolo di uj . Riportiamo per comodità la formula di quadratura
trapezoidale a m+1 nodi equispaziati xn = (b−a)yn +a, ove yn = (n−1)/m,
n = 1, . . . , m + 1 per funzioni periodiche:
Z b à m
! m
b−a X b−aX
g(x)dx ≈ g(x1 ) + 2 g(xn ) + g(xm+1 ) = g(xn )
a 2m n=2
m n=1
Usando la (13.8), abbiamo
m
X m
X m
X
i(n−1)2π(j−k)/m i(j−k)2πyn
mδjk = e = e = ei(j−k)2π(xn −a)/(b−a) =
n=1 n=1 n=1
m
X ei(j−1−m/2)2π(xn −a)/(b−a) e−i(k−1−m/2)2π(xn −a)/(b−a)
= (b − a) √ √ =
n=1
b−a b−a
Xm Z b
= (b − a) φj (xn )φk (xn ) = m φj (x)φk (x)dx
n=1 a

cioè la famiglia {φj }j , 1 ≤ j ≤ m, è ortonormale anche rispetto al prodotto


scalare discreto m
b−aX
(φj , φk )d = φj (xn )φk (xn )
m n=1
Questo significa che la formula di quadratura trapezoidale a m punti è esat-
m+m/2
ta per le funzioni {φj }j=2−m/2 . Applicando la formula di quadratura ai
coefficienti (13.10) si ottiene
Z b
e−i(j−1−m/2)2π(x−a)/(b−a)
uj = u(x) √ dx =
a b−a
Z 1

= b−a u((b − a)y + a)e−i(j−1)2πy eimπy dy ≈
0
√ m
b − a X¡ ¢
≈ u(xn )eimπyn e−i(j−1)2πyn = ûj
m n=1

ove x = (b − a)y + a.
La funzione (serie troncata di Fourier)
m m/2−1
X X
û(x) = ûj φj (x) = ûk+1+m/2 φk+1+m/2 (x) =
j=1 k=−m/2
m/2−1
X eik2π(x−a)/(b−a)
= ûk+1+m/2 √
k=−m/2
b−a
72 CAPITOLO 13. METODI VARIAZIONALI

è un polinomio trigonometrico che approssima u(x) ed è interpolante nei nodi


xn . Infatti, usando (13.8),
m
X
û(xn ) = ûj φj (xn ) =
j=1
m
Ã√ m
!
X b−a X¡ ¢ ei(j−1−m/2)2π(xn −a)/(b−a)
= u(xk )eimπyk e−i(j−1)2πyk √ =
j=1
m b−a
k=1
m m
1 X X
= u(xk )eimπ(k−1)/m e−imπ(n−1)/m e−i(j−1)2π(k−1)/m ei(j−1)2π(n−1)/m =
m j=1
k=1
m m
1 X X 1
= u(xk )ei(k−n)π ei(j−1)2π(n−k)/m = u(xn )m = u(xn ) .
m j=1
m
k=1

Si può far vedere poi che


Z b ¯¯ m
X
¯2
¯ X
|uj |2
¯ ¯
¯u(x) − ûj φj (x)¯ dx ≤ 2
a ¯ ¯
j=1 j∈J

La trasformazione
[u(x1 ), u(x2 ), . . . , u(xm )]T → [û1 , û2 , . . . , ûm ]T
si chiama trasformata di Fourier discreta √ di u e û1 , . . . , ûm coefficienti di Fou-
T
rier di u. Il vettore m · [û ,
√1 2 û , . . . , û m ] / b − a può essere scritto come pro-
imπy1
dotto matrice-vettore F m[u(x1 )e , u(x2 )eimπy2 , . . . , u(xm )eimπym ]T , ove
µ ¶r
e−i(j−1)2πyk xk − a b−a
F = (fjk ), fjk = √ = φj+m/2 .
m b−a m
Alternativamente, si può usare la Fast Fourier Transform (FFT). Il comando
fft applicato al vettore [u(x1 )eimπy √ , u(x2 )e
1 imπy2
, . . . , u(xm )eimπym ]T produ-
T
ce il vettore m · [û1 , û2 , . . . , ûm ] / b − a, cosı̀ come il comando fftshift
applicato al risultato del comando fft applicato a [u(x1 ), u(x2 ), . . . , u(xm )].
Dati dei coefficienti v̂j , j = 1, . . . , m, si può considerare la funzione
(periodica)
X m
v̂j φj (x)
j=1

La valutazione nei nodi xn , 1 ≤ n ≤ m, porge


m m
ˆ
X X ei(j−1−m/2)2π(xn −a)/(b−a)
v̂ n = v̂j φj (xn ) = v̂j √ =
j=1 j=1
b−a
à m !
m 1 X i(j−1)2πyn
=√ v̂j e e−imπyn .
b − a m j=1
13.2. METODI SPETTRALI 73

La trasformazione

[v̂1 , v̂2 , . . . , v̂m ]T → [v̂ˆ1 , v̂ˆ2 , . . . , v̂ˆm ]T

si chiama anti-trasformata di Fourier discreta. Se i v̂j sono i coefficienti di


Fourier di una funzione v(x), la proprietà di interpolazione comporta v̂ˆn =
v(xn ). Ma, in generale, non è vero che
m
X
v(x) = v̂j φj (x)
j=1


Il vettore b − a · [v̂ˆ1 eimπy1 , v̂ˆ2 eimπy2 , . . . , v̂ˆm eimπy√
m T
] /m può essere scritto
′ T
come prodotto matrice-vettore F [v̂1 , v̂2 , . . . , v̂m ] / m, ove F ′ denota, co-
me in GNU Octave, la trasposta coniugata di F . Alternativamente, √ il co-
mando ifft applicato al vettore [v̂1 , v̂2 , . . . , v̂m ] produce il vettore b − a ·
[v̂ˆ1 eimπy1 , v̂ˆ2 eimπy2 , . . . , v̂ˆm eimπym ]/m, mentre, se applicato al risultato del co-
mando
√ ifftshift applicato al vettore [v̂1 , v̂2 , . . . , v̂m ], produce il vettore
b − a · [v̂ˆ1 , v̂ˆ2 , . . . , v̂ˆm ]/m.
Da notare che F ′ = F −1 .

Applicazione ad un problema modello

10−2
ordine 1
ordine 2
fourier.m
ordine 4
ordine 8
10−4 errore

10−6

10−8
errore in norma-2

10−10

10−12

10−14

10−16

10−18
1 10 100

Figura 13.3: Convergenza spettrale di Fourier per il problema (13.11) rispetto


ad una soluzione di riferimento ottenuta con m = 64.
74 CAPITOLO 13. METODI VARIAZIONALI

Consideriamo la soluzione del problema



 − u′′ (x) + u(x) = 1
, x ∈ (−π, π)
sin x + 2 (13.11)

u(−π) = u(π)

mediante decomposizione in funzioni di Fourier. Posto a = −π, b = π,


g(x) = 1/(sin x + 2), si ha

ei(j−1−m/2)2π(x−a)/(b−a)
φj (x) = √
b−a

ove m è pari e fissato e, per 1 ≤ k ≤ m,


Z Ã m
!′′ Z Ã m !
π X π X
− uj φj (x) φk (x)dx + uj φj (x) φk (x)dx =
−π j=1 −π j=1
Z π
= g(x)φk (x)dx
−π

da cui
m
X Z π m
X Z π Z π
− uj φ′′j (x)φk (x)dx + uj φj (x)φk (x)dx = g(x)φk (x)dx
j=1 −π j=1 −π −π

Poiché µ ¶2
i(j − 1 − m/2)2π
φ′′j (x) = φj (x) = λ2j φj (x)
b−a
usando l’ortonormalità delle funzioni di Fourier e calcolando i coefficienti di
Fourier di g(x), si ha

−λ2k ûk + ûk = ĝk , 1≤k≤m

da cui
ĝk
ûk = , 1≤k≤m
1 − λ2k
e quindi
m
X
u(x) ≈ ûj φj (x)
j=1

In Figura 13.3 si vede la convergenza spettrale del metodo.


13.2. METODI SPETTRALI 75

Da notare che le condizioni al bordo devono essere di tipo periodico:


condizioni come
 ′′ ′
 u (x) = f (x, u(x), u (x)), x ∈ (a, b)

u(a) = 0

 u(b) = 0

sono invece di Dirichlet omogenee. Inoltre, la soluzione del problema deve


poter essere periodica (o, almeno, avere più derivate possibili periodiche):
per esempio, non possono esserci termini non omogenei non periodici.

Costi computazionali e stabilità


La Fast Fourier Transform di un vettore di lunghezza m ha costo O(m log m),
mentre il prodotto matrice-vettore O(m2 ). Tali costi sono però asintotici e
nascondono i fattori costanti. Inoltre, GNU Octave può far uso di implemen-
tazioni ottimizzate di algebra lineare (come, ad esempio, le librerie ATLAS1
o OpenBLAS2 ). In pratica, dunque, esiste un m0 sotto il quale conviene, dal
punto di vista del costo computazionale, usare il prodotto matrice-vettore e
sopra il quale la FFT.
Per quanto riguarda l’accuratezza, in generale la FFT è più precisa del
prodotto matrice vettore. Poiché la trasformata di Fourier discreta comporta
l’uso di aritmetica complessa (anche se la funzione da trasformare è reale),
la sequenza trasformata/anti-trasformata potrebbe introdurre una quantità
immaginaria spuria che può essere eliminata con il comando real.
Anche per la trasformata di Fourier vi possono essere problemi di stabilità
simili al fenomeno di Runge (qui chiamato fenomeno di Gibbs). Una tecnica
per “smussare” (in inglese “to smooth”) eventuali oscillazioni, consiste nel
moltiplicare opportunamente i coefficienti di Fourier ûj per opportuni termini
σj che decadono in j, per esempio
m
2
+ 1 − | m2 + 1 − j|
σj = m , 1≤j≤m
2
+1
Il risultato è che il coefficiente ûm/2+1 è pesato da σm/2+1 = 1, i coefficienti
ûm/2 e um/2+2 sono pesati da m/(m + 2) e cosı̀ via fino al coefficiente û1
pesato da 2/(m + 2). Questa scelta corrisponde alle medie di Cesáro. Infatti,
si sostituisce la serie troncata di Fourier
Xm
ûj φj (x)
j=1

1
http://math-atlas.sourceforge.net/
2
http://xianyi.github.com/OpenBLAS/
76 CAPITOLO 13. METODI VARIAZIONALI

con la media delle troncate


m m
2
max{ 2 +1+k,m}
X X
ûj φj (x)
k=0 j= m
2
+1−k
m
2
+1
Si ricorda che se una serie è convergente, allora il limite delle medie delle sue
troncate è la somma della serie.

Valutazione di un polinomio trigonometrico


Supponiamo di conoscere i coefficienti ûj , j = 1, . . . , m e di voler valutare la
funzione m
X
û(x) = ûj φj (x)
j=1

su un insieme di nodi target xk equispaziati, xk = (k − 1)/n, 1 ≤ k ≤ n,


n > m, n pari. Si possono introdurre dei coefficienti fittizi Ûk
n−m
Ûk = 0 1≤k≤
2
n−m n−m
Ûk = ûk− n−m +1≤k ≤m−
2 2 2
n−m
Ûk = 0 m− +1≤k ≤n
2
Si avrà
m n
X X ei(j−1−n/2)2π(xk −a)/(b−a)
û(xk ) = ûj φj (xk ) = Ûj √ =
j=1 j=1
b−a
à n !
n 1 X
=√ Ûj ei(j−1)2πyk e−inπyk
b−a n j=1

Oppure si può costruire la matrice F relativa ai nodi (ciò funziona anche per
nodi non equispaziati). Infine, si può usare la trasformata di Fourier non
equispaziata NFFT.

13.3 Metodi di collocazione


Si assume comunque
m
X
û(x) = ûj φj (x)
j=1
13.3. METODI DI COLLOCAZIONE 77

ove {φj } è un sistema ortonormale rispetto ad un prodotto scalare, ma si


impone poi che l’equazione differenziale Lu = g sia soddisfatta in certi nodi
xn . Si ha il seguente risultato interessante:

Teorema 5. La soluzione del sistema lineare


m
X
ûj Lφj (xn ) = g(xn ), 1≤n≤m (13.12)
j=1

ove gli {xn } sono i nodi della quadratura gaussiana relativa alla famiglia {φj }
è la stessa del problema di Galerkin
m
X Z b Z b
ûj Lφj (x)φi (x)w(x)dx = g(x)φi (x)w(x)dx
j=1 a a

quando si approssimino gli integrali con le formule gaussiane.

Dimostrazione. Per ogni i, 1 ≤ i ≤ m, da (13.12), si ha


m
X
ûj Lφj (xn )φi (xn )wn = g(xn )φi (xn )wn , 1≤n≤m
j=1

ove i {wn }n sono i pesi di quadratura gaussiana, da cui, sommando su n,

m
à m ! m
à m !
X X X X
ûj Lφj (xn )φi (xn )wn = ûj Lφj (xn )φi (xn )wn =
n=1 j=1 j=1 n=1
Xm
= g(xn )φi (xn )wn , 1≤i≤m
n=1

che è precisamente la formulazione di Galerkin pseudospettrale (13.6).

13.3.1 Condizioni al bordo


Consideriamo il problema

 Lu(x) = g(x)

u(a) = ua

 u′ (b) = u′
b
78 CAPITOLO 13. METODI VARIAZIONALI

Con il metodo di collocazione, si ha


 m
 X


 ûj Lφj (xn ) = g(xn ), 1≤n≤m−2



 j=1

 m
X
ûj φj (a) = ua

 j=1



 X m




 ûj φ′j (b) = u′b
j=1

Anche in questo caso il metodo di collocazione può essere visto come un me-
todo di Galerkin pseudospettrale: basta prendere come nodi di collocazione
gli m − 2 nodi di quadratura gaussiana. Si ha poi
 m Ãm−2 ! m−2
 X X X

 û Lφ (x )φ (x )w = g(xn )φi (xn )wn , 1 ≤ i ≤ m − 2

 j j n i n n
 j=1
 n=1 n=1



X m
ûj φj (a) = ua

 j=1



 m
 X
ûj φ′j (b) = u′b




j=1

Alternativamente, si possono usare, come nodi di collocazione, quelli delle


formule di quadratura di Gauss–Lobatto (che contengono i nodi al bordo).

Collocazione Gauss–Lobatto–Chebyshev
I polinomi di Chebyshev sono definiti da
Tj (x) = cos(j arccos(x)), −1 ≤ x ≤ 1
e soddisfano 
ππ i=j=0
Z 

1
Tj (x)Ti (x)
√ dx = i = j 6= 0
−1 1 − x2 
 2
0 i 6= j
(lo si vede con il cambio di variabile x = cos θ e applicando le formule di Wer-
ner, oppure integrando per parti due volte). I nodi di (Gauss–)Chebyshev–
Lobatto sono xn = cos((n − 1)π/(m − 1)), 1 ≤ n ≤ m. Possiamo allora
definire la seguente famiglia di funzioni ortonormali
r r
1 2
φ1 (x) = T0 (x), φj (x) = Tj−1 (x), 2 ≤ j ≤ m
π π
13.3. METODI DI COLLOCAZIONE 79

Ricordando la formula di ricorrenza tra polinomi di Chebyshev, possiamo


scrivere
r r
1 2 √
φ1 (x) = , φ2 (x) = x, φ3 (x) = 2xφ2 (x) − 2φ1 (x),
π π
φj+1 (x) = 2xφj (x) − φj−1 (x), 3 ≤ j ≤ m − 1

Da qui, possiamo calcolare anche la derivata prima e seconda delle funzioni:


r
2
φ′1 (x) = 0, φ′2 (x) = , φ′3 (x) = 2φ2 (x) + 2xφ′2 (x),
π
φ′j+1 (x) = 2φj (x) + 2xφ′j (x) − φ′j−1 (x), 3 ≤ j ≤ m − 1

φ′′1 (x) = 0, φ′′2 (x) = 0, φ′′3 (x) = 4φ′2 (x),


φ′′j+1 (x) = 4φ′j (x) + 2xφ′′j (x) − φ′′j−1 (x), 3 ≤ j ≤ m − 1
Conviene calcolare le matrici
 
φ1 (x1 ) φ1 (x2 ) . . . φ1 (xm )
 φ2 (x1 ) φ2 (x2 ) . . . φ2 (xm ) 
 
T0 =  .. .. .. 
 . . ... . 
φm (x1 ) φm (x2 ) . . . φm (xm )
 
φ′1 (x1 ) φ′1 (x2 ) . . . φ′1 (xm )
 φ′ (x1 ) φ′2 (x2 ) . . . φ′2 (xm ) 
 2 
T1 =  .. .. .. 
 . . ... . 
φ′m (x1 ) ′ ′
φm (x2 ) . . . φm (xm )
 
φ′′1 (x1 ) φ′′1 (x2 ) . . . φ′′1 (xm )
 φ′′ (x1 ) φ′′2 (x2 ) . . . φ′′2 (xm ) 
 2 
T2 =  .. .. .. 
 . . ... . 
φ′′m (x1 ) ′′ ′′
φm (x2 ) . . . φm (xm )

Consideriamo, a titolo di esempio, il seguente problema modello


 ′′
 −u (x) + q(x)u(x) = g(x)

u(−1) = ua

 u′ (1) = u′
b

Il sistema lineare risultante da risolvere per il metodo di collocazione Gauss–


Chebyshev–Lobatto (per il momento senza tener conto delle condizioni al
80 CAPITOLO 13. METODI VARIAZIONALI

bordo) è
      
q(x1 ) u1 g(x1 )

 T 
 q(x2 )    u2   g(x2 ) 
 T    
−T2 +  ...  T0   ..  =  .. 
    .   . 
q(xm ) um g(xm )

Per imporre le condizioni al bordo, si sostituisce la prima riga della matrice


con la prima riga di TT 0 e il primo elemento del termine noto con ua . Poi,
l’ultima riga della matrice con l’ultima riga di TT 1 e l’ultimo elemento del
termine noto con u′b . Una volta noti i coefficienti uj , si ricostruisce la soluzione
nello spazio fisico tramite
   
u(x1 ) u1
 u(x2 )   u2 
 ..  = TT
   
0  .. 
 .   . 
u(xm ) um
Capitolo 14

Esercizi

1. Si risolva il problema ai limiti


 ′′
 u (x) = u(x) + x,
 x ∈ (0, 1)
u(0) = 0 (14.1)

 u(1) = 0

usando il metodo delle differenze finite del secondo ordine. Sapendo


che la soluzione esatta è u(x) = (ex − e−x )/(e − e−1 ) − x, si mostri
inoltre l’ordine del metodo mediante un grafico logaritmico-logaritmico
dell’errore in norma infinito.
2. Si risolva il problema ai limiti
 ′′ ′
 u (x) + u (x) + u(x) − cos(x) = 0,
 x ∈ (0, π/2)
u(0) = 0

 u(π/2) = 1

usando il metodo delle differenze finite del secondo ordine. Si mostri


inoltre l’ordine del metodo mediante un grafico logaritmico-logaritmico
dell’errore in norma infinito rispetto ad una soluzione di riferimento.
3. Si risolva il problema ai limiti
 ′′ ′
 u (x) + u (x) + u(x) − cos(x) = 0,
 x ∈ (0, π/2)
u′ (0) = 1

 u(π/2) = 1

usando il metodo delle differenze finite del secondo ordine. Si mostri


inoltre l’ordine del metodo mediante un grafico logaritmico-logaritmico
dell’errore in norma infinito rispetto ad una soluzione di riferimento.

81
82 CAPITOLO 14. ESERCIZI

4. Si risolva il problema ai limiti


 ′′
 u (x) = cos(u(x)),
 x ∈ (0, 1)
u(0) = 0

 u(1) = 1

usando il metodo delle differenze finite del secondo ordine.

5. Si risolva il problema ai limiti


 µ ¶
 d d
 − dx (1 + x) dx u(x) = 1, x ∈ (0, 1)

 u(0) = 0



u(1) = 0

Si mostri inoltre l’ordine del metodo mediante un grafico logaritmico-


logaritmico dell’errore in norma infinito rispetto alla soluzione esatta.

6. Si risolva il problema ai limiti


 ′′ ′
 u (x) = 20u (x) + u(x),
 x ∈ (0, 1)
u(0) = 0

 u(1) = 1

Visto l’andamento della soluzione, si implementi uno schema di diffe-


renze finite su nodi non equispaziati secondo una distribuzione di tipo
coseno. Si confrontino gli errori rispetto alla soluzione analitica.

7. Si ricavi la relazione di ricorrenza dei polinomi ortonormali nell’inter-


2 2
vallo [−∞, ∞] rispetto alla funzione peso w(x) = e−α x

8. Noti gli zeri dei polinomi di Legendre e i pesi di quadratura della ri-
spettiva formula gaussiana, si ricavino i nodi e i pesi di una formula
gaussiana nell’intervallo [a, b] rispetto al peso w(x) = 1.

9. Si risolva il problema ai limiti (14.1) usando il metodo di collocazio-


ne con polinomi di Legendre. Gli N nodi di collocazione in [a, b] e la
valutazione dei polinomi di Legendre e delle loro derivate sono dati dal-
la function [L,x,L1,L2] = legendrepolynomials(N,a,b). Si mostri
inoltre l’ordine del metodo mediante un grafico logaritmico-logaritmico
dell’errore in norma infinito.
Parte 2

ODEs
(Equazioni differenziali
ordinarie)

83
Capitolo 15

Introduzione

Consideriamo il sistema di equazioni differenziali ordinarie (ODEs) ai valori


iniziali (initial value problem)
 ′

 y1 (t) = f1 (t, y1 (t), y2 (t), . . . , yd (t))

 y2′ (t) = f2 (t, y1 (t), y2 (t), . . . , yd (t))

..


 .

 ′
yd (t) = fd (t, y1 (t), y2 (t), . . . , yd (t))

con dato iniziale 



 y1 (t0 ) = y1 0


 y2 (t0 ) = y2 0
..


 .


yd (t0 ) = yd 0

che può essere riscritto, in forma compatta,


(
y ′ (t) = f (t, y(t)), t > t0
(15.1)
y(t0 ) = y 0

Assumiamo y 0 ∈ Rd e f : [t0 , +∞) × Rd → Rd globalmente lipschitziana nel


secondo argomento

kf (t, x) − f (t, y)k ≤ λkx − yk ∀x, y ∈ Rd

Allora il sistema (15.1) ha un’unica soluzione.

84
15.1. RIDUZIONE IN FORMA AUTONOMA 85

15.1 Riduzione in forma autonoma


Un sistema in forma non autonoma
(
y ′ (t) = f (t, y(t)), t > t0
y(t0 ) = y 0
può essere ricondotto in forma autonoma mediante l’introduzione della va-
riabile
yd+1 (t) = t
Si giunge a  ′
 y (t) = f (yd+1 (t), y(t)), t > t0


 y ′ (t) = 1, t > t0
d+1

 y(t0 ) = y 0


yd+1 (t0 ) = t0

15.2 Equazioni di ordine superiore al primo


Le equazioni differenziali di ordine d del tipo


 y (d) (t) = f (t, y(t), y ′ (t), . . . , y (d−1) (t)), t > t0


 y(t ) = y0,0
 ′ 0


y (t0 ) = y0,1

 ..



 .

 (d−1)
y (t0 ) = y0,d−1
(cioè in cui vengono prescritti i valori iniziali della funzione e delle derivate)
si possono ricondurre ad un sistema di ODEs di ordine uno, mediante la
sostituzione 

 y1 (t) = y(t)

 y2 (t) = y ′ (t)

..


 .


yd (t) = y (d−1) (t)
dando cosı̀ luogo a
(
y ′ (t) = f (t, y(t))
y(t0 ) = [y0,0 , y0,1 , . . . , y0,d−1 ]T
ove
f (t, y(t)) = [y2 (t), y3 (t), . . . , yd (t), f (t, y1 (t), y2 (t), . . . , yd−1 (t))]T
Capitolo 16

Metodi ad un passo

16.1 Metodo di Eulero


Il metodo di Eulero (o Eulero esplicito, o forward Euler ) si basa sull’appros-
simazione
y(t) − y(t0 )
y ′ (t) ≈
t − t0
f (t, y(t)) ≈ f (t0 , y(t0 ))
per cui y(t) ≈ y(t0 ) + (t − t0 )f (t0 , y(t0 )). Pertanto l’approssimazione di y(t)
è ottenuta per interpolazione lineare a partire da (t0 , f (t0 , y(t0 ))), con pen-
denza f (t0 , y(t0 )). Può essere visto anche come applicazione della formula
di quadratura del rettangolo (estremo sinistro) alla soluzione analitica
Z t
y(t) = y(t0 ) + f (τ, y(τ ))dτ
t0
Data la sequenza t0 , t1 = t0 + k, t2 = t0 + 2k, . . . , tn = t0 + nk, . . ., ove k è il
passo temporale (o time step), lo schema numerico che ne risulta è
y n+1 = y n + kf (tn , y n ), n ≥ 0,
(16.1)
y 0 = y(t0 )
ove y n ≈ y(tn ). In pratica, y n+1 è la soluzione approssimata al tempo tn + k,
mediante un passo del metodo di Eulero, del sistema
(
y ∗ ′ (t) = f (t, y ∗ (t))
y ∗ (tn ) = y n
Se consideriamo l’intervallo temporale [t0 , t0 + t∗ ], indichiamo con y n,k (op-
pure y n,m ), n ≤ m, la soluzione approssimata al tempo tn mediante un gene-
rico metodo y n+1,k = Y n (f , k, y 0 , y 1,k , . . . , y n,k ) per la soluzione del sistema
differenziale (15.1), ove il passo temporale è k = t∗ /m.

86
16.1. METODO DI EULERO 87

Definizione 1. La quantità y(tn+1 )−Y n (f , k, y 0 , y(t1 ), . . . , y(tn )) si chiama


errore locale del metodo.

Se consideriamo il problema differenziale


(
y ∗ ′ (t) = f (t, y ∗ (t))
y ∗ (tn ) = y(tn )

si vede che l’errore locale coincide con y(tn+1 ) − y ∗n+1 , cioè con la differenza
tra la soluzione esatta al tempo tn+1 e la soluzione approssimata al tempo
tn+1 che si otterrebbe applicando il metodo numerico al problema differenziale
e supponendo esatta la soluzione al tempo tn . È chiaro allora che ad ogni
passo si commette un nuovo errore che si accumula con l’errore prodotto ai
passi precedenti. Per il metodo di Eulero, si ha

y(tn+1 ) − y(tn ) − kf (tn , y(tn )) =


k2
= y(tn ) + ky ′ (tn ) + y ′′ (tn ) + O(k 3 ) − y(tn ) − ky ′ (tn ) = O(k 2 ) (16.2)
2

(supponendo y ∈ C 2 ). Poiché ad ogni passo si commette un errore di ordine


O(k 2 ) e i passi sono m = t∗ /k, se tutto va bene, anche quando m → ∞ alla
fine si commette un errore di ordine t∗ /k · O(k 2 ) = O(k). È giustificata allora
la seguente

Definizione 2. Un metodo y n+1 = Y n (f , k, y 0 , . . . , y n ) è di ordine p se


y(tn+1 ) − Y n (f , k, y(t0 ), . . . , y(tn )) = O(k p+1 ), per k → 0, per qualunque f
analitica e 0 ≤ n ≤ m − 1.

La definizione sopra dice in verità che il metodo è almeno di ordine p.


Un metodo di ordine p ≥ 1 si dice consistente di ordine p, o semplicemente
consistente. Se y(tn+1 ) − Y n (f , k, y(t0 ), . . . , y(tn )) = 0 il metodo si dice
fortemente consistente. Dunque il metodo di Eulero è consistente di ordine 1.
Si tratta ora di dimostrare che tutto va bene.

Definizione 3. Il metodo y n+1,k = Y n (f , k, y 0 , y 1,k , . . . , y n,k ) è convergente


se
lim+ max ken,k k = 0
k→0 0≤n≤m

ove en,k = y n,k − y(tn ). La quantità maxn ken,k k si chiama errore globale.

Teorema 6. Il metodo di Eulero è convergente.


88 CAPITOLO 16. METODI AD UN PASSO

Dimostrazione. Assumiamo f (e dunque y) analitica. Dalle uguaglianze

y n+1,k = y n,k + kf (tn , y n,k ) (definizione del metodo)


2
y(tn+1 ) = y(tn ) + kf (tn , y(tn )) + O(k ) (errore locale (16.2))

si ricava
en+1,k = en,k + k[f (tn , y n ) − f (tn , y(tn ))] + O(k 2 )
da cui, siccome f è lipschitziana,

ken+1,k k ≤ ken,k k + kkf (tn , y n ) − f (tn , y(tn ))k + ck 2 ≤


≤ (1 + kλ)ken,k k + ck 2 , c > 0

Allora
c
k[(1 + kλ)n − 1], 0 ≤ n ≤ m
ken,k k ≤
λ
(si dimostra per induzione). Poiché 1 + kλ < ekλ , (1 + kλ)n < enkλ ≤ emkλ =

et λ . Dunque
c ∗
ken,k k ≤ k(et λ − 1), 0 ≤ n ≤ m
λ
da cui
lim+ max ken,k k = 0
k→0 0≤n≤m

In particolare, l’errore globale tende a 0 come k, come ci si aspettava. Da


notare che l’errore globale dipende anche dall’intervallo di tempo t∗ (anche se
la stima ottenuta è molto pessimistica, generalmente l’errore globale cresce
linearmente con l’ampiezza dell’intervallo di tempo).

16.2 Metodo dei trapezi


Il metodo dei trapezi (o metodo di Crank–Nicolson) si basa sull’approssima-
zione
y(t) − y(t0 )
y ′ (t) ≈
t − t0
1
f (t, y(t)) ≈ (f (t0 , y(t0 )) + f (t, y(t)))
2
Può essere visto anche come applicazione della formula di quadratura del
trapezio alla soluzione analitica
Z t
y(t) = y(t0 ) + f (τ, y(τ ))dτ
t0
16.2. METODO DEI TRAPEZI 89

Data la sequenza t0 , t1 = t0 + k, t2 = t0 + 2k, . . . , tn = t0 + nk, . . ., lo schema


numerico che ne risulta è
k
y n+1 = y n + (f (tn , y n ) + f (tn+1 , y n+1 )), n ≥ 0,
2 (16.3)
y 0 = y(t0 )
ove y n ≈ y(tn ). Dato lo schema
k
y n+1 − y n − (f (tn , y n ) + f (tn+1 , y n+1 )) = 0
2
sostituendo y n con y(tn ) e y n+1 con y(tn+1 ) si ottiene

k
y(tn+1 ) − y(tn ) − (f (tn , y(tn )) + f (tn+1 , y(tn+1 ))) =
2
2
k k3 k
= y(tn )+ky ′ (tn )+ y ′′ (tn )+ y ′′′ (tn )+O(k 4 )−y(tn )− (y ′ (tn )+y ′ (tn+1 )) =
2 6 2
2 3
k k
ky ′ (tn ) + y ′′ (tn ) + y ′′′ (tn ) + O(k 4 )+
µ 2 6 ¶
k k 2 ′′′
− ′ ′ ′′
y (tn ) + y (tn ) + ky (tn ) + y (tn ) + O(k ) = O(k 3 )
3
2 2
(supponendo y ∈ C 3 ). Dunque il metodo dei trapezi è di ordine 2.
Teorema 7. Il metodo dei trapezi è convergente.
Dimostrazione. Si ha
k
en+1,k = en,k + (f (tn , y n ) − f (tn , y(tn )))+
2
k
+ (f (tn+1 , y n+1 ) − f (tn+1 , y(tn+1 ))) + O(k 3 )
2
da cui

ken+1,k k ≤ ken,k k + (ken,k k + ken+1,k k) + ck 3 , c>0
2
Se k < 2/λ,
à ! à !

1+ c
ken+1,k k ≤ 2

ken,k k + k3
1− 2
1 − kλ
2

Allora "Ã !n #

ck 2 1+ 2
ken,k k ≤ kλ
−1 , 0≤n≤m
λ 1− 2
90 CAPITOLO 16. METODI AD UN PASSO

(si dimostra per induzione). Si conclude osservando che


à !n à !n µ ¶ µ ¶
1 + kλ
2 kλ nkλ t∗ λ
= 1+ ≤ exp ≤ exp
1 − kλ
2
1 − kλ
2
1 − kλ/2 1 − kλ/2

100

pendoloperiod.m
10−1

m
10−2
4 periodi
error in innity norm

3 periodi

10−3 2 periodi

10−4 1 periodo

m−2
10−5

10−6
200 400 600 800
m

Figura 16.1: Errori del metodo dei trapezi per l’equazione del pendolo
linearizzata.

In Figura 16.1 si vede chiaramente che l’errore (per l’equazione del pen-
dolo linearizzata) decade come k 2 ∝ m−2 e che lo stesso cresce linearmente
con l’intervallo di tempo. Entrambi i metodi descritti sono ad un passo (cioè
la soluzione y n+1 dipende esplicitamente solo da y n ). Il metodo dei trapezi è
però implicito, cioè la soluzione y n+1 è implicitamente definita dall’equazione
(in generale non lineare)
k k
Fn (y n+1 ) = y n+1 − f (tn+1 , y n+1 ) − y n − f (tn , y n ) = 0
2 2

16.3 θ-metodo
Il θ-metodo è una generalizzazione dei metodi precedenti e si scrive
y n+1 = y n + k[(1 − θ)f (tn , y n ) + θf (tn+1 , y n+1 )], n≥0
(16.4)
y 0 = y(t0 )
16.3. THETA-METODO 91

È facile verificare che

y(tn+1 ) − y(tn ) − k[(1 − θ)f (tn , y(tn )) + θf (tn+1 , y(tn+1 ))] =


µ ¶ µ ¶
1 2 ′′ 1 θ
= − θ k y (tn ) + − k 3 y ′′′ (tn ) + O(k 4 ) (16.5)
2 6 2

e dunque il metodo ha ordine due se θ = 12 , e ordine uno altrimenti. In par-


ticolare, se y ′′ (t) è nulla, tale è l’errore locale per il θ-metodo. E se θ = 21 e
y ′′′ (t) è nulla, tale è l’errore locale. Poiché però ad ogni passo si commettono
errori di arrotondamento (nel caso esplicito) o di arrotondamento e appros-
simazione (nel caso implicito, in cui c’è da risolvere un sistema non lineare),
per avere la convergenza è comunque necessario che questi non si accumulino
in maniera distruttiva.
Possiamo considerare anche in questo caso il problema differenziale
(
y ∗ ′ (t) = f (t, y ∗ (t))
y ∗ (tn ) = y(tn )

e applicare un passo del θ-metodo. Si ha

y ∗n+1 = y(tn ) + k[(1 − θ)f (tn , y(tn )) + θf (tn+1 , y ∗n+1 )]

da cui
y(tn+1 ) − y ∗n+1 = kθ[f (tn+1 , y(tn+1 )) − f (tn+1 , y ∗n+1 )]+
µ ¶ µ ¶
1 2 ′′ 1 θ
+ − θ k y (tn ) + − k 3 y ′′′ (tn ) + O(k 4 )
2 6 2

Posto e∗n+1 = y(tn+1 ) − y ∗n+1 , si ha


µ ¶ µ ¶
∗ ∗ 1 2 1 θ
ken+1 k ≤ kθλken+1 k + − θ O(k ) + − O(k 3 ) + O(k 4 )
2 6 2

Dunque, se k è sufficientemente piccolo,


µ ¶ µ ¶
∗ 1 2 1 θ
ken+1 k ≤ − θ O(k ) + − O(k 3 ) + O(k 4 )
2 6 2

Quindi, anche per uno schema implicito, l’errore di troncamento locale è


dello stesso ordine della differenza tra la soluzione esatta al tempo tn+1 e
la soluzione che si otterrebbe applicando il metodo numerico e supponendo
esatta la soluzione al tempo tn .
92 CAPITOLO 16. METODI AD UN PASSO

Teorema 8. Il θ-metodo, per θ ∈ [0, 1], è convergente.


Osserviamo che:
• il metodo è esplicito per θ = 0 (e in tal caso si riduce al metodo di
Eulero esplicito);
1
• il metodo è di ordine due per θ = 2
(e in tal caso si riduce al metodo
dei trapezi);

• il metodo per θ = 1 si chiama Eulero implicito (backward Euler);

• per θ = 13 il metodo è di ordine uno, ma il termine contenente la derivata


terza della soluzione è annullato.

16.3.1 Risoluzione di un metodo implicito


Nel caso implicito (θ 6= 0), ad ogni passo n si deve risolvere un sistema di
equazioni in generale non lineari Fn (x) = 0, x = y n+1 , ove

Fn (x) = x − kθf (tn+1 , x) − y n − k(1 − θ)f (tn , y n )

La prima idea potrebbe essere quella di applicare il metodo di punto fisso:

x(r+1) = g(x(r) ) = kθf (tn+1 , x(r) ) + y n + k(1 − θ)f (tn , y n )

La funzione g soddisfa

kg(x) − g(y)k = kkθf (tn+1 , x) − kθf (tn+1 , y)k ≤ kθλkx − yk

ed è una contrazione se
1
kθλ < 1 ⇒ k < (16.6)
θλ
Dunque, a patto di prendere k sufficientemente piccolo, si può ricavare la
soluzione x = y n+1 con il metodo del punto fisso, partendo, per esempio,
da x(0) = y n . Il metodo del punto fisso, facile da applicare, ha convergenza
lineare ed è inoltre soggetto ad una restrizione sul passo k che potrebbe essere
eccessiva. Per questi motivi è utile considerare anche il metodo di Newton
per la risoluzione del sistema non lineare. La matrice jacobiana associata è
µ ¶
∂fi (tn+1 , x)
Jn (x) = I − kθ
∂xj ij

Il calcolo di y n+1 , con y n come valore iniziale, con il metodo di Newton


avviene dunque secondo il seguente algoritmo:
16.3. THETA-METODO 93

• r=0

• x(r) = y n

• Jn (x(r) )δ (r) = −Fn (x(r) )

• while kδ (r) k > Newt tol

x(r+1) = x(r) + δ (r)


r =r+1
Jn (x(r) )δ (r) = −Fn (x(r) )

end

• y n+1 = x(r)

In Matlab/Octave l’implementazione potrebbe essere:

f = @(t,y) ... % rhs dell’equazione


j = @(t,y) ... % jacobiano di f
F = @(tn,yn,t,y) y - k * theta * f(t,y) - yn - k * (1 - theta) * f(tn,yn)
J = @(t,y) eye(length(y)) - k * theta * j(t,y)
y(:,1) = y0;
t = 0;
for n = 1:ts
y(:,n+1) = y(:,n);
errest = -J(t + k,y(:,n + 1)) \ F(t,y(:,n),t + k,y(:,n + 1));
while (norm(errest,inf) > Newt_tol)
y(:,n + 1) = y(:,n + 1) + errest;
errest = -J(t + k,y(:,n + 1)) \ F(t,y(:,n),t + k,y(:,n + 1));
end
t = t + k;
end

La tolleranza Newt tol va presa tenendo conto che si sta comunque commet-
tendo un errore proporzionale a k 2 (trapezi) o addirittura k. Come valore
iniziale x(0) , invece di y n si può prendere y n + kf (tn , y n ), che corrisponde
a y(tn+1 ) approssimato con il metodo di Eulero e dunque dovrebbe essere
un’approssimazione migliore di y n+1 (ma si veda il capitolo 19). Anche altre
scelte possono andare bene, a patto di avere convergenza del metodo.
94 CAPITOLO 16. METODI AD UN PASSO

16.3.2 Newton inesatto e passo variabile


Nel caso in cui il calcolo e/o la risoluzione dei sistemi lineari con Jn (x(r) ) ri-
sulti particolarmente oneroso, si può ricorrere al metodo di Newton inesatto,
considerando ad ogni passo la matrice jacobiana costante Jn (x(r) ) ≡ Jn (x(0) ),
o, in generale, qualunque modifica della matrice jacobiana. A questo punto,
la si può fattorizzare in LU una sola volta per passo temporale e poi risol-
vere i sistemi con le corrispondenti matrici triangolari. Il metodo di Newton
inesatto converge generalmente in maniera lineare e dunque serviranno più
iterazioni (ma meno costose) rispetto al metodo di Newton esatto. Per inci-
so, questo è il sintomo principale di una matrice jacobiana non corretta. Il
numero di iterazioni necessarie alla convergenza dipende (anche) dalla vici-
nanza della soluzione iniziale x(0) = y n a quella finale y n+1 . Tanto più sono
vicine, tante meno iterazioni serviranno, e viceversa. Se in un certo intervallo
di tempo la soluzione non varia molto, allora è plausibile pensare di prendere
i successivi passi temporali più grandi. Viceversa, se varia molto, può essere
necessario prendere i successivi passi temporali più piccoli. La velocità di
convergenza del metodo di Newton inesatto è un indicatore della variazione
della soluzione. Il metodo di Newton inesatto a passo variabile potrebbe
essere implementato nel seguente modo (θ 6= 0):
• r=0

• x(r) = y n

• Fn (x(r) ) = x(r) − kn+1 θf (tn+1 , x(r) ) − y n − kn+1 (1 − θ)f (tn , y n )


³ ´
(r) ∂fi (tn+1 ,x(r) )
• Jn (x ) = I − kn+1 θ ∂xj
ij

• Pn Jn (x(r) ) = Ln Un

• Ln Un δ (r) = −Pn Fn (x(r) )

• while kδ (r) k > Newt tol

x(r+1) = x(r) + δ (r)


r =r+1
Ln Un δ (r) = −Pn Fn (x(r) )

end

• y n+1 = x(r)

• if r < rmin then kn+2 = kn+1 ρ


16.4. VERIFICA DELL’IMPLEMENTAZIONE 95

else if r > rmax then kn+2 = kn+1 /ρ


Dunque, dato il passo temporale kn+1 = tn+1 − tn , il successivo passo tem-
porale kn+2 è uguale a kn+1 se il metodo di Newton inesatto ha raggiunto la
convergenza in un numero di iterazioni r compreso tra rmin e rmax , è amplifi-
cato da un fattore ρ > 1 se il numero di iterazioni è stato più piccolo di rmin
ed è ridotto dello stesso fattore se il numero di iterazioni è stato più grande
di rmax (ove rmax > rmin ). Ovviamente i valori di ρ, rmin e rmax dipendono dal
problema. Bisognerebbe prevedere anche un numero massimo di iterazioni
R dentro il ciclo while del metodo di Newton: raggiunto tale numero, il
passo corrente kn+1 andrebbe ridotto (per esempio a kn+1 /δ e si dovrebbe
procedere nuovamente al calcolo di y n+1 .
Nel caso in cui non sia necessario applicare il metodo di Newton (perché
il problema è lineare), il numero di iterazioni da considerare potrebbe essere
quello necessario ad un metodo iterativo per risolvere i sistemi lineari.

16.3.3 Caso lineare


Un caso molto frequente è quello lineare autonomo a coefficienti costanti
(
y ′ (t) = Ay(t) + b
y(t0 ) = y 0
con passo di integrazione k costante. In tal caso, il metodo si scrive
(I − kθA)y n+1 = (I + k(1 − θ)A)y n + kb
Nel caso implicito, si tratta dunque di risolvere un sistema lineare di matrice
I − kθA ad ogni passo. Pertanto, per problemi di piccola dimensione, è
conveniente precalcolare la fattorizzazione LU della matrice. Altrimenti, si thetametodolin.m
può considerare un metodo iterativo, ove si scelga come vettore iniziale per il
calcolo di y n+1 la soluzione al passo precedente y n . Se il termine b dipende
invece dal tempo, allora kb va sostituito, ovviamente, con k(1 − θ)b(tn ) +
kθb(tn+1 ).

16.4 Verifica della correttezza dell’implemen-


tazione
Supponiamo di aver implementato un metodo di ordine p per la soluzione del
sistema differenziale (
y ′ (t) = f (t, y(t))
y(t0 ) = y 0
96 CAPITOLO 16. METODI AD UN PASSO

e di volerne testare la corretta implementazione. L’idea è quella di creare


una soluzione artificiale x(t), inserirla nell’equazione e calcolarne il residuo

x′ (t) − f (t, x(t)) = g(t)

A questo punto, si risolve il sistema differenziale


(
y ′ (t) = f (t, y(t)) + g(t) = f̂ (t, y(t))
y(t0 ) = x(t0 )

fino ad un tempo t0 + t∗ fissato, con due discretizzazioni di passo costante


k1 = t∗ /m1 e k2 = t∗ /m2 , rispettivamente. Si avranno errori finali em1 ,k1 =
ky m1 ,k1 − x(t0 + t∗ )k = Ck1p e em2 ,k2 = ky m2 ,k2 − x(t0 + t∗ )k = Ck2p . Si ha
dunque µ ¶p
em2 ,k2 k2
= ,
em1 ,k1 k1
da cui

log em2 ,k2 − log em1 ,k1 = p(log k2 − log k1 ) = −p(log m2 − log m1 ).

Dunque, rappresentando in un grafico logaritmico-logaritmico l’errore in di-


pendenza dal numero di passi, la pendenza della retta corrisponde all’ordine
del metodo, cambiato di segno. Tale verifica è valida anche nel caso di passi
non costanti.
Nel caso f (t, y(t)) sia particolarmente complicato, invece di calcolare il
residuo, si può calcolare una soluzione di riferimento y m̄,k̄ e poi confrontare
con essa le soluzioni y m1 ,k1 e y m2 ,k2 , ove m1 , m2 ≪ m̄. In questo caso, però, si
può mostrare solo che il metodo converge con l’ordine giusto ad una soluzione,
non necessariamente quella giusta.
Capitolo 17

Metodi multistep

17.1 Metodi di Adams–Bashforth


Invece di costruire la soluzione y n+1 a partire dalla sola soluzione al passo
precedente y n , si può pensare di usare le soluzioni di più passi precedenti.
Fissato s numero naturale maggiore di 0 e una discretizzazione dell’intervallo
[t0 , t0 + t∗ ] in m passi di ampiezza costante k, data la formula di risoluzione
Z tn+s
y(tn+s ) = y(tn+s−1 ) + f (τ, y(τ ))dτ (17.1)
tn+s−1

l’idea è quella di sostituire la funzione integranda in (17.1) con il “suo” po-


linomio interpolatore sui nodi equispaziati tn , tn+1 , . . . , tn+s−1 (tn+j = tn +
jk)
s−1
X
p(τ ) = Lj (τ )f (tn+j , y n+j )
j=0

ove Lj (t) è il polinomio elementare di Lagrange di grado s − 1 definito da


Lj (tn+i ) = δij . Poiché p(tn+j ) = f (tn+j , y n+j ), 0 ≤ j ≤ s − 1 (e non,
ovviamente, p(tn+j ) = f (tn+j , y(tn+j ))), dobbiamo supporre di avere già a
disposizione i valori iniziali y n+j ≈ y(tn+j ), 0 ≤ j ≤ s − 1. Si ha dunque
Z tn+s s−1 µZ
X tn+s ¶ s−1
X
p(τ )dτ = Lj (τ )dτ f (tn+j , y n+j ) = k bj f (tn+j , y n+j )
tn+s−1 j=0 tn+s−1 j=0

da cui il metodo esplicito multistep Adams–Bashforth


s−1
X
y n+s = y n+s−1 + k bj f (tn+j , y n+j ) (17.2)
j=0

97
98 CAPITOLO 17. METODI MULTISTEP

I coefficienti bj non dipendono da n e neanche da k: infatti


Z s−1
tn+s Y Z s−1
1Y
1 τ − tn+i tn+s−1 + rk − tn+i
bj = dτ = dr =
k tn+s−1 i=0 tn+j − tn+i 0 i=0
tn+j − tn+i
i6=j i6=j
Z s−1
1Y Z s−1
1Y
((s − 1 − i)k + rk) ((s − 1 − i) + r)
= dr = dr
0 i=0
(j − i)k 0 i=0
(j − i)
i6=j i6=j

Dunque possono essere calcolati una volta per tutte. Calcoliamo l’ordine di
tale metodo: come al solito, dobbiamo valutare l’espressione
s−1
X
y(tn+s ) − y(tn+s−1 ) − k bj f (tn+j , y(tn+j ))
j=0

L’ultimo termine è l’integrale del polinomio q(τ ) di grado s − 1 che interpola


f (tn+j , y(tn+j )), 0 ≤ j ≤ s − 1. Dunque, per tn+s−1 ≤ τ ≤ tn+s ,

ky (s+1) (τ̄ )k
kf (τ, y(τ )) − q(τ )k ≤ |(τ − tn ) · . . . · (τ − tn+s−1 )| ≤
s! | {z }
s termini
(s+1)
ky (τ̄ )k
≤ s!k s = O(k s ), tn+s−1 ≤ τ ≤ tn+s
s!
e quindi
s−1
X
y(tn+s ) − y(tn+s−1 ) − k bj f (tn+j , y(tn+j )) =
j=0
Z tn+s s−1
X
f (τ, y(τ ))dτ − k bj f (tn+j , y(tn+j )) =
tn+s−1 j=0
Z tn+s Z tn+s
f (τ, y(τ ))dτ − q(τ )dτ = O(k s+1 )
tn+s−1 tn+s−1

perché un ulteriore fattore k deriva dal fatto che si integra in un intervallo


di ampiezza k. Quindi, se anche y n = y(tn ) + O(k s ), 1 ≤ n ≤ s − 1 (queste
approssimazioni non possono essere ottenute con il metodo stesso), il metodo
è di ordine s. Calcoliamo esplicitamente i metodi che corrispondono a s = 1
e s = 2. Se s = 1, dobbiamo cercare il polinomio di grado 0 che interpola
f (tn , y n ). È ovviamente p(τ ) ≡ f (tn , y n ) e b0 = 1, quindi

y n+1 = y n + kf (tn , y n )
17.2. METODI LINEARI MULTISTEP 99

e si ritrova il metodo di Eulero. Nel caso s = 2, il polinomio interpolatore è


tn+1 − τ τ − tn
p(τ ) = f (tn , y n ) + f (tn+1 , y n+1 )
k k
e dunque
Z tn+2 Z tn+2
1 tn+1 − τ 1 1 τ − tn 3
b0 = dτ = − , b1 = dτ =
k tn+1 k 2 k tn+1 k 2

da cui
k 3k
y n+2 = y n+1 − f (tn , y n ) + f (tn+1 , y n+1 ) (17.3)
2 2
Il valore y 1 può essere ricavato, per esempio, anche con il metodo di Eulero,
poiché si ha, in tal caso, y 1 = y(t1 ) + O(k 2 ).

17.2 Metodi lineari multistep


Una semplice generalizzazione del metodo di Adams–Bashforth è permettere
che il metodo sia implicito:
s
X
y n+s = y n+s−1 + k bj f (tn+j , y n+j ) (17.4)
j=0

Questa famiglia di metodi prende il nome di Adams–Moulton. Il caso banale


s = 0 dà
y n = y n−1 + kb0 f (tn , y n )
da cui, per b0 = 1, si ottiene una riscrittura del metodo di Eulero implicito.
Per s = 1 abbiamo il θ-metodo (b0 = (1 − θ), b1 = θ). In generale, un metodo
Adams–Moulton a s passi ha ordine massimo s + 1. Una generalizzazione
ulteriore è
Xs s
X
aj y n+j = k bj f (tn+j , y n+j ) (17.5)
j=0 j=0

con la normalizzazione as = 1. Il metodo è di ordine p se, come al solito,


s
X s
X
aj y(tn+j ) − k bj f (tn+j , y(tn+j )) = O(k p+1 )
j=0 j=0

per ogni funzione f analitica e 0 ≤ n ≤ m − s. Siccome la verifica può


risultare molto tediosa, risulta utile il seguente
100 CAPITOLO 17. METODI MULTISTEP

Teorema 9. Dato un metodo multistep (17.5), definiamo i due polinomi


s
X s
X
j
ρ(w) = aj w , σ(w) = bj w j
j=0 j=0

Allora il metodo è di ordine p se e solo se esiste c 6= 0 tale che


¡ ¢
ρ(1 + ξ) − σ(1 + ξ) · ln(1 + ξ) = cξ p+1 + O ξ p+2 per ξ → 0

Prima di vedere la traccia della dimostrazione, proviamo ad applicare il


teorema a qualche caso noto. Per il metodo di Eulero si ha ρ(1 + ξ) = ξ e
σ(1 + ξ) = 1. Si ha
µ ¶
ξ2 3 ξ2
ξ−1· ξ− + O(ξ ) = + O(ξ 3 )
2 2

e dunque il metodo è di ordine 1, come noto. Per il metodo di Adams–


Bashforth (17.3) si ha ρ(1 + ξ) = (1 + ξ)2 − (1 + ξ) = ξ 2 + ξ e σ(1 + ξ) =
3(1 + ξ)/2 − 1/2. Si ha
µ ¶ µ ¶
2 3 1 ξ2 ξ3 5
(ξ + ξ) − (1 + ξ) − · ξ− + − O(ξ ) = ξ 3 + O(ξ 4 )
4
2 2 2 3 12

e dunque il metodo è di ordine 2, come noto.

Traccia della dimostrazione del Teorema 9. Si ha


s
X s
X
aj y(tn+j ) − k bj f (tn+j , y(tn+j )) =
j=0 j=0
s
X s
X
aj y(tn + jk) − k bj y ′ (tn + jk) =
j=0 j=0
s ∞ s ∞
X X
(i)j iki X X j iki
= aj y (tn ) −k bj y (i+1) (tn ) =
j=0 i=0
i! j=0 i=0
i!
s
à ∞
! s ∞
i i
X X
(i) j k X X j i−1 k i−1
= aj y(tn ) + y (tn ) −k bj y (i) (tn ) =
j=0 i=1
i! j=0 i=1
(i − 1)!
à s ! ∞
às s
!
X X1 X X
= aj y(tn ) + j i aj − i j i−1 bj k i y (i) (tn )
j=0 i=1
i! j=0 j=0
17.2. METODI LINEARI MULTISTEP 101

Dunque l’ordine è p se e solo se i coefficienti delle potenze fino a p di k sono


nulli, e cioè se le 2s + 1 incognite {aj }s−1 s
j=0 e {bj }j=0 soddisfano il sistema
lineare s s
X X
i
j aj = i j i−1 bj , i = 0, 1, . . . , p (17.6)
j=0 j=0

Da notare che, per i = j = 0, si intende j i = 1. Per finire la dimostrazione, si


calcola lo sviluppo in serie di Taylor di ρ(ez ) − σ(ez )z per z → 0 e si osserva
che esso è O(z p+1 ) se e solo se vale (17.6). Posto w = ez , l’ordine è p se e
solo se lo sviluppo di ρ(w) − σ(w) · ln w per w → 1 vale
¡ ¢ ¡ ¢
−c(ln w)p+1 + O (ln w)p+2 = c(w − 1)p+1 + O (w − 1)p+2

A questo punto, si pone ξ = w − 1.


Non bisogna dimenticare che l’ordine è p se y(t) è almeno di classe C p+1 .
Pertanto, qualora ci si aspetti una soluzione non regolare, potrebbe non essere
adatto un metodo di ordine alto. In realtà, anche le condizioni (17.6) sono
molto utili per determinare l’ordine di un metodo multistep: per esempio,
per il metodo lineare multistep (implicito) a due passi

y n+2 − 3y n+1 + 2y n =
k £ ¤
= −5f (tn , y n ) − 20f (tn+1 , y n+1 ) + 13f (tn+2 , y n+2 ) (17.7)
12
si ha
a0 + a1 + a2 =0
a1 + 2a2 = b0 + b1 + b2 ⇒ ordine (almeno) 1
a1 + 4a2 = 2(b1 + 2b2 ) ⇒ ordine (almeno) 2
a1 + 8a2 6= 3(b1 + 4b2 ) ⇒ ordine 2

17.2.1 Metodi BDF


I metodi BDF (Backward Differentiation Formulas) sono metodi multistep
impliciti a s passi, di ordine s e con σ(w) = βws . Dato σ(w) e le condizioni
d’ordine, si può costruire ρ(w). Poiché però tali metodi sono della forma
s
X
aj y n+j = kbs f (tn+s , y n+s )
j=0

e kbs f (tn+s , y n+s ) ≈ kbs y ′ (tn + sk), conviene cercare una combinazione li-
neare di y n+j , 0 ≤ j ≤ s che approssimi kbs y ′ (tn+s ). Si procede dunque con
102 CAPITOLO 17. METODI MULTISTEP

lo sviluppo in serie di Taylor di y(tn + jk), 0 ≤ j ≤ s, centrato in y(tn + sk).


Per esempio, per s = 1,

(
y(tn ) = y(tn + k) − ky ′ (tn + k) + O(k 2 )
y(tn + k) = y(tn + k)

da cui a1 = 1 e a0 = −1. Dunque, il metodo BDF di ordine 1 è il metodo di


Eulero implicito (backward Euler). Per s = 2


4k 2 ′′


 y(tn ) = y(tn + 2k) − 2ky ′ (tn + 2k) + y (tn + 2k) + O(k 3 )

 2
′ k 2 ′′
 y(tn + k) = y(tn + 2k) − ky (tn + 2k) + y (tn + 2k) + O(k 3 )


 2

y(tn + 2k) = y(tn + 2k)

da cui

 1
 
 a0 =

 a 2 = 1 

 3
 a = −4
 
 a0 + a1 + a2 = 0
 
1
− 2a − a = b ⇒ 3 (17.8)
 0 1 2 
  a = 1
 2a0 + a1 = 0

 
 2

2


 2
 b2 =
3

e il metodo è di ordine 2.
I metodi BDF sono gli unici metodi multistep in cui non è difficile calcolare
i coefficienti anche nel caso di passi temporali variabili. Sempre per s = 2,
se tn+1 = tn + kn+1 e tn+2 = tn+1 + kn+2 , allora


 y(tn ) = y(tn + kn+1 + kn+2 ) − (kn+1 + kn+2 )y ′ (tn + kn+1 + kn+2 )+




 (kn+1 + kn+2 )2 ′′

 + y (tn + kn+1 + kn+2 ) + . . .

 2
y(tn + kn+1 ) = y(tn + kn+1 + kn+2 ) − kn+2 y ′ (tn + kn+1 + kn+2 )+

 2

 kn+2

 + y ′′ (tn + kn+1 + kn+2 ) + . . .



 2
y(tn + kn+1 + kn+2 ) = y(tn + kn+1 + kn+2 )
17.3. CONSISTENZA E STABILITÀ 103

da cui i coefficienti
 2
kn+2



 a 0 =
 a2 = 1 

 (kn+1 + 2kn+2 )kn+1
  2
 a = − (kn+1 + kn+2 )
 
 a0 + a1 + a2 = 0
 
1
− a0 (kn+1 + kn+2 ) − a1 kn+2 = b2 kn+2 ⇒ (kn+1 + 2kn+2 )kn+1

 

 0 (kn+1 + kn+2 )2 + a1 k 2 = 0

 a 

 a2 = 1

2 2 n+2 


 b2 =
(kn+1 + kn+2 )
(kn+1 + 2kn+2 )

Va notato però che √ il metodo che ne risulta in generale non converge se


kn+2 /kn+1 ≥ 1 + 2. E rimane aperto poi il problema di scegliere come
cambiare il passo (vedi però il paragrafo 16.3.2). Questi metodi risultano
particolarmente vantaggiosi quando la valutazione della funzione f è onerosa,
poiché permettono di raggiungere un ordine elevato con una sola valutazione
(nel caso lineare, altrimenti è necessario valutare f in un ciclo di Newton ad
ogni passo temporale).

17.3 Consistenza e stabilità


Dalle condizioni d’ordine (17.6), si vede che un metodo lineare multistep è
consistente se
ρ(1) = 0, ρ′ (1) = σ(1)
La consistenza, però, non è sufficiente ad assicurare la convergenza di un
metodo. Consideriamo l’applicazione del metodo BDF2 (17.8) e del metodo
a due passi del secondo ordine (17.7) al semplice problema differenziale
(
y ′ (t) = 0, t > 0
(17.9)
y(0) = e

la cui soluzione è evidentemente y(t) ≡ e. L’applicazione del secondo metodo


porge
yn+2 − 3yn+1 + 2yn = 0
Dunque y0 = e e prendiamo pure y1 = e. Allora, y2 = 3e − 2e che, a causa
degli errori di arrotondamento, vale e + ε, ε < 9 · 10−16 . Poi, y3 = 3y2 − 2y1 =
3(e + ε) − 2e. Anche senza introdurre ulteriori errori di arrotondamento (che,
in realtà, ci sono), si ha y3 = e + 3ε. In generale, si ha

yn = e + (2n−1 − 1)ε
104 CAPITOLO 17. METODI MULTISTEP

step BDF2 (17.8) metodo (17.7)


y2 2.7182818284590451e+00 2.7182818284590455e+00
y3 2.7182818284590451e+00 2.7182818284590473e+00
y10 2.7182818284590451e+00 2.7182818284593857e+00
y20 2.7182818284590451e+00 2.7182818288082906e+00
y30 2.7182818284590451e+00 2.7182821860869133e+00
y40 2.7182818284590451e+00 2.7186480393965446e+00
y50 2.7182818284590451e+00 3.0932818284590446e+00
y60 2.7182818284590451e+00 3.8671828182845888e+02
y70 2.7182818284590451e+00 3.9321871828182810e+05
y80 2.7182818284590451e+00 4.0265318671828151e+08
y90 2.7182818284590451e+00 4.1231686041871790e+11
y100 2.7182818284590451e+00 4.2221246506598656e+14

Figura 17.1: Primi passi di risoluzione del problema test (17.9).

Dunque, se il numero di passi è m = t∗ /k, si ha


lim yn,k = lim yn = ∞
k→0 n→∞

come ben si vede dalla Tabella 17.1. Abbiamo quindi un metodo la cui
soluzione numerica diverge facendo tendere il passo temporale a 0 (cioè pro-
prio l’opposto di quanto dovrebbe succedere). È proprio un piccolo errore
commesso ad un passo che si accumula in maniera distruttiva. Si potrebbe
pensare che il problema nasca dall’arrotondamento dell’aritmentica di mac-
china e che in assenza di questo tutto possa funzionare, ma non è cosı̀. Per
il problema (17.9) consideriamo un metodo ad s passi di ordine p i cui primi
valori siano
zj = k p θj + e, 0 ≤ j ≤ s − 1
ove θ è una radice del polinomio ρ(w) (che d’ora in poi chiameremo carat-
teristico). Sono valori accettabili, in quanto distano O(k p ) dalla soluzione
analitica (per contro, e + ε dista O(1) per qualunque k). Ora zs si trova
risolvendo s
X
aj zj = 0
j=0

da cui
s−1
X s−1
X s−1
X
p j
zs = − aj zj = −k aj θ − e aj = k p θ s + e
j=0 j=0 j=0
P
ove si è usato ρ(θ) = 0 e j aj = 0. Per induzione si arriva a provare che
zn,k = zn = k p θn + e
17.3. CONSISTENZA E STABILITÀ 105

è una soluzione di (17.9), con zn,k − y(tn ) = k p θn . Dunque il metodo è


consistente ma, se vogliamo che fissato l’istante tn si abbia limk→0 zn,k = y(tn )
occorre che |θ| ≤ 1. Se θ è radice multipla di ρ(w), allora è radice anche di
ρ′ (w) e pertanto soddisfa
s
X

ρ (θ) = aj jθj−1 = 0
j=0

Allora anche zn,k = zn = k p nθn + e è una soluzione numerica. Infatti


s
às s
! s
X X X X
p n j n+1 j−1
aj zn+j = k θ aj nθ + θ aj jθ +e aj =
j=0 j=0 j=0 j=0
p n p n+1 ′
= k θ nρ(θ) + k θ ρ (θ) + 0 = 0

ed è generata dai valori iniziali zj = k p jθj + e, 0 ≤ j ≤ s − 1. Se vogliamo


che zn,k converga alla soluzione analitica per k → 0, deve essere |θ| < 1.
Se il polinomio caratteristico ha radici semplici θ tali che |θ| ≤ 1 e radici
multiple θ tali che |θ| < 1, diremo che il polinomio soddisfa la condizione
delle radici. Consideriamo adesso yn = e e zn = k p θn + e, θ radice del
polinomio caratteristico. Sono entrambe soluzioni consistenti del problema e
le seconde sono state generate ammettendo delle perturbazioni δj = k p θj per
i primi s termini. Dunque

|zj,k − yj,k | = |δj | ≤ max k p |θ|j


0≤j≤s

mentre le soluzioni distano

|zn,k − yn,k | = k p θn

e se θ non è minore o uguale di 1, tali differenze non sono limitate. Dunque,


un insieme di perturbazioni limitate può produrre un insieme di soluzioni
non limitate. Allo stesso modo, se si considerano le soluzioni yn = e e
zn = k p nθn + e, θ radice multipla del polinomio caratteristico, si ha

|zj,k − yj,k | = |δj | ≤ max k p j|θ|j


0≤j≤s

mentre
|zn,k − yn,k | = k p nθn
e quindi le soluzioni divergono se |θ| ≥ 1. È giustificata allora (in analogia
con quanto visto al paragrafo 10.2.7) la seguente
106 CAPITOLO 17. METODI MULTISTEP

Definizione 4. Dato un metodo lineare multistep (17.5), siano z in , i = 1, 2,


due perturbazioni della soluzione definite da

z ij = y j + δ ij , 0≤j ≤s−1
X s s
X
aj z in+j = k bj f (tn+j , z in+j ) + δ in+s , 0 ≤ n ≤ m − s
j=0 j=0

Se da maxn kδ 1n −δ 2n k ≤ ε segue maxn kz 1n −z 2n k ≤ Cε per k piccolo a piacere,


allora il metodo (17.5) si dice (zero-)stabile.
Oltre alla consistenza, l’altro ingrediente per avere la convergenza di un
metodo è proprio la stabilità. Infatti, posto, come al solito,
s−1
X s−1
X
y ∗n+s + aj y(tn+j ) = k bj f (tn+j , y(tn+j )) + kbs f (tn+s , y ∗n+s )
j=0 j=0

l’errore al passo n + s può essere espresso come

en+s = y n+s − y(tn+s ) = (y n+s − y ∗n+s ) + (y ∗n+s − y(tn+s )) (17.10)

ove il secondo termine è dell’ordine dell’errore locale e il primo termine tiene


conto dell’accumulazione degli errori ai passi precedenti, cioè delle pertur-
bazioni tra la soluzione esatta e la soluzione numerica ai passi precedenti.
Guardando la rappresentazione dell’errore (17.10), si vede che il primo ter-
mine (y n+s − y ∗n+s ) è la differenza tra due particolari soluzioni perturbate z 1n
e z 2n corrispondenti a
δ 1j = 0, 0 ≤ j ≤ m
e
δ 2j = y(tj ) − y j , 0≤j ≤s−1
s−1
X s−1
X
δ 2n+s = −k bj f (tj+n , z j+n ) + k bj f (tj+n , y(tj+n ))+
j=s−n j=s−n
s−1
X
+ aj (z j+n − y(tj+n )) , 0≤n≤s
j=s−n
s−1
X s−1
X
δ 2n+s = −k bj f (tj+n , z j+n ) + k bj f (tj+n , y(tj+n ))+
j=0 j=0
s−1
X
+ aj (z j+n − y(tj+n )) , s+1≤n≤m−s
j=0
17.3. CONSISTENZA E STABILITÀ 107

Dunque, perché un metodo sia convergente (cioè l’errore tenda a zero con
k), occorre che le perturbazioni della soluzione introdotte ad ogni passo (da
errori di approssimazione del metodo stesso o arrotondamento) rimangano
limitate (ciò non fa esplodere la prima parte di (17.10)) e che l’errore locale
tenda a zero con k (ciò fa andare a zero la seconda parte di (17.10)).
Abbiamo visto che la condizione delle radici è necessaria affinché pertur-
bazioni limitate generino soluzioni limitate. In realtà essa è anche sufficiente.
Inoltre questa condizione permette non solo di mantenere limitate le pertur-
bazioni, ma anche di farle tendere a 0. Si ha infatti il seguente teorema
fondamentale:
Teorema 10 (Equivalenza di Dahlquist). Un metodo lineare multistep con
valori iniziali consistenti è convergente se e solo se è consistente e stabile
(cioè il suo polinomio caratteristico soddisfa la condizione delle radici).
La grande portata di questo teorema è che il risultato è valido non solo
per il problema modello (17.9). Inoltre, se i valori iniziali approssimano con
ordine p le soluzioni analitiche, allora il metodo è convergente con ordine
p. Ritornando al metodo (17.7), si ha che θ = 2 è radice del polinomio
1010
k = 0.125
k = 0.250
msinstabile.m
k = 0.500
k = 0.625
soluzione esatta

108

106

104

102

0 1 2 3 4 5
t

Figura 17.2: Applicazione del metodo (17.7) al problema differenziale y ′ (t) =


y(t), y(0) = 1.

caratteristico e infatti yn = k 2 2n +e è una soluzione del problema differenziale


108 CAPITOLO 17. METODI MULTISTEP

che abbiamo usato come modello. Pertanto, il metodo non è stabile, come
si vede anche in Figura 17.2 ove il metodo è stato applicato al problema
differenziale (
y ′ (t) = y(t), t ∈(0, 5]
y(0) = 1
Come corollario al teorema precedente, abbiamo che ogni metodo ad un
passo è stabile (perché ρ(w) = w − 1) e che i metodi di Adams–Bashforth
e Adams–Moulton sono stabili (perché ρ(w) = ws − ws−1 ). Esiste un limite
superiore per l’ordine di un metodo a s passi, dato dal seguente

Teorema 11 (Prima barriera di Dahlquist). Il massimo ordine per un me-


todo a s passi convergente è 2⌊(s + 2)/2⌋ se implicito e s se esplicito.

Per quanto riguarda i metodi BDF (speciali metodi impliciti) si ha che


sono convergenti (cioè sono stabili) solo per 1 ≤ s ≤ 6.

17.4 Influenza degli errori di arrotondamento


Abbiamo visto che la stabilità assicura che perturbazioni consistenti di ordine
O(k p ) permettono ad un metodo di convergere con il medesimo ordine. Tali
perturbazioni si generano per approssimazione dei passi precedenti e, per
esempio, quando si risolve un sistema (non)lineare per un metodo implicito
e si chiede una tolleranza proporzionale a k p se il metodo è di ordine p. Gli
errori di arrotondamento sono però di ordine O(1) ed è del tutto evidente
che in aritmetica di macchina non si può in generale pretendere di trovare
la soluzione esatta. Vediamo esplicitamente il caso del metodo di Eulero: si
avrà
ỹ n+1 = ỹ n + kf (tn , ỹ n ) + εn+1
e dunque, definito
ẽn = ỹ n − y(tn )
kẽn+1 k ≤ (1 + kλ)kẽn k + ck 2 + εn+1
da cui, per induzione,

ck 2 + ε
ken k ≤ [(1 + kλ)n − 1] + (1 + kλ)n ke0 k, 0≤n≤m

ove ε = max0≤n≤m εn e quindi
µ ¶
t∗ λ ck ε ∗
ken k ≤ (e − 1) + + et λ ke0 k, 0≤n≤m
λ kλ
17.4. INFLUENZA DEGLI ERRORI DI ARROTONDAMENTO 109

Anche se non è detto che gli errori di arrotondamento si sommino ad ogni


passo (potrebbero anche compensarsi in un certo qual modo), si vede che
al tendere di k a 0 l’errore potrebbe esplodere. Pertanto esisterebbe un
k ottimale (non eccessivamente piccolo) che minimizza l’errore globale del
metodo quando implementato in aritmetica di macchina.
Capitolo 18

Metodi di Runge–Kutta

18.1 Metodi di Runge–Kutta espliciti


I metodi lineari multistep lasciano aperti alcuni problemi. Come calcolare i
valori iniziali per i metodi di ordine elevato? Abbiamo visto che il massimo
ordine per un metodo ad un passo convergente è 2 se implicito (lo raggiunge
il solo metodo dei trapezi). È possibile modificarlo e renderlo esplicito (e
dunque di più facile applicazione)? Si possono costruire metodi di ordine ele-
vato e che permettano un passo temporale “adattabile” all’andamento della
soluzione? Cominciamo a rispondere alla seconda domanda: una modifica
abbastanza ovvia al metodo dei trapezi
k
y n+1 = y n + (f (tn , y n ) + f (tn+1 , y n+1 ))
2
per renderlo esplicito è sostituire y n+1 con y n + kf (tn , y n ) cosı̀ da avere
k
y n+1 = y n + (f (tn , y n ) + f (tn+1 , y n + kf (tn , y n )) (18.1)
2
Da un punto di vista “logico”, esso può essere definito come
ξ 1 = y n ≈ y(tn )
ξ 2 = y n + kf (tn , ξ 1 ) ≈ y(tn+1 )
k
y n+1 = y n + (f (tn , ξ 1 ) + f (tn+1 , ξ 2 )) ≈ y(tn+1 )
2
Un altro modo di rendere esplicito il metodo dei trapezi è sostituire la media
delle funzioni f con la funzione f valutata nel “punto medio”
µ ¶
k k
y n+1 = y n + kf tn + , y n + f (tn , y n ) (18.2)
2 2

110
18.1. METODI DI RUNGE–KUTTA ESPLICITI 111

cioè
ξ 1 = y n ≈ y(tn )
µ ¶
k k
ξ 2 = y n + f (tn , ξ 1 ) ≈ y tn +
2 2
µ ¶
k
y n+1 = y n + kf tn + , ξ 2 ≈ y(tn+1 )
2
L’idea generale dei metodi espliciti di Runge–Kutta è quella, come al solito,
di sostituire l’integrale nella formula risolutiva
Z tn+1
y(tn+1 ) = y(tn ) + f (τ, y(τ ))dτ
tn

con una formula di quadratura su nodi tn + cj k, 1 ≤ j ≤ ν nell’intervallo


[tn , tn+1 ]. Si giunge quindi a

ν
X
y(tn+1 ) ≈ y(tn ) + k bj f (tn + cj k, y(tn + cj k))
j=1

Si tratta ora di trovare delle approssimazioni ξ j di y(tn + cj k). Si procede


iterativamente in questo modo


 y(tn ) ≈ y n = ξ 1 (⇒ c1 = 0)




 y(tn + c2 k) ≈ y n + c2 kf (tn , y n ) = y n + a2,1 kf (tn , ξ 1 ) = ξ 2


 ..


 .



 Xi−1

 y(t + c k) ≈ y + k

 n i n ai,j f (tn + cj k, ξ j ) = ξ i

 j=1
.. (18.3)


 .



 ν−1
X




 y(tn + cν k) ≈ y n + k aν,j f (tn + cj k, ξ j ) = ξ ν

 j=1



 X ν




 y n+1 = y n + k bj f (tn + cj k, ξ j )
j=1

ove i parametri cj , bj e ai,j sono da determinare in modo da ottenere l’ordine


desiderato. Il numero ν indica il numero di stadi. I parametri cj , bj e ai,j
si racchiudono di solito nel tableau di Butcher. Se ν = 1, ci si riconduce al
112 CAPITOLO 18. METODI DI RUNGE-KUTTA

0 (0)
c2 a2,1
c3 a3,1 a3,2
.. .. .. ...
. . .
cν−1 aν−1,1 aν−1,2 ... aν−1,ν−2
cν aν,1 aν,2 ... aν,ν−2 aν,ν−1
b1 b2 ... bν−2 bν−1 bν
Tabella 18.1: Tableau di Butcher per metodi di Runge–Kutta espliciti.

metodo di Eulero. Per ν = 2, l’ordine si ricava al solito modo

y(tn+1 )−y(tn )−kb1 f (tn , y(tn ))−kb2 f (tn +c2 k, y(tn )+a2,1 kf (tn , y(tn ))) =
k2
= y(tn ) + ky ′ (tn ) + y ′′ (tn ) + O(k 3 ) − y(tn ) − kb1 y ′ (tn )+
· 2 ¸
∂f ∂f ′ 2
−kb2 f (tn , y(tn )) + (tn , y(tn ))c2 k + (tn , y(tn ))a2,1 ky (tn ) + O(k ) =
∂t ∂y
k2
= ky ′ (tn ) + y ′′ (tn ) + O(k 3 ) − kb1 y ′ (tn ) − kb2 y ′ (tn )+
2 · ¸
∂f 2 ∂f ′
− kb2 (tn , y(tn ))c2 k − k a2,1 b2 (tn , y(tn ))y (tn ) =
∂t ∂y
k 2 ′′

= ky (tn ) + y (tn ) + O(k 3 ) − kb1 y ′ (tn ) − kb2 y ′ (tn )+
2 · ¸
∂f 2 ′′ ∂f
− kb2 (tn , y(tn ))c2 k − k a2,1 b2 y (tn ) − (tn , y(tn )) =
∂t ∂t
µ ¶
′ 2 1
= k(1 − b1 − b2 )y (tn ) + k − a2,1 b2 y ′′ (tn )+
2
∂f
− k 2 (b2 c2 − a2,1 b2 ) (tn , y(tn )) + O(k 3 )
∂t

Dunque l’ordine è due se

0 0 0
1 1 2 2
1 1 2 2 3 3
1 1 1 3
2 2
0 1 4 4

Tabella 18.2: Metodi di Runge–Kutta espliciti di ordine 2.


18.1. METODI DI RUNGE–KUTTA ESPLICITI 113


 b1 + b2 = 1

1
a2,1 b2 = (18.4)


 2
b2 c2 = b2 a2,1
da cui, per esempio, i metodi di ordine due riportati in Tabella 18.2. I primi
due corrispondono ai due metodi visti all’inizio del capitolo e si chiamano,
rispettivamente, metodo di Heun e metodo di Eulero modificato. Da notare
come non esista, tra le infinite soluzioni, una soluzione che annulla il ter-
mine O(k 3 ) (bisognerebbe scriverlo esplicitamente per verificarlo). Il punto
cruciale di questo sviluppo in serie di Taylor è l’uguaglianza tra
d
y ′ (tn ) + ky ′′ (tn ) = y ′ (tn ) + k f (tn , y(tn )) =
dt
∂f ∂f
= y ′ (tn ) + k (tn , y(tn )) + k (tn , y(tn ))y ′ (tn )
∂t ∂y
e
f (tn + k, y(tn ) + kf (tn , y(tn ))) = f (tn , y(tn ))+
∂f ∂f
+ (tn , y(tn ))k + (tn , y(tn ))kf (tn , y(tn )) + O(k 2 ) =
∂t ∂y
∂f ∂f
= y ′ (tn ) + k (tn , y(tn )) + k (tn , y(tn ))y ′ (tn ) + O(k 2 )
∂t ∂y
(a meno di O(k 2 )) in cui le derivate di ordine superiore di y (e quindi di f )
sono sostituite da funzioni di funzioni f .
Per ogni ν > 1, il corrispondente sistema non lineare che si ottiene per la
determinazione dell’ordine può avere infinite soluzioni. Solitamente si impone
l’ulteriore vincolo
i−1
X
ai,j = ci , 2 ≤ i ≤ ν
j=1

Da notare che la condizione ν


X
bj = 1
j=1

è necessaria per avere almeno ordine 1 (cioè la consistenza). Per quanto


riguarda la stabilità, si può ripetere tutto il ragionamento fatto per il caso
dei metodi multistep: si arriva ad osservare che il polinomio caratteristico è
ρ(w) = w − 1 e pertanto tutti i metodi di Runge–Kutta espliciti sono stabili.
Ne discende la convergenza. Per quanto riguarda il massimo ordine che si può
raggiungere dato il numero di stadi ν, si ha quanto riportato in Tabella 18.3.
114 CAPITOLO 18. METODI DI RUNGE-KUTTA

numero stadi ν 1 2 3 4 5 6 7 8
massimo ordine p 1 2 3 4 4 5 6 6

Tabella 18.3: Massimo ordine dato il numero di stadi.

Il numero di stadi equivale al numero di valutazioni della funzione f (e


dunque al costo del metodo).

c1 a1,1
c2 a2,1 a2,2
c3 a3,1 a3,2 a3,3
.. .. .. ... ...
. . .
cν−1 aν−1,1 aν−1,2 ... aν−1,ν−2 aν−1,ν−1
cν aν,1 aν,2 ... aν,ν−2 aν,ν−1 aν,ν
b1 b2 ... bν−2 bν−1 bν

c1 a1,1 a1,2 ... ... a1,ν−1 a1,ν


c2 a2,1 a2,2 ... ... a2,ν−1 a2,ν
.. .. ... ... .. ..
c3 . . . .
.. .. .. ... ... .. ..
. . . . .
cν−1 aν−1,1 aν−1,2 ... ... aν−1,ν−1 aν−1,ν
cν aν,1 aν,2 ... ... aν,ν−1 aν,ν
b1 b2 ... ... bν−1 bν
Tabella 18.4: Tableaux di Butcher per i metodi di Runge–Kutta semiimpliciti
(sopra) e impliciti (sotto).

È possibile generalizzare i metodi espliciti di Runge–Kutta per ottenere


metodi semiimpliciti e impliciti, i cui tableaux sono riportati in Tabella 18.4.
Per tali metodi, l’ordine massimo raggiungibile dato il numero di stadi ν è
p = 2ν. Anche per essi valgolo le condizioni

ν
X
ai,j = ci , 1≤i≤ν
j=1

e
ν
X
bj = 1
j=1
18.2. UN ESEMPIO DI METODO DI RUNGE–KUTTA IMPLICITO 115

Lo schema generale di un metodo di Runge–Kutta si scrive dunque



j∗

 X

 ξ = yn + k ai,j f (tn + cj k, ξ j ), i = 1, . . . , ν
 i

j=1
ν
(18.5)

 X
 y n+1 = y n + k bj f (tn + cj k, ξ j )



j=1

ove j ∗ = i − 1 per gli schemi espliciti, j ∗ = i per gli schemi semiimpliciti e


j ∗ = ν per gli schemi impliciti. Ai fini dell’implementazione, per evitare di
calcolare più volte la funzione f negli stessi punti, si usa lo schema
 Ã !
j∗

 X

 f = f tn + ci k, y n + k ai,j f j , i = 1, . . . , ν
 i

j=1
 ν
X

 y n+1 = y n + k bj f j



j=1

Si ricava da (18.5) ponendo f j = f (tn + cj k, ξ j ) e osservando che f i =


P
f (tn + ci k, ξ i ) = f (tn + ci k, y n + k i−1
j=1 ai,j f j ), i = 1, . . . , ν.

18.2 Un esempio di metodo di Runge–Kutta


implicito
Consideriamo il seguente metodo di Runge–Kutta (semi)implicito
µ ¶
k k
ξ 1 = y n + f tn + , ξ 1 (18.6a)
2 2
µ ¶
k
y n+1 = y n + kf tn + , ξ 1 (18.6b)
2
di tableau
1 1
2 2
1
Esso equivale al metodo punto medio implicito
µ ¶
k y n + y n+1
y n+1 = y n + kf tn + , (18.7)
2 2
infatti, per quest’ultimo vale
µ ¶
y n + y n+1 k k y + y n+1
= yn + f tn + , n
2 2 2 2
116 CAPITOLO 18. METODI DI RUNGE-KUTTA

da cui si deduce che (y n +y n+1 )/2 = ξ 1 e dunque (18.6b) coincide con (18.7).
È un metodo di ordine 2 (lo si dimostra a partire da (18.7) con passaggi molto
simili a quelli fatti per i metodi di Runge–Kutta espliciti di ordine 2) e in
qualche modo simile al metodo dei trapezi. Gode della seguente importante
proprietà: se per
y ′ (t) = f (t, y(t))
y(t)T y(t) è costante, cioè xT f (t, x) = 0 per ogni t, allora per (18.7) vale
yT T
n+1 y n+1 = y n y n . Prima di dimostrarlo, osserviamo che la proprietà è inte-
ressante quando y(t) è un vettore di dimensione maggiore di uno, altrimenti
deve essere f = 0 e dunque banalmente y n+1 = y n . Osserviamo poi che
µ ¶
k y + y n+1
y n+1 − y n = kf tn + , n
2 2

e quindi, posto x = (y n + y n+1 )/2,


µ ¶T µ ¶ µ ¶T
y n + y n+1 k y + y n+1 y n + y n+1
0= kf tn + , n =k (y n+1 −y n )
2 2 2 2

da cui la tesi.
3.3

symplectic.m Heun
trapezi
punto medio impli ito
3.25

3.2

3.15
y1 (t)2 + y2 (t)2 + y3 (t)2

3.1

3.05

2.95

2.9

2.85

2.8
0 20 40 60 80 100 120

Figura 18.1: Evoluzione di y1 (t)2 + y2 (t)2 + y3 (t)2 per il problema (18.8).

Consideriamo il seguente problema (equazioni di Eulero per il corpo rigido


18.2. UN ESEMPIO DI METODO DI RUNGE–KUTTA IMPLICITO 117

libero):

 ′ I2 − I3
 y1 (t) =
 y2 (t)y3 (t)


 I2 I3
 I3 − I1
y2′ (t) = y3 (t)y1 (t) (18.8)

 I3 I1


 I1 − I2
 y3′ (t) =
 y1 (t)y2 (t)
I1 I2
y rappresenta il momento angolare e I1 , I2 e I3 sono i momenti principali
d’inerzia. Evidentemente |y(t)|2 = y1 (t)2 + y2 (t)2 + y3 (t)2 è costante. Pro-
viamo a risolvere il sistema con i metodi punto medio implicito, trapezi e
Heun (tutti di ordine 2): l’integrazione fino al tempo t∗ = 120 con 300 passi
temporali (I1 = 2, I2 = 1, I3 = 2/3, y(0) = [1, 1, 1]T ) produce il grafico
in Figura 18.1, in cui si vede che il metodo punto medio implicito conserva
“esattamente” la quantità |y(t)|2 , a differenza dei metodi dei trapezi e di
Heun. Ovviamente bisogna tenere in conto che gli errori di approssimazione
(risoluzione del sistema non lineare) non garantiscono l’esatta uguaglianza
yT T
n+1 y n+1 = y n y n anche per il metodo punto medio implicito. I tre metodi
testati sono dello stesso ordine, ma uno produce soluzioni “qualitativamente”
migliori.
È buona norma, dopo aver definito la matrice A e i vettori c e b del
tableau, controllare che queste condizioni siano soddisfatte, confrontando
sum(A,2) con c e sum(b) con 1, al fine di evitare banali errori. Ovviamente,
si tratta di condizioni necessarie ma non sufficienti per garantire la corretta
implementazione.
Anche il θ-metodo può essere fatto rientrare nella classe dei metodi di
Runge–Kutta semiimpliciti:


 ξ1 = yn
ξ 2 = y n + k(1 − θ)f (tn , ξ 1 ) + kθf (tn + k, ξ 2 )

y
n+1 = y n + k(1 − θ)f (tn , ξ 1 ) + kθf (tn + k, ξ 2 )

o, in forma implementativa (anche se non si usa in pratica),




 f 1 = f (tn , y n )
f 2 = f (tn + k, y n + k(1 − θ)f 1 + kθf 2 )


y n+1 = y n + k(1 − θ)f 1 + kθf 2

Dunque, abbiamo risposto anche alla prima domanda all’inizio di questo


capitolo. Vediamo ora come rispondere alla terza domanda.
118 CAPITOLO 18. METODI DI RUNGE-KUTTA

18.3 Metodi di Runge–Kutta embedded


Per i metodi ad un passo risulta alquanto facile adottare un passo temporale
kn variabile nel tempo (non cosı̀ con i multistep, in cui i parametri dipendo-
no dall’avere assunto i passi temporali costanti). In generale, più l’equazione
ha un comportamento “lineare”, più i passi possono essere presi grandi. Ma
come adattare automaticamente il passo all’andamento della soluzione? Sup-
poniamo di avere due metodi di Runge–Kutta espliciti di ordine p − 1 e p
rispettivamente, i cui tableaux sono riportati in Tabella 18.5. È chiaro che,

0
c2 a2,1
c3 a3,1 a3,2
.. .. .. ...
. . .
cν−1 aν−1,1 aν−1,2 ... aν−1,ν−2
b1 b2 ... bν−2 bν−1
0
c2 a2,1
c3 a3,1 a3,2
.. .. .. ...
. . .
cν−1 aν−1,1 aν−1,2 ... aν−1,ν−2
cν aν,1 aν,2 ... aν,ν−2 aν,ν−1
b̂1 b̂2 ... b̂ν−2 b̂ν−1 b̂ν
Tabella 18.5: Metodi di Runge–Kutta di ordine p − 1 e p.

dopo aver costruito il primo metodo, con una sola nuova valutazione della
funzione f si può costruire il secondo metodo. Una tale coppia di metodi si
dice embedded e si scrive di solito un unico tableau, come nella Tabella 18.6.
Il fatto che per trovare metodi di Runge–Kutta sia necessario risolvere si-
stemi non lineari per i coefficienti, rende difficile ma non impossibile trovare
coppie di metodi con tali caratteristiche.
Consideriamo il sistema differenziale
( ′
ỹ (t) = f (t, ỹ(t))
ỹ(tn ) = y (p)
n

(p)
ove y n è l’approssimazione di y(tn ) ottenuta con il metodo di Runge–Kutta
di ordine p. Si ha allora
(p) (p−1) (p) p (p−1)
ky n+1 − y n+1 k = ky n+1 − ỹ(tn+1 ) + ỹ(tn+1 ) − y n+1 k ≤ Cn+1 kn+1 , (18.9)
18.3. METODI DI RUNGE-KUTTA EMBEDDED 119

0
c2 a2,1
c3 a3,1 a32
.. .. .. ...
. . .
cν aν,1 aν,2 ... aν,ν−1
b1 b2 ... bν−1
b̂1 b̂2 ... b̂ν−1 b̂ν
Tabella 18.6: Metodi di Runge–Kutta embedded di ordine p − 1 e p.

per un opportuno Cn+1 > 0, ove kn+1 = tn+1 − tn è il passo di integrazione e


p
O(kn+1 ) è l’errore locale del metodo di ordine p − 1. Se si vuole controllare
tale errore si può allora richiedere, ad ogni passo, che
(p) (p−1) (p−1)
ky n+1 − y n+1 k ≤ tola + ky n+1 k · tolr (18.10)
(p) (p−1)
Se la disuguaglianza non è soddisfatta, si rifiuta y n+1 (e y n+1 ) e si calcola un
nuovo passo di integrazione k̃n+1 minore di kn+1 . Per fare questo, si suppone
che valga
(p) (p−1) p
ky n+1,kn+1 − y n+1,kn+1 k = Cn+1 kn+1
(p) (p−1) p p
ky n+1,k̃ − y n+1,k̃ k = C̃n+1 k̃n+1 = Cn+1 k̃n+1
n+1 n+1

p
(cioè C̃n+1 = Cn+1 ) e si impone che l’errore C̃n+1 k̃n+1 valga proprio quanto
la tolleranza richiesta, ricavando
à (p−1)
!1/p à (p−1)
!1/p
tola + ky n+1 k · tolr tola + ky n+1 k · tolr
k̃n+1 = = (p) (p−1)
· kn+1
C̃n+1 ky n+1 − y n+1 k

Se invece la disuguaglianza (18.10) è soddisfatta, si accetta il passo corrente


e per il successivo si suppone che valga
(p) (p−1) p
ky n+1,kn+1 − y n+1,kn+1 k = Cn+1 kn+1
(p) (p−1) p p
ky n+2,kn+2 − y n+2,kn+2 k = C̃n+2 kn+2 = Cn+1 kn+2
p
(cioè Cn+2 = Cn+1 ) e, di nuovo, si impone che l’errore successivo Cn+2 kn+2
valga quanto la tolleranza richiesta, ricavando
à (p−1)
!1/p à (p−1)
!1/p
tola + ky n+1 k · tolr tola + ky n+1 k · tolr
kn+2 = = (p) (p−1)
· kn+1
Cn+2 ky n+1 − y n+1 k
120 CAPITOLO 18. METODI DI RUNGE-KUTTA

(p−1) (p−1) (p−1)


Evidentemente si è supposto anche che ky n+1,kn+1 k ≈ ky n+1,k̃ k ≈ ky n+2,kn+2 k.
n+1
L’espressione trovata è la stessa. Per evitare che il passo di integrazione cambi
troppo bruscamente, si può adottare una correzione del tipo
  Ã !1/p 
(p−1)
tola + ky n+1 k · tolr
min 2, max 0.6, 0.9 · (p) (p−1)
 · kn+1
ky n+1 − y n+1 k
Vediamo un esempio facile di costruzione di metodi di Runge–Kutta em-
bedded. Innanzitutto, osserviamo che qualunque metodo di Runge–Kutta
(in, particolare, quelli di ordine due) richiede la valutazione di f 1 = f (tn , y n )
che è praticamente tutto ciò che serve per il metodo di Runge–Kutta di ordi-
ne uno, cioè il metodo di Eulero. Quindi, qualunque metodo di Runge–Kutta
di ordine due di tableau
0
c2 a2,1
b̂1 b̂2
può essere implementato a passo variabile secondo lo schema (da tn a tn+1 )
• f 1 = f (tn , y n )

(1) (2)
• y n+1 = y n + kn+1 f 1 (metodo di Eulero)

• f 2 = f (tn + c2 kn+1 , y n + a2,1 kn+1 f 1 )

(2−1)
• en+1 = kn+1 [(b̂1 − 1)f 1 + b̂2 f 2 ]

(2−1) (1)
• IF ken+1 k > tola + ky n+1 ktolr
n = n − 1 (time step rifiutato)
ELSE
(2) (1) (2−1)
y n+1 = y n+1 + en+1
END
h i1/2
(1) (2−1)
• kn+2 = (tola + ky n+1 k · tolr )/ken+1 k · kn+1

• n=n+1
Forse il più importante metodo di Runge–Kutta embedded è il Runge–
Kutta–Fehlberg, di ordine (4)5, il cui tableau è riportato in Tabella 18.7.
18.3. METODI DI RUNGE-KUTTA EMBEDDED 121

0
1 1
4 4
3 3 9
8 32 32
12 1932
13 2197
− 7200
2197
7296
2197
439 3680 845
1 216
−8 513
− 4104
1 8 3544 1859
2
− 27 2 − 2565 4104
− 11
40
25 1408 2197
216
0 2565 4104
− 15
16 6656 28561 9 2
135
0 12825 56430
− 50 55

Tabella 18.7: Metodo di Runge–Kutta–Fehlberg.


Capitolo 19

A-stabilità

Purtroppo la consistenza e la stabilità di un metodo non sono sufficienti


per avere un buon solutore di qualunque equazione differenziale ordinaria.
Consideriamo infatti il seguente problema lineare
(
y ′ (t) = λy(t) t > t0
(19.1)
y(t0 ) = y0

la cui soluzione esatta y(t) = eλ(t−t0 ) y0 tende a zero, per t → +∞, se ℜ(λ) <
0. Analizziamo il comportamento del metodo di Eulero per questo problema,
supponendo di avere fissato il passo temporale k: si ha

yn+1 = yn + kλyn = (1 + kλ)yn

da cui
yn = (1 + kλ)n y0
Si ha

lim yn = 0 ⇔ |1 + kλ| < 1 ⇔ 1 + k 2 ℜ(λ)2 + 2kℜ(λ) + k 2 ℑ(λ)2 < 1


n→∞

da cui
2ℜ(λ)
lim yn = 0 ⇔ k < − (19.2)
n→∞ |λ|2
Dunque, la soluzione numerica ottenuta con il metodo di Eulero ha lo stesso
comportamento della soluzione analitica solo se il passo temporale è sufficien-
temente piccolo. Altrimenti, la soluzione può essere completamente diversa
(limn→∞ |yn | = |y0 | o limn→∞ yn = ∞). Nel caso di Eulero implicito, invece,
si ha µ ¶n
1
yn = y0
1 − kλ

122
123

da cui

lim yn = 0 ⇔ |1 − kλ| > 1 ⇔ |1 − kℜ(λ) − kiℑ(λ)| > 1


n→∞

disuguaglianza sempre soddisfatta, poiché ℜ(λ) < 0. Anche per il metodo dei
trapezi la soluzione numerica tende a 0 per n → ∞. Ma non è vero, in gene-
rale, per qualunque metodo implicito. Analizziamo infatti il comportamento
generale del θ-metodo per questo problema: si ha

yn+1 = yn + (1 − θ)kλyn + θkλyn+1

da cui · ¸n
1 + (1 − θ)kλ
yn = y0
1 − θkλ
Si ha
¯ ¯
¯ 1 + (1 − θ)kλ ¯
lim yn = 0 ⇔ ¯¯ ¯ < 1 ⇔ |1 + (1 − θ)kλ| < |1 − θkλ| ⇔
n→∞ 1 − θkλ ¯
0 < (θ2 − (1 − θ)2 )k 2 ℜ(λ)2 − (2θ + 2(1 − θ))kℜ(λ) + (θ2 − (1 − θ)2 )k 2 ℑ(λ)2

da cui
lim yn = 0 ⇔ 0 < (2θ − 1)k 2 |λ|2 − 2kℜ(λ)
n→∞

Se 2θ − 1 ≥ 0, certamente la disequazione è soddisfatta. Altrimenti,

2ℜ(λ)
lim yn = 0 ⇔ k < , (2θ − 1 < 0) (19.3)
n→∞ (2θ − 1)|λ|2

Definizione 5. Dato un metodo numerico y n+1 = Y n (f , k, y 0 , . . . , y n ), la


regione di assoluta stabilità (o linear stability domain) è l’insieme dei numeri
z = kλ per cui la soluzione di (19.1) soddisfa limn→∞ y n = 0.

Con riferimento al θ-metodo, la regione di assoluta stabilità del metodo di


Eulero è {z ∈ C : |1+z| < 1}, per Eulero implicito è {z ∈ C : |1−z| > 1} e per
il metodo dei trapezi è {z ∈ C : ℜ(z) < 0}. Diremo che un metodo è A-stabile
se la sua regione di assoluta stabilità contiene C− = {z ∈ C : ℜ(z) < 0},
cioè se riproduce correttamente il comportamento della soluzione analitica di
(19.1) quando ℜ(λ) < 0. Da notare che, indicato con r(kλ) il termine (che
dovrebbe essere in modulo minore di 1)
· ¸
1 + (1 − θ)kλ
r(kλ) =
1 − θkλ
124 CAPITOLO 19. A-STABILITÀ

4 4 4

2 2 2

0 0 0

-2 -2 -2

-4 -4 -4

-4 -2 0 2 4 -4 -2 0 2 4 -4 -2 0 2 4

Figura 19.1: Regioni di assoluta stabilità (bianche) per i metodi di Eulero,


Eulero implicito e trapezi.

si ha ¯ ¯
¯θ − 1¯
lim |r(kλ)| = ¯¯ ¯
kℜ(λ)→−∞ θ ¯
Tale limite vale proprio 1 per θ = 1/2. Significa che se ℜ(λ) ≪ 0 oppure k ≫
0 il metodo dei trapezi potrebbe mostrare qualche problema di instabilità. In
tal caso, il metodo migliore, da questo punto di vista, è il metodo di Eulero
implicito (θ = 1). In Figura 19.2 vediamo l’applicazione dei due metodi al
problema (
y ′ (t) = −2000(y − cos t), t ≤ 1.5
(19.4)
y(0) = 0
Se
lim |r(kλ)| = 0
kℜ(λ)→−∞

diremo che il metodo è L-stabile.


Per inciso, se λ è puramente immaginario λ = δi, |yn | → +∞ per Eulero,
|yn | → 0 per Eulero implicito e |yn | = 1 = |y(tn )| per il metodo dei trapezi.

19.1 A-stabilità dei metodi di Runge–Kutta


espliciti
Teorema 12. Per un metodo di Runge–Kutta esplicito a ν stadi, si ha
yn+1 = r(kλ)yn ⇒ yn = r(kλ)n y0
con r(kλ) polinomio di grado ν in z = kλ. Inoltre, se l’ordine p è uguale al
numero di stadi ν, si ha
z2 zν
r(z) = 1 + z + + ... +
2! ν!
19.1. A-STABILITÀ DEI METODI DI RUNGE-KUTTA ESPLICITI 125

2
Trapezi
Eulero impli ito
Lstability.m

1.5

1
y(t)

0.5

-0.5
0 0.5 1 1.5 2

Figura 19.2: Metodi dei trapezi e di Eulero implicito per la soluzione di (19.4)
con k = 1.5/40.

4 4 4

2 2 2

0 0 0

-2 -2 -2

-4 -4 -4

-4 -2 0 2 4 -4 -2 0 2 4 -4 -2 0 2 4

Figura 19.3: Regioni di assoluta stabilità (bianche) per i metodi di Runge–


Kutta di ordine 2, 3 e 4.

Dimostrazione. Si ha che ξ1 = yn è un polinomio di grado 0 in z. Supponiamo


che ξj sia un polinomio pj−1 (z)yn di grado j −1 in z = kλ per j = 2, 3, . . . , ν −
1: allora
ν−1
X ν−1
X
ξν = yn + k aν,j λξj = yn + kλ aν,j ξj = pν−1 (z)yn
j=1 j=1

è un polinomio di grado ν − 1 in z. Quindi


ν
X
yn+1 = yn + kλ bj ξj = r(kλ)yn
j=1
126 CAPITOLO 19. A-STABILITÀ

e dunque r(kλ) è un polinomio di grado ν in z = kλ. Poi, se l’ordine del


metodo è p, significa che

y1 − y(t0 + k) = r(kλ)y0 − y(t0 + k) = O(k p+1 )

Ma y(t0 + k) = ekλ y0 . Quindi r(kλ) − ekλ = O(k p+1 ) e dunque


µ ¶
z2 zp
r(kλ) = r(z) = 1 + z + + ... + + O(z p+1 )
2! p!

da cui la tesi.

Dunque, i metodi di Runge–Kutta di ordine p uguale al numero di stadi


ν hanno tutti la stessa regione di stabilità. In ogni caso, la dimostrazione
qui sopra mostra che per un metodo di Runge–Kutta esplicito r(z) è un
polinomio di grado ν (e dunque di grado maggiore di 0).

Teorema 13. Nessun metodo di Runge–Kutta esplicito è A-stabile.

Dimostrazione. Si ha

lim yn = 0 ⇔ |r(z)| < 1, z = kλ


n→∞

ma r(z) è un polinomio di grado maggiore di 0. Dunque, limx→−∞ r(x) = ∞,


x reale. Quindi, certamente esiste z ∈ C− ∩ R tale che |r(z)| > 1 e dunque
la regione di assoluta stabilità non contiene C− .

Per quanto riguarda la regione di assoluta stabilità dell’unico metodo


di Runge–Kutta implicito che conosciamo, cioè il metodo del punto medio
implicito (18.7), osserviamo che il metodo coincide, per problemi lineari, con
il metodo dei trapezi. Pertanto, ha la stessa regione di assoluta stabilità.

19.2 A-stabilità dei metodi lineari multistep


Ci limitiamo a riportare alcuni risultati.

Teorema 14. Nessun metodo esplicito multistep è A-stabile.

Teorema 15. I metodi BDF ad un passo (Eulero implicito) e a due passi


sono A-stabili.

Teorema 16 (Seconda barriera di Dahlquist). L’ordine più alto che un


metodo multistep A-stabile può raggiungere è due.
19.3. EQUAZIONI STIFF 127

19.3 Equazioni stiff


Se consideriamo il problema
(
y ′ (t) = −100y(t), t > 0
y(0) = 1

la condizione (19.3) per il metodo di Eulero impone k < 1/50 = 0.02. D’altra
parte, la soluzione analitica del problema per t∗ = 0.4 è minore di 10−17 (e
dunque, trascurabile, nel senso che y(0) − t(t∗ ) = y(0), in precisione doppia).
Dunque, con poco più di 20 passi il metodo di Eulero arriva a calcolare
adeguatamente la soluzione sino a t∗ .
10300
Eulero espli ito
Eulero impli ito stiff.m
10250

10200
errore in norma innito

10150

10100

1050

100

k < 2/100
10−50
500 1000 2000 2500
m

Figura 19.4: Eulero esplicito e Eulero implicito per la soluzione di (19.5) fino
al tempo t∗ = 40.

Qual è dunque il problema? Eccolo:


 · ¸
′ −100 0
 y (t) = y(t), t > 0


0 −1
· ¸ (19.5)
 y(0) = 1


1

La soluzione analitica è · −100t ¸


e
y(t) =
e−t
128 CAPITOLO 19. A-STABILITÀ

e la sua norma infinito è minore di 10−17 per t∗ = 40. Poiché però per poter
calcolare la prima componente serve un passo temporale k < 0.02, sono ne-
cessari più di 2000 passi (vedi Figura 19.4), anche se la prima componente
diventa trascurabile dopo pochi passi e la seconda non richiederebbe un cosı̀
elevato numero di passi. Dunque, anche se il metodo è convergente e il passo,
per esempio, k = 0.1 garantisce un errore locale proporzionale a k 2 = 0.01, il
metodo di Eulero non può essere usato con tale passo. Usando il metodo di
Eulero implicito sarebbe possibile invece usare un passo piccolo all’inizio e
poi, quando ormai la prima componente è trascurabile, si potrebbe incremen-
tare il passo, senza pericolo di esplosione della soluzione. Per questo semplice
problema, sarebbe possibile calcolare le due componenti separatamente. Nel
caso generale, però, il sistema non è disaccoppiato. Per l’analisi, ci si può
ricondurre, eventualmente in maniera approssimata, ad uno disaccoppiato e
ragionare per componenti. Infatti, se A è una matrice diagonalizzabile,
y ′ (t) = Ay(t) ⇔ z ′ (t) = Dz(t) ⇔ z(t) = exp(tD)z 0
ove AV = V D, D = diag{λ1 , λ2 , . . . , λd }, e y(t) = V z(t). Poi

y ′ (t) = Ay(t) + b ⇔ z ′ (t) = Dz(t) + V −1 b ⇔


⇔ z(t) = z 0 + tϕ1 (tD)(Dz 0 + V −1 b)
ove  λ
e − 1
se λ 6= 0
ϕ1 (λ) = λ
1 se λ = 0
Infine (considerando un problema autonomo per semplicità e sviluppando in
serie di Taylor)
y ′ (t) = f (y(t)) ⇔ y ′ (t) ≈ f (y n ) + Jn (y(t) − y n )
ove Jn è la matrice jacobiana
∂fi
Jn = (y )
∂yj n
e, se Jn è diagonalizzabile, ci si riconduce al caso precedente. Dunque, si ha
sempre a che fare con gli autovalori di Jn (nel caso Jn non sia diagonalizzabile,
si ragiona in maniera equivalente con blocchi di Jordan) e il più piccolo di
questi è quello che determina la restrizione massima sul passo temporale.
Definizione 6. Un sistema di ODEs (15.1) si dice stiff in un intorno di tn
se esiste almeno una coppia di autovalori λ1 , λ2 della matrice jacobiana Jn
tali che
19.3. EQUAZIONI STIFF 129

• ℜ(λ1 ) < 0, ℜ(λ2 ) < 0

• ℜ(λ1 ) ≪ ℜ(λ2 )

In pratica, può essere molto difficile capire se un sistema non lineare


presenta regioni di stiffness o meno. Altrettanto difficile è rispondere alla
domanda: per un problema stiff, conviene usare un metodo esplicito con
passo piccolo o un metodo implicito? È chiaro che il metodo esplicito è di
facile implementazione e applicazione, ma richiede molti passi temporali (e
vedi 17.4). Il metodo implicito richiede la soluzione ad ognuno dei “pochi”
passi di un sistema, in generale, non lineare.

19.3.1 Risoluzione di un metodo implicito per proble-


mi stiff
Consideriamo, per semplicità, il problema

y ′ (t) = Ay(t)

con A stiff e simmetrica. La restrizione sul passo per il metodo di Eulero


esplicito è
2
k<
ρmax
ove ρmax è il raggio spettrale di A. Applicando il metodo di Eulero implicito
e le iterazioni di punto fisso per risolvere l’equazione (per assurdo, poiché
l’equazione da risolvere è lineare), siccome

kAx − Ayk2 ≤ kAk2 kx − yk2 = ρmax kx − yk2

si avrebbe la restrizione (vedi (16.6))


1
k<
ρmax
dunque una restrizione ancora più severa.
Da questo esempio si deduce che i metodi impliciti per problemi stiff
vanno risolti con il metodo di Newton (eventualmente modificato).
Capitolo 20

Integratori esponenziali

I problemi di assoluta stabilità per semplici problemi lineari visti nel capitolo
precedente, portano alla ricerca di nuovi metodi. Consideriamo il sistema
differenziale (
y ′ (t) = Ay(t) + b, t > 0
y(t0 ) = y 0
La soluzione analitica è

y(t) = exp((t−t0 )A)y 0 +(t−t0 )ϕ1 ((t−t0 )A)b = y 0 +(t−t0 )ϕ1 ((t−t0 )A)(Ay 0 +b)

Infatti y(t0 ) = y 0 e

y ′ (t) = A exp((t − t0 )A)y 0 + exp((t − t0 )A)b =


= A(exp((t − t0 )A)y 0 + (t − t0 )((t − t0 )A)−1 exp((t − t0 )A)b+
− (t − t0 )((t − t0 )A)−1 b + A−1 b) =
= A(exp((t − t0 )A)y 0 + (t − t0 )ϕ1 ((t − t0 )A)b) + b = Ay(t) + b

Le funzioni exp e ϕ1 di matrice possono essere approssimate come visto al


paragrafo 7. Da questa osservazione, per un problema
(
y ′ (t) = Ay(t) + b(t, y(t)), t > 0
y(t0 ) = y 0

il metodo Eulero esponenziale è

y n+1 = exp(kA)y n + kϕ1 (kA)b(tn , y n ) = y n + kϕ1 (kA)(Ay n + b(tn , y n ))

Proposizione 4. Il metodo di Eulero esponenziale è esatto se b(y(t)) =


b(y 0 ) ≡ b e di ordine uno altrimenti.

130
131

Dimostrazione. Si ha
Z tn+1
y n+1 = exp(kA)y n + exp((tn+1 − τ )A)g(tn )dτ
tn

ove si è posto g(t) = b(t, y(t)). Per la formula di variazioni delle costanti (7.2)
Z tn+1
y(tn+1 ) − exp(kA)y(tn ) − exp((tn+1 − τ )A)g(tn )dτ =
tn
Z tn+1
= exp(kA)y(tn ) + exp((tn+1 − τ )A)g(τ )dτ +
tn
Z tn+1
− exp(kA)y(tn ) − exp((tn+1 − τ )A)g(tn )dτ =
tn
Z tn+1
= exp((tn+1 − τ )A)(g(tn ) + g ′ (τn )(τ − tn ) − g(tn ))dτ =
tn
= k ϕ2 (kA)g ′ (τn ) = O(k 2 )
2

Si può inoltre dimostrare che il metodo converge (cioè è stabile). Poiché


risolve esattamente i problemi lineari, il metodo è A-stabile.
Proposizione 5. Per un problema lineare, non autonomo
(
y ′ (t) = Ay(t) + b(t), t > 0
y(t0 ) = y 0
il metodo esponenziale—punto medio
y n+1 = exp(kA)y n + kϕ1 (kA)b(tn + k/2) = y n + kϕ1 (kA)(Ay n + b(tn + k/2))
è esatto se b(t) ≡ b e di ordine 2 altrimenti.

Dimostrazione. Procedendo come sopra, si arriva a


Z tn+1
y(tn+1 ) − exp(kA)y(tn ) − exp((tn+1 − τ )A)b(tn + k/2)dτ =
tn
Z tn+1
= exp((tn+1 − τ )A)b′ (τn + k/2)(τ − (tn + k/2))dτ =
t
Z ntn+1
= exp((tn+1 − τ )A)b′ (τn + k/2)(τ − tn − k/2)dτ =
tn
= (k ϕ2 (kA) − k 2 /2ϕ1 (kA))b′ (τn + k/2) =
2
µ 2 ¶
k I k3A k2I k3A
= + 4
+ O(k ) − − + O(k ) b′ (τn + k/2) =
4
2 6 2 2
3
= O(k )
132 CAPITOLO 20. INTEGRATORI ESPONENZIALI

Anche in questo caso si può dimostrare che il metodo converge e che è


A-stabile. Dato un problema differenziale in forma autonoma
(
y ′ (t) = f (y(t)), t > t0
y(t0 ) = y 0

si può pensare di linearizzarlo ad ogni passo

y ′ (t) = Jn y(t) + bn (y(t))

ove
∂f
Jn = (y ), bn (y(t)) = f (y(t)) − Jn y(t)
∂y n
e applicarvi il metodo di Eulero esponenziale. Si arriva cosı̀ al metodo di
Eulero–Rosenbrock esponenziale

y n+1 = exp(kJn )y n + kϕ1 (kJn )bn (y n ) = y n + kϕ1 (kJn )f (y n )

Il metodo è di ordine 2 e convergente. Esso richiede di valutare la funzione


di matrice ϕ1 (kJn ) ad ogni passo temporale.
Gli integratori esponenziali sono particolarmente utili per la risoluzione di
problemi stiff (essendo A-stabili). Conviene usare un metodo implicito o un
metodo esponenziale? Nel primo caso, è necessario risolvere sistemi lineari,
nel secondo calcolare funzioni di matrici. Per problemi di grosse dimensioni,
non è per niente ovvio quale sia la strategia migliore. In generale, per matrici
sparse senza struttura è più semplice calcolare funzioni di matrici, che non
richiedono l’uso di precondizionatori efficaci.
Capitolo 21

Esercizi

1. Si consideri il seguente problema differenziale del secondo ordine ai


limiti  ′′
 u (x) − 3 cos(u(x)) = 0, x ∈ (0, 1)

u(0) = 0


u(1) = 1
Lo si trasformi in un sistema del primo ordine (t = x, y1 (t) = u(x),
y2 (t) = u′ (x)) da risolvere con il metodo di Eulero esplicito e si de-
termini, con una opportuna strategia, quale dovrebbe essere il valore
iniziale y2 (0) affinché y1 (t) = u(x) sia soluzione del problema originale.

2. Con riferimento alla Figura 21.1, l’equazione del pendolo è


 ′′
 lϑ (t) = −g sin ϑ(t)

ϑ(0) = ϑ0

 ϑ′ (0) = 0
p
La si risolva con il metodo dei trapezi fino al tempo t∗ = π l/g (as-
sumendo l = 1, ϑ0 = π/4). Si confronti la traiettoria con quella del
pendolo linearizzato (sin ϑ(t) ≈ ϑ(t)). Di quest’ultimo, si trovi il nu-
mero minimo di passi temporali affinché il metodo di Eulero esplicito
produca una soluzione al tempo t∗ che dista da ϑ(t∗ ) meno di 10−2 .
3. Si calcoli y(1), ove y ′ (t) = Ay(t), y(0) = [1, . . . , 1]T , con A data da A
= 100*toeplitz(sparse([1,1],[1,2],[-2,1],1,10)), usando il θ-
metodo con θ = 0, 1/2, 1 e diversi passi temporali k = 2−3 , 2−4 , . . . , 2−8 .
Si confrontino i risultati con la soluzione di riferimento ottenuta usando
θ = 1/2 e k = 2−10 , mettendo in evidenza l’ordine del metodo usato.
Si provi anche il valore θ = 1/3, discutendo i risultati ottenuti.

133
134 CAPITOLO 21. ESERCIZI

ϑ0

ϑ(t)

Figura 21.1: Pendolo

4. Si risolva il sistema di ODEs


 ′
 A (t) = −2a(t)A(t)

a′ (t) = A(t)2 + Ω(t)2 − a(t)2 − 1 (21.1)

 Ω′ (t) = −2(a(t) + A(t))Ω(t)

con dato iniziale 


 A(0) = 0.5

a(0) = 2

 Ω(0) = 10

con il metodo di Eulero implicito fino ad un tempo finale t∗ = 15, pro-


ducendo un grafico della quantità E(t) = (A(t)2 + a(t)2 + Ω(t)2 +
1)/(2A(t)). Si confrontino le soluzioni ottenute usando 300 o 900
timesteps.

5. Si implementi il metodo di Eulero modificato (secondo tableau in Ta-


bella 18.2) e lo si testi per il sistema differenziale (21.1), producendo il
grafico della quantità E(t).

6. Si implementino gli altri due metodi di ordine 2 in Tabella 18.2, li si


testi per il sistema differenziale (21.1), mettendone in evidenza l’ordine.
135

0
1 1
2 2
1 1
2
0 2
1 0 0 1
1 1 1 1
6 3 3 6

Tabella 21.1: Metodo di Runge–Kutta a 4 stadi.

7. Si implementi il metodo di Runge–Kutta di tableau in Tabella 21.1,


determinandone numericamente l’ordine.

8. Si implementi la function relativa ad un generico metodo di Runge–


Kutta esplicito con tableaux dato da

c A
bT

ove c, A e b sono dati.

9. Si implementi il metodo di Runge–Kutta (embedded) di tableau

0
1 1
2 2
1 −1 2
0 1
1 2 1
6 3 6

e lo si applichi al problema differenziale 21.1.

10. Si implementi il metodo di Runge–Kutta–Fehlberg il cui tableau è ri-


portato nella Tabella 18.7, e se ne mostri l’ordine. Lo si testi sul sistema
differenziale (21.1).
Parte 3

PDEs
(Equazioni alle derivate
parziali)

136
Capitolo 22

Equazioni di
trasporto-diffusione-reazione

Ci occuperemo in questo capitolo delle equazioni di trasporto-diffusione-


reazione (advection-diffusion-reaction, ADR).

22.1 Equazione del calore con dati iniziali e


condizioni ai bordi
Consideriamo la seguente equazione alle derivate parziali

∂u ∂2u
 ∂t (t, x) = ∂x2 (t, x), t > 0, x ∈ (0, L)


(22.1)
 u(t, 0) = u(t, L) = 0, t > 0 (condizioni ai bordi)


u(0, x) = u0 (x), x ∈ (0, L) (condizioni iniziali)
Supponiamo che u0 (x) verifichi le condizioni di compatibilità u0 (a) = u0 (b) =
0. Tale equazione rappresenta, per esempio, l’andamento della temperatura
u su una barra di lunghezza L, i cui estremi sono tenuti a temperatura zero,
e con una distribuzione iniziale di temperatura u0 (x).

22.1.1 Esistenza di una soluzione


Cerchiamo una soluzione a variabili separabili
u(t, x) = ψ(t)φ(x)
Inserendo tale rappresentazione in (22.1), si deduce
ψ ′ (t)φ(x) = ψ(t)φ′′ (x), t > 0, x ∈ (0, L)

137
138 CAPITOLO 22. EQUAZIONI ADR

da cui
ψ ′ (t)
= −K (costante) ⇒ ψ(t) = Ae−Kt
ψ(t)
Per quanto riguarda φ(x), la soluzione generale è
√ √
−Kx
φ(x) = Be + Ce− −Kx

Imponendo le condizioni al bordo

0 = φ(0) = B + C
√ √ ³ √ √ ´
−KL
0 = φ(L) = Be + Ce− −KL
= B e −KL − e− −KL
√ √
Se K ≤ 0, allora e −KL − e− −KL > 0 e dunque B = 0 (e anche C). Quindi
φ(x) = 0, ma in tal caso ψ(0)φ(x) 6= u0 (x). Se invece K = λ2 > 0, λ > 0,
allora ¡ ¢
φ(x) = B eiλx − e−iλx = 2Bi sin(λx) = B sin(λx)
(avendo ridefinito B) e poiché φ(L) = 0, l’unica possibilità non banale è
λ = jπ/L, j numero naturale non nullo. Pertanto, la funzione
µ 2 2 ¶ µ ¶
j π jπ
uj (t, x) = exp − 2 t sin x
L L

è soluzione dell’equazione del calore (e soddisfa le condizioni ai bordi) per


ogni j. Quindi, la seguente serie

X
u(t, x) = cj uj (t, x)
j=1

è soluzione formale dell’equazione del calore. Per quanto riguarda la condi-


zione iniziale, si deve imporre
∞ µ ¶
X jπ
u0 (x) = u(0, x) = cj sin x (22.2)
j=1
L

Poiché u0 (x) è nulla agli estremi, la possiamo prolungare per antisimmetria


all’intervallo [−L, L]. Sotto opportune ipotesi, la sua serie di Fourier
+∞
X
ū0 (x) = u0 j φj (x)
j=−∞
22.1. EQUAZIONE DEL CALORE 139

converge in [−L, L]. Poiché ū0 (x) è dispari, con riferimento al paragra-
fo 13.2.1,
Z L Z L µ ¶
−i 2πj(x + L)
u0m/2+1+j = ū0 (x)φm/2+1+j (x)dx = √ ū0 (x) sin dx =
−L 2L −L 2L
√ Z µ ¶
−i 2 L jπx
= √ ū0 (x) sin + jπ dx =
L 0 L
√ Z µ ¶
−i 2 L jπx
= √ u0 (x) sin + jπ dx
L 0 L
e
Z L Z L µ ¶
−i −2πj(x + L)
u0 m/2+1−j = ū0 (x)φm/2+1−j (x)dx = √ ū0 (x) sin dx =
−L 2L −L 2L
√ Z
i 2 L
= √ ū0 (x) sin(jπx/L + jπ)dx = −u0 m/2+1+j
L 0
da cui
+∞
X
ū0 (x) = u0 m/2+1+j φm/2+1+j (x) =
j=−∞
+∞
X cos(jπx/L + jπ) + i sin(jπx/L + jπ)
= u0m/2+1+j √ =
j=−∞
2L
−1
X cos(jπx/L + jπ) + i sin(jπx/L + jπ)
= u0m/2+1+j √ +
j=−∞
2L
+∞
X cos(jπx/L + jπ) + i sin(jπx/L + jπ)
+ u0 m/2+1+j √ =
j=1
2L
+∞
X cos(jπx/L + jπ) − i sin(jπx/L + jπ)
= −u0m/2+1+j √ +
j=1
2L
+∞
X cos(jπx/L + jπ) + i sin(jπx/L + jπ)
+ u0 m/2+1+j √ =
j=1
2L
∞ √
X 2
= u0 m/2+1+j √ i sin(jπx/L + jπ) =
j=1
L
∞ · Z µ ¶ ¸ µ ¶
X 2 L jπ jπ
= u0 (x) sin x dx sin x
j=1
L 0 L L
140 CAPITOLO 22. EQUAZIONI ADR

Confrontanto quest’ultima espressione con (22.2), si deduce


· Z L µ ¶ ¸
2 jπ
cj = u0 (x) sin x dx
L 0 L

Si potrebbe mostrare adesso che


∞ ¶ µ µ ¶
X j 2π2 jπ
u(t, x) = cj exp − 2 t sin x
j=1
L L

è soluzione di (22.1) (bisogna poter derivare sotto il segno di serie). Dalla


presenza del termine esponenziale negativo nel tempo per ogni componente
uj (t, x), si deduce ogni componente tende a zero per t → +∞ (e dunque
anche la soluzione), ma con diverse velocità dipendenti da un fattore pro-
porzionale a j 2 . L’equazione del calore rappresenta il modello dei fenomeni
di diffusione. La diffusione è il processo mediante il quale la materia (o l’e-
nergia) è trasportata da una parte di un sistema ad un’altra come risultato
di moti molecolari random.

22.1.2 Unicità della soluzione


Introduciamo la seguente quantità (energia)
Z L
1 2
E(t) = u (t, x)dx
0 2

Si ha
Z L · ¸ Z L Z L 2
dE ∂ 1 2 ∂u ∂ u
= u (t, x) dx = u dx = u 2 dx
dt 0 ∂t 2 0 ∂t 0 ∂x

Integrando per parti e tenendo conto delle condizioni ai bordi, si ha


Z L µ ¶2
dE ∂u
=− dx ≤ 0
dt 0 ∂x

Per dimostrare l’unicità, consideriamo come al solito il problema omogeneo


(corrispondente a (22.1) con u0 ≡ 0. Per tale problema E0 (0) = 0 e quindi
0 ≤ E0 (t) ≤ E0 (0) da cui E0 (t) = 0 per ogni t. Quindi u(t, x) ≡ 0 è l’unica
soluzione del problema omogeneo. Dunque, se u1 (t, x) e u2 (t, x) fossero due
soluzioni del problema (22.1), allora u1 (t, x) − u2 (t, x) sarebbe soluzione del
problema omogeneo e quindi u1 (t, x) ≡ u2 (t, x).
22.2. METODO DI FOURIER 141

Se u0 (x) ≥ 0, si può dimostrare (principio del massimo debole) che la


soluzione rimane non negativa per ogni t (dall’interpretazione fisica, è ovvio).
Infatti, dato ε > 0, si ponga v(t, x) = u(t, x)−εx2 . Allora ∂t v−∂xx v = 2ε > 0.
Se il minimo di v(t, x) stesse in (t̄, x̄), 0 < t̄, 0 < x̄ < L, allora ∂t v(t̄, x̄) = 0
(punto critico) e ∂xx v(t̄, x̄) ≥ 0 (punto di minimo). Dunque
∂t v(t̄, x̄) − ∂xx v(t̄, x̄) ≤ 0
assurdo. Quindi, il punto di minimo per v(t, x) sta in Γ = {0} × [0, L] ∪
[0, +∞) × {0, L}. Dunque
min u − εL2 ≤ min v = min v ≤ min u
Γ Γ

e facendo tendere ε → 0, si ottiene


min u ≤ min u
Γ

Poiché ovviamente vale anche la disuguaglianza opposta,


min u = min u = min{min u0 , 0} = 0
Γ

22.2 Metodo di Fourier


Per quanto visto, il metodo spettrale basato su approssimazione in serie di
Fourier (vedi paragrafo 13.2.1) dovrebbe essere particolarmente adatto alla
risoluzione. Detta m
X
û(t, x) = ûj (t)φj (x)
j=1

la soluzione approssimata, si ha
m
X m
X
û′j (t)φj (x) = ûj (t)λ2j φj (x)
j=1 j=1

da cui, per l’ortonormalità della famiglia {φj }j ,


(
û′k (t) = λ2k ûk (t), 1 ≤ k ≤ m
ûk (0) = uˆ0k

ove λk = i(k − 1 − m/2)2π/(2L) (si deve lavorare infatti del dominio [−L, L],
dove si è prolungata per antisimmetria la funzione u0 (x)) √ e uˆ√
0 k sono i coeffi-
cienti di Fourier discreti di u0 prolungata (per inciso, si ha i 2 Luˆ0 m/2+1+k =
(−1)k ck ). Si trova, dunque,
2 π 2 t/L2
ûk (t) = e−(k−1−m/2) uˆ0 k , 1≤k≤m
142 CAPITOLO 22. EQUAZIONI ADR

da cui poi si ricostruisce û(t, x). Avevamo visto che la decomposizione di Fou-
rier si usa in caso di condizioni al bordo periodiche, mentre per l’equazione
del calore sono di Dirichlet nulle. Poiché però il dato iniziale è la funzione di-
spari ū0 (x), allora la soluzione ū(t, x) dell’equazione del calore nell’intervallo
[−L, L] è pure dispari. Infatti, posto v̄(t, x) = −ū(t, −x), si ha

∂v̄ ∂ ū
 (t, x) = − (t, −x)

∂t ∂t
2
 ∂ v̄ ∂ 2 ū
 (t, x) = (− · −) · − (t, −x)
∂x2 ∂x2

inoltre, v̄(t, −L) = v̄(t, L) = 0 e v̄(0, x) = −ū(0, −x) = ū0 (x). Dunque, pure
v̄(t, x) soddisfa l’equazione del calore. Ma questa è unica, quindi v̄(t, x) =
−ū(t, −x) = ū(t, x), cioè ū(t, x) è dispari. Quindi, ∂x ū(t, −x) = ∂x ū(t, x) e,
in particolare, ∂x ū(t, −L) = ∂x ū(t, L). Per quanto visto, la serie di Fourier di
ū(t, x) converge (i coefficienti uj (t) decadono a zero almeno come j 2 ) e, poiché
ogni troncata della serie è dispari e periodica, essa vale zero ai bordi x = −L
ed x = L (e, di conseguenza, anche in x = 0: questo fatto non è vero per
l’equazione originaria nel dominio [0, L], poiché lı̀ la soluzione non è dispari).
Dunque, si può usare il metodo di Fourier. Se però ū0 (x) non è periodica
(nel senso che non lo sono le derivate di ordine superiore al primo), allora
tale sarà la soluzione analitica e il metodo di Fourier non sarà spettralmente
convergente.

22.3 Metodo delle linee


Il metodo delle linee per la risoluzione di problemi del tipo

∂u ∂2u


 ∂t (t, x) = (t, x) + g(u(t, x)) + s(t, x), t > 0, x ∈ (a, b)
∂x2
(22.3)

 + condizioni ai bordi

+ condizione iniziale

ove il termine g(u(t, x)) si chiama reazione e il termine s(t, x) sorgente, pre-
vede di discretizzare gli operatori differenziali spaziali con uno dei metodi
visti per i problemi con valori ai bordi e poi risolvere il sistema di ODEs che
ne risulta con un metodo per problemi ai valori iniziali visti. Assumeremo
sempre che la condizione iniziale soddisfi le condizioni ai bordi. Vediamo
qualche esempio.
22.3. METODO DELLE LINEE 143

22.3.1 Differenze finite


Trascurando per il momento le condizioni ai bordi e usando differenze finite
centrate del secondo ordine a passo costante h
 
  −2 1 0 ... 0    
y1′ (t)  ..  y1 (t) b(t1 , y1 (t))

 y2′ (t) 

 1
 −2 1 ... .  y2 (t)   b(t2 , y2 (t)) 
   
 ..  1  .. .. ..  ..   .. 
. = . . . +
 h2  0 0 . .
    
    

ym−1 (t)  . ..  ym−1 (t) b(tm−1 , ym−1 (t))

 .. . 1 −2 1 
ym (t) ym (t) b(tm , ym (t))
0 ... 0 1 −2

ove yj (t) ≈ y(t, xj ) o, in maniera compatta,

y ′ (t) = Ay(t) + b(t, y(t)) = f (t, y(t)) (22.4)

(con l’ovvia definizione dei simboli). A questo punto, si sceglie il metodo


di integrazione temporale (θ-metodo, Runge–Kutta, multistep, esponenzia-
le). Si tenga presente che il problema (22.4), che si dice semidiscretizzato, è
solitamente un problema stiff. Infatti, la matrice
 
−2 1 0 ... 0
 .. 
 1 −2 1 ... .
 ... ... ...  m×m
∈R
 0 0

 . ... 
 .. 1 −2 1
0 ... 0 1 −2

ha autovalori reali negativi


µ ¶
2 j π
λj = −4 sin , 1≤j≤m
2m+1

che vengono poi amplificati dal coefficiente 1/h2 . Dunque, con riferimento
alla condizione (19.2) per il metodo di Eulero, volendo usare questo metodo
per l’integrazione temporale occorrerebbe un passo temporale k minore di
(circa) h2 /2. Siccome il metodo di Eulero è del primo ordine, volendo che
l’integrazione temporale non sia meno accurata dell’approssimazione spaziale,
è giusto che il passo temporale sia proporzionale a h2 (cosı̀ che l’errore globale
sia O(k + h2 ) = O(h2 )). Per ridurre il numero di time steps, si può usare un
metodo di ordine più alto, per esempio un metodo di Runge–Kutta esplicito
di ordine 2. La restrizione sul time step è però la stessa (vedi la regione di
assoluta stabilità del metodo in Figura 19.3) del metodo di Eulero. Dunque,
ancora k dovrebbe essere proporzionale a h2 /2 (quindi il numero di time steps
non diminuisce) e l’errore globale è ancora O(k 2 + h2 ) = O(h4 + h2 ) = O(h2 ).
144 CAPITOLO 22. EQUAZIONI ADR

22.3.2 Condizioni al bordo di Dirichlet


Vediamo come imporre una condizione di Dirichlet in x1 = a (eventualmente
dipendente dal tempo u(t, a) = y1 (t) = ua (t)) per il problema
y ′ (t) = Ay(t) + b(t, y(t)) = f (t, y(t))

Costanti nel tempo


Si deve modificare la prima riga di f (t, y(t)) e porla uguale a zero. In tal
modo, la prima riga del sistema differenziale risulta essere
y1′ (t) = 0 ⇒ y1 (t) = costante = y1 (t0 ) = ua
Poiché il dato iniziale soddisfa sempre le condizioni di compatibilità, la prima
componente della soluzione assumerà sempre il valore ua .

Variabili nel tempo


• metodi espliciti: basta calcolare y n+s e poi modificarne la prima com-
ponente, ponendola uguale a ua (tn+s ). Poiché però il problema è stiff,
difficilmente i metodi espliciti sono efficaci, a causa della restrizione sul
passo temporale.
• metodi impliciti: si deve trovare x = y n+s tale che
Fn+s−1 (x) = 0
Pertanto, si deve modificare la prima riga di questo sistema in modo
che esprima l’uguaglianza x1 −ua (tn+s ) = 0. Per esempio, avendo scelto
il metodo di Eulero implicito, si ha
Fn (y n+1 ) = (I − kA)y n+1 − kb(tn+1 , y n+1 ) − y n = 0
e l’imposizione della condizione al bordo avviene, per esempio, ponendo
a zero la prima riga di A e la prima componente di b (ciò può essere fatto
una volta per tutte, assieme alle necessarie modifiche allo Jacobiano) e
ponendo uguale a ua (tn+1 ) la prima componente di y n .
• metodi esponenziali: per i metodi esponenziali visti si ha
y n+1 = exp(kA)y n + kϕ1 (kA)bn
Se la prima riga di A viene messa a zero, la prima riga di exp(kA) e
ϕ1 (kA) è il primo vettore della base canonica e dunque basta porre il
primo elemento di bn uguale a (ua (tn+1 ) − ua (tn ))/k.
22.4. EQUAZIONE DI TRASPORTO-DIFFUSIONE 145

22.3.3 Condizioni al bordo di Neumann (costanti)


Per quanto riguarda una condizione di Neumann omogenea, per esempio in
x = b, si può pensare di introdurre la variabile fittizia ym+1 (t) ≈ u(t, xm+1 ),
xm+1 = b + h e imporre che ym+1 (t) = ym−1 (t). L’approssimazione da usare
2
per ∂∂xu2 (t, b) diventa dunque

∂2u u(t, xm+1 ) − 2u(t, xm ) + u(t, xm−1 )


2
(t, b) ≈ =
∂x h2
ym+1 (t) − 2ym (t) + ym−1 (t) 2ym−1 (t) − 2ym (t)
= 2
=
h h2

In maniera analoga si possono trattare condizioni di Neumann non omogenee


(vedi paragrafo 10.4.2).

22.4 Equazione di trasporto-diffusione


Consideriamo l’equazione del trasporto (in un dominio non limitato)

 ∂u (t, x) + c ∂u (t, x) = 0, t > 0, x ∈ R
∂t ∂x (22.5)

u(0, x) = u0 (x)

È facile verificare che la soluzione analitica è u(t, x) = u0 (x − ct), da cui il


nome dell’equazione. È ovviamente più fisico considerare un dominio limitato
x ∈ (a, b). Nel caso in cui c > 0, ha senso (ed è necessario) prescrivere
un’unica condizione al bordo in x = a. Tale punto si chiama punto di inflow
mentre il punto x = b è detto di outflow. L’equazione di trasporto su un
dominio limitato si scrive allora

∂u ∂u
 (t, x) + c (t, x) = 0, t > 0, x ∈ (a, b), c > 0

 ∂t ∂x
u(t, a) = 0, t>0 (22.6)



u(0, x) = u0 (x), x ∈ (a, b)

con u0 (a) = 0. La soluzione analitica è u(t, x) = ũ0 (x − ct), ove


(
u0 (x) x ∈ [a, b]
ũ0 (x) =
0 x<a
146 CAPITOLO 22. EQUAZIONI ADR

Nel caso in cui c < 0, il punto di inflow è x = b. Se consideriamo, più in


generale, l’equazione di trasporto-diffusione

∂u ∂u ∂2u


 ∂t (t, x) + c (t, x) = d t > 0, x ∈ (a, b)
∂x ∂x2

 u(0, x) = u0 (x)

u(t, a) = u(t, b) = 0
ove d > 0, è lecito aspettarsi che entrambi i fenomeni di diffusione e trasporto
si manifestino. Ancora, se u0 (x) ≥ 0, tale rimane la soluzione per ogni t. Ma
ciò è vero dopo aver discretizzato con il metodo delle linee? Abbiamo i due
risultati seguenti.
Teorema 17. Dato
(
y ′ (t) = f (t, y(t)), t>0
y(0) = y 0
sono equivalenti le seguenti proprietà:
• se y 0 ≥ 0, allora y(t) ≥ 0 per ogni t (il sistema si dice positivo)
• dato x, con xi = 0, xj ≥ 0, j 6= i, allora fi (t, x) ≥ 0
Da questo teorema segue, come corollario, il seguente, che può però essere
dimostrato in maniera diretta.
Teorema 18. Un sistema lineare y ′ (t) = Ay(t) è positivo se e solo se
aij ≥ 0 per ogni j 6= i
ove A = (aij ).
Dimostrazione. Supponiamo che il sistema sia positivo. Allora, se y 0 ≥ 0, si
ha y(τ ) ≥ 0. Ma
y(τ ) = exp(τ A)y 0 = (I + τ A)y 0 + O(τ 2 )
se τ è sufficientemente piccolo. Se, per assurdo, aīj̄ < 0, j̄ 6= ī, allora, preso
y 0 = ej̄ ,
 

 .. 
 . 
 
 ∗ 
 
(I + τ A)ej̄ = τ aīj̄  ← riga ī
 
 ∗ 
 . 
 .. 

22.4. EQUAZIONE DI TRASPORTO-DIFFUSIONE 147

e dunque la componente ī-esima di exp(τ A)ej̄ sarebbe negativa, assurdo.


Se invece aij ≥ 0, j 6= i, allora
µ ¶n
t
exp(tA) = lim I + A ≥ 0
n→∞ n
da cui la positività.
Tornando all’equazione (22.5), la discretizzazione mediante differenze fi-
nite centrate del secondo ordine porge, nei nodi interni,
yi+1 (t) − yi−1 (t) yi+1 (t) − 2yi (t) + yi−1 (t)
yi′ (t) + c =d
2h h2
I termini extradiagonali della matrice che ne deriva sono
c d c d
+ 2 e − + 2
2h h 2h h
che, per avere la positività, devono essere entrambi non negativi, da cui
|c|h
≤1
2d
La quantità Pe = |c|h/(2d) si chiama numero di Péclet di griglia. La perdita
di positività è solo uno degli effetti del numero di Péclet di griglia troppo ele-
vato: si possono avere anche oscillazioni spurie, pertanto si chiederà sempre
che il numero di Péclet di griglia sia minore o uguale a 1.
Da notare che la positività del sistema y ′ (t) = Ay(t) non garantisce che
qualunque metodo numerico per ODEs la preservi (di certo lo garantisce il
metodo esponenziale, poiché esatto). Pertanto, la condizione sul numero di
Péclet di griglia è solo necessaria per avere una soluzione numerica positiva.

22.4.1 Stabilizzazione mediante diffusione artificiale


La restrizione sul passo di discretizzazione data dal numero di Péclet di
griglia potrebbe essere irrealizzabile. Vediamo di stabilizzare lo schema delle
differenze finite.
Consideriamo, per esempio, l’equazione di trasporto-diffusione

 ∂u ∂u ∂2u

 (t, x) + c (t, x) = d t > 0, x ∈ (0, 1)
 ∂t

 ∂x ∂x2
u(0, x) = x2 (22.7)



 u(t, 0) = 0


u(t, 1) = 1
148 CAPITOLO 22. EQUAZIONI ADR
1.5 1.5
FD upwind FD upwind

peclet.m s hema SG
soluzione di riferimento
FD entrate
s hema SG
soluzione di riferimento
FD entrate

1 1

0.5 0.5
u

u
0 0

-0.5 -0.5
0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1

x x

Figura 22.1: Soluzione di (22.7) con diversi schemi di differenze finite, h =


1/125 (sinistra), h = 1/250 (destra) e Eulero esponenziale al tempo t∗ = 0.05.
La soluzione di riferimento è stata ottenuta con differenze finite centrate e
h = 1/1000.

con c = 10 e d = 0.02. Il numero di Péclet di griglia, con h = 1/125, vale 2.


La risoluzione mediante differenze finite centrate e Eulero esponenziale (esat-
to nel tempo) produce il grafico blu a sinistra in Figura 22.1. Se consideriamo
invece la discretizzazione del primo ordine della derivata prima
∂u ui − ui−1
(t, xi ) ≈
∂x h
(in tale contesto si chiama discretizzazione upwind ), otteniamo il grafico ros-
so, piuttosto lontano dalla soluzione esatta, ma privo di oscillazioni. Si può
infatti vedere che i termini extradiagonali della matrice di discretizzazio-
ne sono non negativi. Per tentare di generalizzare (e migliorare l’ordine di
accuratezza) questo approccio, scriviamo
ui − ui−1 ui+1 − ui−1 h ui−1 − 2ui + ui+1
= −
h 2h 2 h2
e quindi approssimare al primo ordine
∂u ∂2u ui − ui−1 ui−1 − 2ui + ui+1
−c (t, xi ) + d 2 (t, xi ) ≈ −c +d 2
=
∂x ∂x h µ h ¶
ui+1 − ui−1 ch ui−1 − 2ui + ui+1
= −c +d 1+
2h 2d h2
significa approssimare al secondo ordine (dunque, meglio)
µ ¶
∂u ch ∂ 2 u
−c (t, xi ) + d 1 + (t, xi )
∂x 2d ∂x2
22.4. EQUAZIONE DI TRASPORTO-DIFFUSIONE 149

cioè un’equazione con una diffusione artificiale (aggiuntiva) di coefficiente


ch/2. Per questa equazione il numero di Péclet vale
ch ch Pe
¡ ch
¢= = < 1, ∀h
2d 1 + 2d
2d(1 + Pe) 1 + Pe
e ciò spiega l’assenza di oscillazioni. Vorremmo trovare una diffusione ar-
tificiale che stabilizzi lo schema e preservi l’ordine due delle differenze fi-
nite centrate. Cercheremo dunque una funzione φ del numero di Péclet e
sostituiremo d con d(1 + φ(Pe)) in modo che il nuovo numero di Péclet valga
ch
2d(1 + φ(Pe))
La funzione φ(Pe) dovrà soddisfare:
• φ(Pe) ≥ Pe − 1 (cosı̀ il nuovo numero di Péclet sarà minore o uguale
a 1), ma non troppo grande (altrimenti si introduce troppa diffusione
artificiale)
• φ(ch/(2d)) = O(h2 ), h → 0 (cosı̀ la discretizzazione a differenze finite
centrare sarà di ordine 2)
Una scelta possibile è
t2
φ(t) = t − 1 + e−t , φ(t) = + O(t3 ), t→0
2
Una scelta migliore è
2t t2
φ(t) = t − 1 + 2t
, φ(t) = + O(t4 ), t→0
e −1 3
(da notare che lo schema upwind corrisponde a φ(t) = t). Il risultato corri-
sponde al grafico magenta in Figura 22.1 e lo schema si chiama di Scharfetter
e Gummel.
L’esempio usato aveva il coefficiente c positivo: la funzione φ da usare deve
essere funzione del numero di Péclet Pe = |c|h/(2d), in modo da aggiungere
diffusione artificiale e non togliere. Per esempio, nel caso upwind con c < 0,
φ(Pe) = Pe = −ch/(2d) e pertando la discretizzazione al primo ordine che
ne risulta è
∂u ∂2u ui+1 − ui ui−1 − 2ui + ui+1
−c (t, xi ) + d 2 (t, xi ) ≈ −c +d 2
=
∂x ∂x h µ h ¶
ui+1 − ui−1 ch ui−1 − 2ui + ui+1
= −c +d 1−
2h 2d h2
150 CAPITOLO 22. EQUAZIONI ADR

22.4.2 Elementi finiti


Nel caso di discretizzazione spaziale con elementi finiti lineari, la discretizza-
zione del problema (22.3) porta al sistema di ODEs

P y ′ (t) = Ay(t) + g(y(t)) + s(t) (22.8)

ove A è (l’opposta de) la stiffness matrix e P la mass matrix, definita da,


Z xj+1
hj−1 + hj
pjj = φj (x)φj (x)dx =
xj−1 3
Z xj+1 (22.9a)
hj
pj j+1 = pj+1 j = φj (x)φj+1 (x)dx =
xj 6
mentre, per j = 1 e j = m,
Z x2
h1
p11 = φ1 (x)φ1 (x)dx =
3
Zx1x2
h1
p12 = φ1 (x)φ2 (x)dx =
x1 6
Z xm (22.9b)
hm−1
pm−1 m = pm m−1 = φm (x)φm−1 (x)dx =
xm−1 6
Z xm
hm−1
pmm = φm (x)φm (x)dx =
xm−1 3
Poi, per 1 < i < m,
Z xi+1 ÃX m
!
gi = g uj φj (x) φi (x)dx =
xi−1 j=1
Z Ã m ! Z Ã m !
xi X xi+1 X
= g uj φj (x) φi (x)dx + g uj φj (x) φi (x)dx ≈
xi−1 j=1 xi j=1
g(yi−1 ) + g(yi ) hi−1 g(yi ) + g(yi+1 ) hi
+
2
Z xi+1 2 2 2
s(t, xi−1 ) + s(t, xi ) hi−1 s(t, xi ) + s(t, xi+1 ) hi
si = s(t, x)φi (x)dx ≈ +
xi−1 2 2 2 2
mentre per i = 1 e i = m
g(y1 ) + g(y2 ) h1 g(ym−1 ) + g(ym ) hm−1
g1 = , gm =
2 2 2 2
s(t, x1 ) + s(t, x2 ) h1 s(t, xm−1 ) + s(t, xm ) hm−1
s1 = , sm =
2 2 2 2
22.4. EQUAZIONE DI TRASPORTO-DIFFUSIONE 151

Usando un metodo esplicito per la risoluzione del sistema differenzia-


le (22.8), è necessaria l’inversione della matrice di massa. Per tale motivo, si
può ricorrere alla tecnica del mass lumping che consiste nel rendere diagonale
la matrice P sostituendo ogni sua riga con una riga di zeri e la somma degli
elementi originali in diagonale. Tale modifica è equivalente all’approssima-
zione degli integrali in (22.9) mediante la formula dei trapezi e dunque non
(−1)
riduce l’accuratezza del metodo. Infatti, la matrice PL A (PL la matrice di
massa con lumping) risulta uguale alla matrice che si ottiene discretizzando
con differenze finite centrate del secondo ordine.
Usando invece un metodo implicito per la risoluzione del sistema diffe-
renziale (22.8), non è necessaria la tecnica del mass lumping: semplicemente,
si devono risolvere sistemi lineari in cui la matrice identità è sostituita dalla
matrice di massa.

22.4.3 Errori spaziali e temporali


Con il metodo delle linee, è facile capire cosa contribuisce all’errore spaziale
e cosa all’errore temporale. Per esempio, se si usano differenze finite centrate
1
di ordine due, si commette un errore Ch2 , h ∝ m−1 . Questo significa che,
qualunque metodo si usi per l’integrazione temporale e con qualunque passo
temporale, non è possibile scendere sotto tale errore. Ciò è esemplificato
10−3
erroretemporale.m
m = 200
m = 250
m = 300

10−4

10−5
errore

10−6

10−7

10−8
101 102 103
passi temporali

Figura 22.2: Errore temporale per un numero m di passi spaziali.

in Figura 22.2, ove si è risolto il problema dell’Esercizio 1 con un numero


152 CAPITOLO 22. EQUAZIONI ADR

m diverso di passi spaziali e si è misurato l’errore rispetto alla soluzione


analitica. Vale ovviamente anche l’inverso: il metodo scelto per l’integrazione
temporale e il numero di passi temporali pone un limite inferiore all’errore
rispetto alla soluzione analitica.

22.5 Esercizi
1. Si calcoli la soluzione analitica dell’equazione del calore con sorgente

 ∂u ∂2u


 (t, x) = 2
(t, x) + 2et sin(x), t > 0, x ∈ (0, π/2)


 ∂t ∂x
 u(t, 0) = 0, t>0
 ∂u


 (t, π/2) = 0, t>0


 ∂x
 u(0, x) = sin(x), x ∈ (0, π/2)

usando differenze finite del secondo ordine nello spazio e il metodo dei
trapezi nel tempo. Si mostrino gli ordini spaziali e temporali della
convergenza alla soluzione analitica al tempo t∗ = 1.

2. Per l’esercizio sopra, discretizzato nello spazio tramite differenze finite


centrate del secondo ordine con m = 100 nodi, si determini il numero
minimo di passi temporali per avere un errore al tempo t∗ = 1 rispetto
alla soluzione analitica inferiore a 10−3 , avendo usato nel tempo

• il metodo di Eulero
• il metodo di Eulero implicito
• il metodo dei trapezi
• il metodo di Heun
• il metodo Runge–Kutta di tableau in Tabella 21.1

3. Si ripeta l’esercizio 1. usando Eulero esponenziale e esponenziale—


punto medio nel tempo.

4. Si studi l’andamento della soluzione del problema di trasporto-diffusione-


22.5. ESERCIZI 153

reazione

 ∂u ∂u ∂ 2u

 (t, x) + c (t, x) = d (t, x) + ρu(t, x)(u(t, x) − 1/2)(1 − u(t, x)), t > 0, x ∈ (0, 1)



 ∂t ∂x ∂x2
 u(t, 0) = 0, t>0
 ∂u


 (t, 1) = 0, t>0


 ∂x
 u(0, x) = 5x(1 − x)2 , x ∈ (0, 1)

al variare dei coefficienti c, d e ρ (partendo da c = 0.8, d = 0.01,


ρ = 50). Si usi un metodo implicito nel tempo. Si testi anche il caso
di condizioni di Dirichlet omogenee per entrambi i bordi.
Parte 4

Temi d’esame

154
155

29-06-2010

1. Si implementi il metodo di Runge–Kutta definito dal tableau

0
1 1
2 2
1 1
2
0 2
1 0 0 1
3 5 7 13 1
4 32 32 32
− 32

− 12 7
3
7
3
13
6
− 16
3

e se ne determini numericamente l’ordine.

2. Si usi il metodo di Runge–Kutta implementato sopra per determinare


numericamente il periodo del pendolo
 ′′

 θ (t) = −g sin(θ(t)), t > 0
 π
θ(0) =

 3
 ′
θ (0) = 0

e si dica se è minore, maggiore o uguale al periodo del pendolo linea-


rizzato  ′′
θ (t) = −gθl (t), t > 0
 l


π
θl (0) =

 3
 ′
θl (0) = 0

3. Usando differenze finite del secondo ordine per lo spazio e il metodo


di Eulero implicito per il tempo si discretizzi il problema di diffusione-
reazione
 µ ¶
 ∂u 1 ∂2u 1
 ∂t (t, x) = 100 ∂x2 (t, x) + 5u(t, x) u(t, x) − 2 (1 − u(t, x)), t > 0, x ∈ (0, 1)


 u(0, x) = 4x(1 − x), x ∈ (0, 1)


u(t, 0) = u(t, 1) = 0, t>0

4. Si mostri che il metodo usato per risolvere i sistemi non lineari e il


metodo di Eulero implicito hanno il corretto ordine di convergenza.

20-07-2010
156

5. Si consideri il metodo implicito ad un passo


µ ¶
h 1
y n+1 = y n + hf tn + , (y n + y n+1 ) , n≥0
2 2

per la soluzione di un problema ai valori iniziali


(
y ′ (t) = f (t, y(t)), t > t0
y(t0 ) = y 0

Lo si implementi e lo si applichi al problema autonomo


 ′
 y (t) = y(t)(1 − y(t)), t > 0
 y(0) = 1
2
per determinare numericamente l’ordine con cui viene approssimata la
soluzione y(t∗ ) al tempo t∗ = 1.

6. Si calcoli la soluzione analitica del problema di diffusione non omogeneo



∂u ∂2u


 ∂t (t, x) = 2
(t, x) − (sin t)(−x2 + 2x) + 2 cos t, t ≥ 0, x ∈ (0, 1)


 ∂x
 u(0, x) = −x2 + 2x, x ∈ (0, 1)


 u(t, 0) = 0, t≥0

 ∂u (t, 1) = 0,


t≥0
∂x
e si mostri l’ordine di convergenza temporale del metodo Eulero espo-
nenziale per approssimare la soluzione u(t∗ , x) al tempo t∗ = 1.

7. Per lo stesso problema, si mostri l’ordine di convergenza temporale del


metodo esponenziale—punto medio.

15-09-2010

8. Si consideri il metodo di Runge–Kutta semi-implicito


 Ã !
i
X




 f i = f tn + ci k, y n + k ai,j f j , i = 1, 2

j=1
 2
X


 y n+1 = y n + k bj f j


j=1
157

di tableau √ √
3+ 3 3+ 3
c1 a1,1 a1,2 6√ 6√ √
0
3− 3
c2 a2,1 a2,2 = 6
− 33 3+ 3
6
b1 b2 1 1
2 2
per la soluzione di un problema ai valori iniziali
(
y ′ (t) = f (t, y(t)), t ≥ t0
y(t0 ) = y 0

Lo si implementi per il problema autonomo


 ′
 y (t) = y(t)(1 − y(t)), t ≥ 0
 y(0) = 1
2
e si determini numericamente l’ordine con cui viene approssimata la
soluzione y(t∗ ) al tempo t∗ = 1.
9. Si applichi il metodo delle linee al problema di diffusione non omogeneo

∂u ∂ 2u
(t, x) + (2x − x2 ) cos t + 2 sin t, t ≥ 0, x ∈ (0, 1)


 (t, x) = 2


 ∂t ∂x
u(0, x) = 0, x ∈ (0, 1)



 u(t, 0) = 0, t≥0


u(t, 1) = sin t, t≥0
e si mostri l’ordine di convergenza temporale del metodo Eulero im-
plicito con cui viene approssimata la soluzione u(t∗ , x) al tempo t∗ =
1.
30-09-2010
10. Si risolva mediante il metodo delle differenze finite il problema ai limiti
non lineare

 u′′ (x) = 1 (32 + 2x3 − u(x)u′ (x)), x ∈ (1, 3)



 8
u(1) = 17



 43
 u(3) =
3
e si confronti il numero di iterazioni necessarie alla convergenza usan-
do il metodo di Newton esatto e un metodo di Newton inesatto (la
soluzione analitica è u(x) = x2 + 16/x).
158

11. Si applichi il metodo delle linee al problema di diffusione non omogeneo



∂u ∂ 2u


 ∂t (t, x) = 2
(t, x) + 2et sin x, t > 0, x ∈ (0, π/2)


 ∂x
 u(0, x) = sin x, x ∈ (0, π/2)


 u(t, 0) = 0, t≥0

 ∂u (t, π/2) = 0,


t≥0
∂x
e si mostri l’ordine di convergenza temporale del metodo Eulero espo-
nenziale con cui viene approssimata la soluzione analitica u(t∗ , x) al
tempo t∗ = 1.
01-02-2011
12. Si risolva il sistema di ODEs
 ′
 u (t) = −2v(t)u(t)

v ′ (t) = u(t)2 + z(t)2 − v(t)2 − 1

 z ′ (t) = −2(v(t) + u(t))z(t)

con dato iniziale 


 u(0) = 1

v(0) = 2

 z(0) = 15

con il metodo di Crank–Nicolson fino ad un tempo finale t∗ = 1. Presa


come soluzione di riferimento quella ottenuta con 1000 passi temporali,
si mostri l’ordine del metodo e la corretta convergenza del metodo di
Newton.
13. Si applichi il metodo delle linee al problema di convezione-diffusione-
reazione nel dominio (t, x) ∈ [0, 1] × [0, 1]

 ∂u ∂ 2u ∂u

 (t, x) = ε 2
(t, x) + (t, x) + ρu(t, x)(u(t, x) − 1/2)(1 − u(t, x))
 ∂t
 ∂x ∂x
u(0, x) = 10x2 (1 − x)2 + 1/2


 ∂u (t, 0) = ∂u (t, 1) = 0


∂x ∂x
(ove ε = 1/100 e ρ = 10) e si mostri l’ordine di convergenza del metodo
Eulero esponenziale, avendo preso come soluzione di riferimento quella
ottenuta con un passo spaziale e un passo temporale entrambi pari a
1/100.
159

24-02-2011
14. Si risolva mediante un metodo di shooting il problema ai limiti

′′ 1


 u (x) = (32 + 2x3 − u(x)u′ (x)), x ∈ (1, 3)

 8
u(1) = 17



 43
 u(3) =
3
Sapendo che la soluzione analitica è u(x) = x2 + 16/x, si determini
sperimentalmente il numero minimo di passi temporali per avere un
errore in norma infinito minore di 10−2 .
15. Si applichi il metodo delle linee al problema di diffusione non omogeneo

∂u ∂2u 5 x


 (t, x) = 2
(t, x) + et sin , t > 0, x ∈ (0, π)

 ∂t ∂x 4 2

 x
 u(0, x) = sin , x ∈ (0, π)
2

 u(t, 0) = 0, t≥0



 ∂u (t, π) = 0,


t≥0
∂x
e si mostri l’ordine di convergenza temporale del metodo esponenziale
punto medio con cui viene approssimata la soluzione analitica u(t∗ , x)
al tempo t∗ = 1.
21-06-2011
16. Si risolva il seguente problema differenziale
 ′′
 u (x) + u(x) = 2 cos(x), x ∈ (0, 1]

u(0) = 0

 u′ (0) = 0

usando un metodo almeno del secondo ordine rispetto al passo di di-


scretizzazione.
17. Si applichi il metodo delle linee al problema di diffusione-reazione

∂u 1 ∂ 2u


 (t, x) = (t, x) + sin(u(t, x)), t > 0, x ∈ (0, 1)


 ∂t 100 ∂x2
 u(0, x) = 10x(1 − x)2 , x ∈ [0, 1]
 u(t, 0) = 0,
 t≥0


 ∂u (t, 1) = 0,


t≥0
∂x
160

usando differenze finite centrate nello spazio e il metodo dei trapezi


nel tempo. Si mostri il corretto ordine di convergenza del metodo dei
trapezi per l’approssimazione della soluzione al tempo t∗ = 1.

18. Per il problema sopra, si proponga un metodo di Newton modifica-


to per la risoluzione dei sistemi non lineari. Si confrontino i tempi
computazionali (con i comandi tic, toc) rispetto al caso di metodo di
Newton esatto quando si usino un passo spaziale ed un passo temporale
1
entrambi uguali a 100 .

11-07-2011

19. Si risolva il seguente problema ai limiti


 2
′′ u(x)
 u (x) = e
 + 2 − ex , x ∈ (0, 1)
u′ (0) = 0


u(1) = 1

usando il metodo delle differenze finite di ordine due. È possibile


verificare l’ordine di convergenza? Perché?

20. Si applichi il metodo delle linee al problema di diffusione-reazione



 ∂u 1 ∂2u


 (t, x) = 2
(t, x) + cos(u(t, x)), t > 0, x ∈ (0, 1)


 ∂t 50 ∂x
 u(0, x) = 10x2 (1 − x) + 1, x ∈ [0, 1]
 ∂u


 (t, 0) = 0, t≥0


 ∂x
 u(t, 1) = 1, t≥0

usando differenze finite centrate nello spazio e il metodo Eulero implici-


to nel tempo. Si mostri il corretto ordine di convergenza del metodo di
Eulero implicito per l’approssimazione della soluzione al tempo t∗ = 1.

15-09-2011

21. La legge oraria (lineare) del moto di un proiettile sottoposto ad attrito


viscoso in regime laminare è
 ′′ ′
 ′′ ′
 x (t) = −Bx (t) 
  y (t) = −By (t) − g
x(0) = 0 y(0) = 0

 x′ (0) = v cos(α)   y ′ (0) = v sin(α)
0 0
161

ove B = b/m, m = 0.5 la massa del proiettile e b = 0.01 il coefficiente


d’attrito, g = 9.81 l’accelerazione di gravità, v0 = 200 il modulo della
velocità iniziale e α = π/3 l’angolo di gittata. Determinare, mediante
una opportuna strategia, il punto di atterraggio x(T ) del proiettile.
22. Si applichi il metodo delle linee al problema di diffusione-reazione

 ∂u 1 ∂2u

 = + u(1 − u)(u − 1/2), t > 0, x ∈ (0, 1)


 ∂t 100 ∂x2

 u(0, x) = 10x2 (1 − x)2 ,
 x ∈ [0, 1]
∂u

 (t, 0) = 0, t≥0


 ∂x

 ∂u (t, 1) = 0,


t≥0
∂x
usando differenze finite centrate nello spazio e il metodo dei trapezi
nel tempo. Si mostri il corretto ordine di convergenza del metodo dei
trapezi per l’approssimazione della soluzione al tempo t∗ = 1.
29-09-2011
23. Si risolva il seguente problema differenziale
 ′′

 y (x) = 2y 3 − 6y − 2x3 , x ∈ (1, 2)

y(1) = 2
 y(2) = 5


2
mostrando il corretto ordine di convergenza del metodo scelto.
24. Si applichi il metodo delle linee al problema di diffusione non omogeneo

∂u ∂2u 5 t x


 (t, x) = 2
(t, x) + e cos , t > 0, x ∈ (π, 2π)

 ∂t ∂x 4 2
 u(0, x) = cos x ,


x ∈ (π, 2π)
2

 u(t, π) = 0, t≥0



 ∂u (t, 2π) = 0,


t≥0
∂x
e si mostri il corretto ordine di convergenza temporale del metodo espo-
nenziale punto medio con cui viene approssimata la soluzione analitica
u(t∗ , x) al tempo t∗ = 1.
03-02-2012
162

25. Si risolva il seguente problema differenziale



′′ y ′ (x)
 y (x) + x = cos(y(x)) x ∈ (0, 1]


 y(0) = 1
 ′
y (0) = 0

Si descriva esattamente quale metodo è stato usato e se ne mostri il


corretto ordine di convergenza.
Si discuta inoltre il caso in cui y(0) = π/2.

26. Si applichi il metodo delle linee al problema di diffusione non omogeneo



∂u ∂2u 3


 (t, x) = 2
(t, x) + et/2 sin x, t > 0, x ∈ (−π, π/2)


 ∂t ∂x 2
 u(0, x) = sin x, x ∈ (−π, π/2)


 u(t, −π) = 0, t≥0

 ∂u (t, π/2) = 0,


t≥0
∂x
usando differenze finite nello spazio e l’integratore esponenziale punto
medio nel tempo. Si mostri il corretto ordine di convergenza spaziale
con cui viene approssimata la soluzione u(t∗ , x) al tempo t∗ = 1.

24-02-2012

27. Si risolva il seguente problema differenziale ai valori iniziali


 ′

 y1 (t) = −2y1 (t)y2 (t)

 y ′ (t) = y (t)2 − y (t)2 + y (t)2 − 1
2 1 2 3


 y3 (t) = −2(y1 (t) + y2 (t))y3 (t)


y1 (0) = y2 (0) = y3 (0) = 1

fino al tempo t∗ = 1 usando il metodo Runge–Kutta semiimplicito di


tableau

0 0
1 1
1 2 2
1 1
2 2

e se ne calcoli numericamente l’ordine.


163

28. Si applichi il metodo delle linee al problema di diffusione lineare



 ∂u x − x2 ∂ 2 u

 (t, x) = · 2 (t, x), t > 0, x ∈ (0, 1)
 ∂t 2 ∂x


2
u(0, x) = x − x, x ∈ (0, 1)



 u(t, 0) = 0, t≥0


u(t, 1) = 0, t≥0

usando differenze finite nello spazio e il metodo di Eulero implicito nel


tempo. Si mostri il corretto ordine di convergenza temporale con cui
viene approssimata la soluzione al tempo t∗ = 1. Qual è l’ordine di
convergenza spaziale?

21-06-2012

29. Dei seguenti due metodi multistep

18 9 2 6
y n+3 − y + y − y n = k f (tn+3 , y n+3 )
11 n+2 11 n+1 11 11
18 9 3 6
y n+3 − y n+2 + y − y n = k f (tn+3 , y n+3 )
11 11 n+1 11 11
si dica quale è consistente e perché e se ne determini numericamente
l’ordine.

30. Si risolva il problema differenziale di diffusione-trasporto-reazione



 ∂u ∂u ∂2u


 + c = d 2
+ ρu(u − 1/2)(1 − u), t > 0, x ∈ (0, 1)


 ∂t ∂x ∂x
 u(t, 0) = 1, t>0
 ∂u


 (t, 1) = 0, t>0


 ∂x
 u(0, x) = (x − 1)2 , x ∈ (0, 1)

con d = 0.01, c = 8, ρ = 50, usando differenze finite nello spazio


(con passo 1/100) ed un opportuno metodo implicito nel tempo fino al
tempo finale t∗ = 0.1, usando il metodo di Newton per la risoluzione dei
sistemi non lineari. A cosa sono dovute le oscillazioni vicino al bordo
x = 1 al tempo finale? Come si possono eliminare?

05-07-2012
164

31. Si risolva il seguente problema ai limiti


 ′′ ′ 2 2x
 u (x) − u (x) + u (x) = e ,
 x ∈ (0, 1)
u′ (0) = 1

 u(1) = e

con il metodo delle differenze finite. Si verichi il corretto ordine di


approssimazione di u′ (0).

32. Si applichi il metodo delle linee al problema di diffusione non omogeneo



∂u ∂2u x
 (t, x) = 4 2 (t, x) + 3e2t cos ,

 t > 0, x ∈ (0, π)

 ∂t ∂x 2
 u(0, x) = cos x ,


x ∈ (0, π)
2

 ∂u


 (t, 0) = 0, t≥0


 ∂x
u(t, π) = 0, t≥0

e si mostri il corretto ordine di convergenza temporale del metodo espo-


nenziale punto medio con cui viene approssimata la soluzione analitica
u(t∗ , x) al tempo t∗ = 1.

10-09-2012

33. Dato il sistema differenziale del primo ordine


 ′

 y1 (t) = y2 (t)y3 (t) sin t − y1 (t)y2 (t)y3 (t)


 ′ 1
y2 (t) = −y1 (t)y3 (t) sin t + y1 (t)y3 (t)
 20

 1
 y3′ (t) = y12 (t)y2 (t) − y1 (t)y2 (t)

20
p
si dimostri che m(t) = y1 (t)2 + y2 (t)2 + y3 (t)2 rimane costante nel
tempo. Si applichi il metodo √ di Eulero implicito, con dato iniziale

y1 (0) = y2 (0) = y3 (0) = 3/3 fino al tempo t = 1 e si determini
sperimentalmente il numero di passi temporali necessari perché |m̃(0)−
m̃(1)| ≤ 2 · 10−5 , ove m̃(t) è l’approssimazione di m(t) calcolata sulla
soluzione numerica.
165

34. Si risolva il seguente problema di convezione-diffusione



 ∂u ∂2u ∂u


 (t, x) = 4 2 (t, x) − 2 (t, x), t ≥ 0, x ∈ (0, 1)


 ∂t ∂x ∂x
 u(0, x) = x2 , x ∈ (0, 1)
 ∂u


 (t, 0) = 0, t≥0


 ∂x
 u(t, 1) = 1, t≥0

usando differenze finite del secondo ordine con passo h = 1/50 nello spa-
zio e il metodo di Eulero esplicito nel tempo fino a t∗ = 1. Perché serve
un passo temporale minore di circa 1/20000 per avere convergenza? Si
mostri infine il corretto ordine di convergenza temporale.

24-09-2012

35. Si trovi sperimentalmente l’ordine del seguente metodo di Runge–Kutta


semiimplicito
1 1
2 2
1
e si dimostri che equivale al metodo punto medio implicito
µ ¶
k y n + y n+1
y n+1 = y n + kf tn + ,
2 2

Sugg.: per quest’ultimo si calcoli (y n + y n+1 )/2. . .

36. Si risolva il seguente problema di convezione-diffusione-reazione



 ∂u ∂u ∂ 2u


 + c = d 2
(t, x) + ρu2 (1 − u), t ≥ 0, x ∈ (0, 1)


 ∂t ∂x ∂x
 u(0, x) = −x2 + 1, x ∈ (0, 1)
 ∂u


 (t, 0) = 0, t≥0


 ∂x
 u(t, 1) = 0, t≥0

con d = 0.1, c = 4, ρ = 50, usando differenze finite nello spazio (con


passo 1/100) ed un metodo del secondo ordine implicito nel tempo fino
al tempo finale t∗ = 0.1, usando il metodo di Newton per la risoluzione
dei sistemi non lineari. Si mostri il corretto ordine di convergenza
temporale al tempo finale.
Parte 5

Bibliografia

166
Bibliografia

[1] J. P. Boyd, Chebyshev and Fourier Spec-


tral Methods, DOVER Publications, Inc., 2000.
http://www-personal.umich.edu/~jpboyd/BOOK_Spectral2000.html

[2] C. Canuto, M. Y. Hussaini, A. Quarteroni, and T. A. Zang, Spectral


Methods in Fluid Dynamics, Springer-Verlag, 1986.

[3] V. Comincioli, Analisi numerica: metodi, modelli, applicazioni, McGraw–


Hill, 1995.

[4] E. Hairer and G. Wanner, Solving Ordinary Differential Equations II, Stiff
and Differential-Algebraic Problems, Springer, Second Revised Edition,
2002.

[5] E. Hairer, S. P. Nørsett, and G. Wanner, Solving Ordinary Differential


Equations I, Nonstiff Problems, Springer, Second Revised Edition, 2000.

[6] W. Hundsdorfer, Numerical Solution of Advection-Diffusion-


Reaction Equations, Lecture notes, Thomas Stieltjes Institute, 2000.
http://homepages.cwi.nl/~willem/Coll_AdvDiffReac/notes.pdf

[7] A. Iserles, A First Course in the Numerical Analysis of Differential


Equations, Cambridge Texts in Applied Mathematics, second ed., 2009.

[8] R. J. Leveque, Numerical Methods for Conservation Laws, Lectures in


Mathematics, Birkhäuser, 1992.

[9] A. Quarteroni, Modellistica numerica per problemi differenziali, Springer,


terza edizione, 2006.

167

Potrebbero piacerti anche