equazioni differenziali ordinarie: problemi ai valori iniziali

Transcript

equazioni differenziali ordinarie: problemi ai valori iniziali
Capitolo 1
EQUAZIONI DIFFERENZIALI
ORDINARIE: PROBLEMI AI VALORI
INIZIALI
La discretizzazione spaziale delle equazioni differenziali alle derivate parziali che descrivono un flusso
stazionario conduce ad un sistema di equazioni algebriche non lineari:
F (u) = 0
(1.1)
Qualora il flusso sia instazionario, la discretizzazione spaziale porta ad un sistema di equazioni differenziali ordinarie nel tempo, in genere non lineari, accoppiate tra loro:
du
= F (u)
(1.2)
dt
In questa sezione ci occupiamo dei metodi usati per risolvere il problema (1.2). Il problema (1.1) rappresenta la soluzione a regime del problema (1.2); uno dei metodi risolutivi per flussi stazionari consiste
nel risolvere il problema non stazionario associato, integrando nel tempo fino a convergenza. Il transitorio non deve essere riprodotto accuratamente; il metodo numerico utilizzato per integrare la (1.2) deve
quindi essere stabile, ossia non deve portare a divergenza il calcolo per quanto grande sia il passo di
discretizzazione temporale adottato, ancorchè inaccurato. Vedremo che una tale esigenza è in genere
soddisfatta dai metodi impliciti. La simulazione di fenomeni transitori richiede invece metodi di integrazione temporale accurati e sufficientemente stabili. A seconda del metodo utilizzato, del fenomeno
simulato e dell’accuratezza richiesta, il vincolo più stringente sul passo di discretizzazione temporale
è costituito dalla stabilità o dalla accuratezza. In genere un opportuno blending di metodi impliciti ed
espliciti consente di ottemperare a tali esigenze. Si parla quindi di metodi semi-impliciti, in cui alcuni
termini nelle equazioni sono integrati nel tempo tramite metodi impliciti, altri con metodi espliciti.
1.1 Cenni introduttivi
Considereremo l’approssimazione numerica della soluzione u (t) : [a, b] ⊂ R −→ Rm del problema ai
valori iniziali, o di Caucy, del primo ordine:

 u (t)
= F (t, uu (t)) t ∈ [a, b]
 u (t ) =
0
u0
1
(1.3)
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
2
dove F (t, u (t)) : [a, b] × Rm −→ Rm , t0 ∈ [a, b], u0 ∈ Rm . È utile accennare alcuni risultati teorici
inerenti il caso continuo.
Teorema (1.1) Sia F (t, u (t)) definita e continua nell’insieme
D = {(t, u) : −∞ < a ≤ t ≤ b < +∞, u < +∞}
e sia inoltre Lipschitziana rispetto ad u in D. Allora esiste un’unica soluzione u (t) ∈ C1 ([a, b]) al
problema (1.3), per ogni valore iniziale u0 ∈ Rm .
Il teorema 1.1 è applicabile anche nell’ipotesi più restrittiva, ma usualmente rispettata nelle applicazioni fisiche, che esista e sia continua la matrice Jacobiana J (t, uu) : D −→ Rm×m di F, definita
da:
∂Fi
F=
∂uj
In tal caso la costante di Lipschitz può essere assunta come il sup(t,u)∈D J.
Un problema di Cauchy in forma autonoma ha la forma:

 u (t)
= F (u) t ∈ [a, b]
 u (t ) =
0
(1.4)
u0
Usando la sostituzione Z1 (t) = u (t), z2 (t) = t ed aggiungendo l’equazione z2 (t) = 1 e la condizione
al contorno z2 (t0 ) = t0 è possibile porre il problema generale (1.3) in forma autonoma.
Problemi differenziali di ordine superiore al primo possono essere trasformati in problemi del primo
ordine con opportune sostituzioni. Ad esempio, un problema di Cauchy scalare di ordine r


u(r)






 u (t0 )








= F t, u, u , . . . , u(r−1)
= η1
(1.5)
..
.
u(r−1) (t0 ) = ηr
può essere ricondotto ad un problema di Cauchy del primo ordine ad r componenti tramite la sostituzione:
z1 = u; z2 = u ; . . . ; zr = u(r−1)
da cui:


z1






 z
2








con le condizioni al contorno
= z2
= z3
(1.6)
..
.
zr
= F (t, z1 , z2 , . . . , zr )

z1 (t0 ) =








η1
..
.
zr (t0 ) = ηr
(1.7)
1.1. CENNI INTRODUTTIVI
3
Un esempio pratico in cui la trasformazione appena descritta può tornare utile è fornito dall’equazione
che descrive la propagazione di un’onda acustica monodimensionale :
∂2u
= c2 ∆u
∂t2
(1.8)
dove c è la velocità di propagazione dell’onda. Utilizzando le idee appena esposte la (1.8) si riduce a:
v = F (v)
con


u
v =  ∂u 
∂t
F=
v2
c2 ∆v1
Il problema (1.3) è lineare se F è lineare in u, ossia se è esprimibile come:
F (v) = K (t) v
con K : [a, b] −→ Rm×m . Il problema è lineare a coefficienti costanti se K non dipende dal tempo
t. Nel caso di problemi multidimensionali, m > 1, è spesso utile ricondursi al caso monodimensionale
tramite diagonalizzazione della matrice K (qualora ammissibile):
v
= Kv
v (t0 ) = v0
(1.9)
K = PΛP−1
z = P−1 v
La soluzione generale dell’equazione omogenea associata è in questo caso:
z = Λz
(h)
zj (t) = cj eλj t
da cui facilmente:
v
(h)
(t) =
m
k(j) cj eλj t
j=1
dove k(j) rappresenta il generico autovettore della matrice K. La soluzione generale dell’equazione
completa è:
v = v(h) + β
essendo β una soluzione particolare di (1.9). Le costanti arbitrarie cj devono essere determinate in base
alle condizioni al contorno.
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
4
1.2 Connessione con le equazioni alle differenze
Pur senza inoltrarsi nella trattazione delle equazioni alle differenze, riteniamo utile evidenziare la connessione che sussiste tra i metodi di discretizzazione nel tempo e tali equazioni; uno studio più approfondito
delle tecniche risolutive di problemi ai valori iniziali, che trascende la finalità di questa appendice, non
può infatti esimersi dall’utilizzo dei risultati consolidati per le equazioni alle differenze. Un’equazione
del tipo
ap un + ap−1 un−1 + . . . + a0 un−p = bn , n = 0, 1, . . .
(1.10)
con a0 = 0 = ap è detta equazione alle differenze lineare di ordine p. Qualora bn ≡ 0 per ogni
n, l’equazione è detta omogenea. Una soluzione dell’equazione (1.10) è una successione {un }n che
soddisfi la (1.10) per ogni valore di n. È utile osservare [3] che l’esistenza della soluzione di (1.10) non
pone problemi, in quanto per un assegnato insieme di p valori iniziali {u0 , u1 , . . . , up−1 } si ha:
p
1
bn −
ap−k un−k , n = p, p + 1, . . .
un =
ap
k=1
Tuttavia, è utile ottenere la soluzione di (1.10) in forma chiusa. Come nel caso delle equazioni differenziali lineari, la soluzioe della (1.10) è ottenuta dalla combinazione di una soluzione generale dell’equazione omogenea associata e di una soluzione particolare dell’equazione completa. L’imposizione
delle condizioni iniziali consente poi di determinare le costanti incognite. Quindi, consideriamo il
problema della determinazione della soluzione generale dell’equazione omogenea associata:
ap un + ap−1 un−1 + . . . + a0 un−p = 0, n = p, p + 1, . . .
(1.11)
Adottiamo una soluzione di tentativo un = ϑn , con n ≥ p [3]. Sostituendo:
da cui:
ap ϑn + ap−1 ϑn−1 + . . . + a0 ϑn−p = 0
(1.12)
ap ϑp + ap−1 ϑp−1 + . . . + a0 = 0
(1.13)
La (1.13) è l’equazione caratteristica associata all’equazione omogenea alle differenze (1.11). Supponiamo per ora che l’equazione caratteristica abbia p radici distinte, ϑ1 , ϑ2 , . . . , ϑp . In tal caso una
combinazione lineare delle p soluzioni costituisce la soluzione generale dell’equazione omogenea (1.11).
un = c1 ϑn1 + . . . + cp ϑnp
(1.14)
Nel caso in cui una generica radice ϑ abbia molteplicità m, è possibile dimostrare che le m soluzioni
associate a tale radice sono:
k n
u(k)
n = n ϑ , k = 0, 1, . . . , m − 1
Vediamo ora come la discretizzazione di un’equazione differenziale ordinaria conduca ad una equazione
alle differenze. Ciò consentirà anche di introdurre alcuni dei metodi di discretizzazione più noti. Iniziamo con l’osservare che il generico metodo di discretizzazione temporale può essere derivato integrando l’equazione (1.2) tra gli istanti tn = nh e tn+1 = (n + 1) h, avendo assunto h come passo di
discretizzazione temporale. Quindi, i diversi metodi si caratterizzano per l’approssimazione introdotta
per rappresentare l’integrale a termine destro. Ci limiteremo a considerare il caso scalare:
du
= F (u, t)
dt
(1.15)
1.2. CONNESSIONE CON LE EQUAZIONI ALLE DIFFERENZE
5
Il processo di discretizzazione temporale porta invariabilmente ad una equazione algebrica del tipo [4]:
un+1 = f (β1 Fn+1 , β0 Fn , β−1 Fn−1 , . . .)
Se β1 = 0 si parla di metodi espliciti; in caso contrrario di metodi impliciti. Nel caso dei metodi espliciti
un+1 dipende solo dai valori già noti ai passi di tempo precedenti della funzione incognita. Per i metodi
impliciti un+1 dipende anche dal valore della funzione incognita al nuovo passo di tempo. Analizzeremo
le caratteristiche dei metodi di integrazione temporale, spesso indicati come time-marching methods,
sotto vari aspetti. L’accuratezza sarà analizzata in termini generali tramite espansioni in serie di Taylor,
mentre altre caratteristiche saranno studiate facendo riferimento alla più semplice equazione differenziale
ordinaria lineare non omogenea:
du
= λu + aeµt
(1.16)
dt
L’importanza di questa equazione con riferimento ai casi reali è legata al fatto che ci si può ricondurre
ad essa linearizzando il generico funzionale F attorno all’istante di tempo tn .
du
dt
= F (u, t)
∂F ∂F (u − un ) +
(t − tn ) + . . .
F (u, t) = F (un , tn ) +
∂u n
∂t n
Quindi, per intervalli temporali sufficientemente piccoli:
F (u, t) ≈ λu + a + bt
con
λ =
∂F ∂u n
∂F a = F (un , tn ) −
∂t n
∂F b =
∂t n
Il termine più critico dal punto di vista della eventuale divergenza della soluzione è λu, in quanto conduce
ad una soluzione esponenziale nel tempo. Integrando la 1.15 tra tn e tn+1 si ottiene:
tn+1
du
tn
dt
dt =
tn+1
tn
F (u (t) , t) dt
Facilmente si ha:
tn+1
du
tn
tn+1
tn
dt
= un+1 − un
dt
F (u (t) , t) dt ≈ hf (β1 Fn+1 , β0 Fn , β−1 Fn−1 , . . .)
Applicando questa metodologia generale all’equazione (1.16) perveniamo ai seguenti metodi particolari.
Metodo di Eulero esplicito
tn+1
tn
F (u, t) dt ≈ hFn
un+1 − (1 + λh) un = haeµhn
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
6
Metodo di Eulero implicito
tn+1
tn
F (u, t) dt ≈ hFn+1
(1 − λh) un+1 − un = haeµh eµhn
Metodo implicito di Crank-Nicolson
tn+1
tn
1
F (u, t) dt ≈ h (Fn+1 + Fn )
2
h
h
h
1−λ
un+1 − 1 + λ
un = aeµnh eµh + 1
2
2
2
Metodo esplicito di Adams-Bashforth
tn+1
tn
F (u, t) dt ≈
h
(3Fn − Fn−1 )
2
h
h
un + un−1 λ
un+1 − 1 + 3λ
2
2
=
h µnh ae
3 − e−µh
2
Metodo predictor-corrector di MacCormack
Utilizzando il metodo di Crank-Nicolson per risolvere la (1.15) si perviene a:
un+1 − un =
h
(Fn+1 + Fn )
2
Questo metodo è implicito, e se il funzionale F ha una struttura complicata, ad esempio non lineare in
u, può essere difficile (laborioso) estrarre un+1 . Si ricorre quindi ad un trucco. Si approssima Fn+1 con
n+1 per un+1 , ottenuto tramite il metodo di Eulero
Fn+1 , ottenuta utilizzando un valore approssimato u
esplicito:
n+1 = un + hFn
u
Il metodo nel suo complesso porta quindi a:
un+1 − un =
h
h
n+1 ) + F (un )] = [F (u
n+1 ) + u
n+1 − un ]
[F (u
2
2
che, applicato alla (1.16), porta a:
n+1 − un = λhun + haeµnh
u
1
1
n+1 (1 + λh) − un =
un+1 − u
2
2
h µh(n+1)
ae
2
(1.17)
(1.18)
Le equazioni (1.17) e (1.18) costituiscono un sistema di equazioni alle differenze lineari a coefficienti
costanti.
1.3 Accuratezza
Il generico metodo ad un passo può essere rapporesentato come:
un+1 = un + hΦ (h, tn , un )
1.3. ACCURATEZZA
7
Con riferimento a metodi di questo tipo, daremo alcune definizioni preliminari, estendibili, con opportune modifiche, anche a metodi a più passi.
Definizione (1.1)
Si dice errore globale di discretizzazione nel punto tn+1 la differenza en+1 = u (tn+1 ) − un+1 tra la
soluzione vera e quella calcolata a partire dall’istante iniziale t0 .
Definizione (1.2)
Si definisce errore locale di troncamento la quantità τn+1 definita come:
n+1
τn+1 = u (tn+1 ) − u
essendo
n+1 = u (tn ) + hΦ (h, tn , u (tn ))
u
L’errore locale di troncamento è quindi l’errore introdotto dal metodo numerico nell’effettuare il singolo
passo di tempo. Si noti infatti che u (tn ) è il valore esatto della soluzione al tempo tn .
Definizione (1.3)
Un metodo ad un passo è detto coerente se vale la condizione
lim
h→0, t=tn+1
τn+1
=0
h
dove tn+1 indica che si mantiene costante la grandezza t0 + (n + 1) h = tn+1 .
Dalla definizione segue che, per un metodo coerente, deve essere:
Φ (0, tn , u (tn )) = F (tn , u (tn ))
Definizione (1.4)
Si dice ordine del metodo il più grande intero positivo p per il quale risulti
τn+1 = O hp+1
Ovviamente, per un metodo coerente deve essere almeno p = 1.
Definizione (1.5)
Un metodo si dice convergente se, applicato ad un qualunque problema di Cauchy che ammetta soluzione
unica, risulta per ogni t ∈ [a, b]:
un+1 = u (tn+1 )
lim
h→0;t=tn+1
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
8
o, equivalentemente:
lim
h→0;t=tn+1
en+1 = 0
Si ritiene opportuno osservare che agli errori appena accennati deve essere sommato l’errore globale di
arrotondamento, introdotto ad ogni passo a causa dell’errore di troncamento di macchina. Tale errore è
in genere assunto indipendente da h e quindi cresce all’aumentare del numero di passi di integrazione
effettuati.
Per i metodi ad un passo vale il seguente importante risultato.
Teorema (1.2) La funzione Φ (h, t, u) sia continua nella regione
D = {(h, t, u) : 0 < h ≤ h0 ; t ∈ [a, b] ; u ∈ Rm }
e sia inoltre Lipschitziana in u:
Φ (h, t, u∗ ) − Φ (h, t, u) ≤ M u∗ − u
∀ (h, t, u∗ ) , (h, t, u) ∈ D
Allora, il metodo ad un passo corrispondente è convergente se e solo se è coerente.
Per i metodi ad un passo considerati in questa sezione la funzione Φ verifica le condizioni del teorema 1.3 se la F (t, u) verifica le condizioni del teorema 1.1. Effettuiamo in dettaglio un’analisi dell’errore
per alcuni dei metodi esposti.
• Eulero esplicito
Al fine di snellire i calcoli faremo riferimento ad un’equazione in forma autonoma. Il metodo di
Eulero esplicito porta in questo caso a:
Φ (h, un ) = F (u (tn ))
da cui:
τn+1 = u (tn+1 ) − u (tn ) − hF (u (tn ))
= hF (u (tn )) + 12 h2 F (u (tn )) F (u (tn )) + H.O.T. − hF (u (tn ))
=
1 2 2 h F (u (tn )) F
(u (tn )) + H.O.T.
Si nota che
lim
h→0, t=tn+1
τn+1
=0
h
di modo che il metodo è coerente. Qualora la funzione F (u) soddisfi le condizioni del teorema 1.1,
risulta evidente che valgono pure le condizioni del teorema 1.3, e quindi il metodo è convergente.
Inoltre, il metodo è ovviamente del primo ordine.
• Eulero implicito
Φ (h, un+1 ) = F (un+1 )
1.4. METODI DI RUNGE-KUTTA
9
Si ha inoltre:
F (un+1 ) = F (u (tn ) + F (un )) (un+1 − un ) + O h2
= F (u (tn )) + F (u (tn )) (hF (un+1 )) + O h2
τn+1 =
tn+1
tn
F (u (t)) dt − hF (un+1 )
= hF (u (tn )) + 12 h2 F (u (tn )) F (u (tn )) + O h3
− h F (u (tn )) + F (u (tn )) F (un+1 ) h + O h2
=
=
1 2 2 h F (u (tn )) F
(u (tn )) − 2 F (u (tn )) + F (u (tn )) F (un+1 ) h + O h2
1 2 2 h F (u (tn )) −F
(u (tn )) − 2hF (u (tn )) F (un+1 ) + O h2
Ne segue:
τn+1
= O (h)
h
dal che si deduce che il metodo di Eulero implicito è coerente e del primo ordine (p = 1). Inoltre,
come nel caso precedente, Φ è continua e Lipschitziana se tale è il funzionale F . Sotto questa
ipotesi, il metodo di Eulero implicito è anche convergente.
• Crank-Nicolson
F (un+1 ) = F (u (tn )) + F (u (tn )) (un+1 − u (tn )) + O (un+1 − u (tn ))2
= F (u (tn )) + h2 F (u (tn )) [F (u (tn )) + F (un+1 )] + O h2
τn+1 =
hF (u (tn )) +
h2 2 F (u (tn )) F
h2 2 F (u (tn )) [F
−
h
2
=
2
1 3
8 h [F (u (tn ))] (F
2F (u (tn )) +
Ne segue:
(u (tn )) + O h2
(u (tn )) + F (un+1 )] + O h2
(un+1 ) + F (u (tn )))
τn+1
= O h2
h
1.4 Metodi di Runge-Kutta
Tra i metodi ad un passo sono molto utilizzati i metodi di Runge-Kutta. La formulazione generale di un
metodo di Runge-Kutta ad s + 1 stadi è:
un+1 = un + h
s
wi Ki
(1.19)
i=0
dove:

Ki = F tn + bi h, un + h
s

aij Kj  , i = 0, 1, 2, . . . , s
j=0
I parametri reali wi , aij , bi definiscono il particolare metodo. Si vede come per i metodi di Runge-Kutta
si ha:
Φ (h, tn , un ) =
s
i=0
wi Ki
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
10
Condizione necessaria per la convergenza del metodo è:
lim
h→0, t=tn+1
Ki = F (t, u (t))
(1.20)
La coerenza del metodo implica invece:
s
lim
h→0, t=tn+1
wi Ki = F (t, u (t))
(1.21)
i=0
Dalle (1.20) e (1.21) segue immediatamente che:
s
wi = 1
i=0
In genere si impone:
ci =
s
aij
j=0
La tavola di Butcher consente di fornire una rappresentazione schematica del generico metodo di RungeKutta.
a0s
c0 a00
cs as0
ass
w0
ws
Un metodo di Runge-Kutta è esplicito qualora ogni Ki possa essere calcolato sulla base della conoscenza
dei soli Kj con j < i. In sostanza deve essere aij = 0 per ogni coppia (i, j) tale che 0 ≤ i ≤ j ≤ s o,
equivalentemente, la matrice A = (aij ) deve essere triangolare bassa in senso stretto (elementi nulli sulla
diagonale). Viceversa, un metodo di Runge-Kutta implicito è caratterizzato dal fatto di avere almeno un
elemento non nullo nella zona triangolare alta della matrice A. Tra i metodi impliciti hanno rilevanza
particolare i metodi semi-impliciti, nei quali aij = 0 per 0 ≤ i < j ≤ s ed aii = 0 per almeno un valore
di i. In tal caso la matrice A è triangolare bassa ma non in senso stretto. Il generico termine Ki assume
la forma:


Ki = F tn + ci h, un + h
i−1
aij Kj + haii Ki  , i = 0, 1, . . . , s
j=0
Come si nota, i singoli Ki sono indipendenti, mentre nel caso di un sistema implicito con matrive A
piena bisogna risolvere ad ogni passo di tempo il sistema nelle incognite Ki :
Ki = F (tn + ci h, un + hai: k)
L’errore locale di troncamento di un metodo di Runge-Kutta è esprimibile in termini generali come:
τn+1 = hp+1 Ψ (un , h, wi , aij , ci )
Si tenga presente che in molti problemi il calcolo della funzione F costituisce la parte più onerosa del
metodo. Quindi, è conveniente limitare il numero di stadi del metodo di Runge-Kutta prescelto a quello
1.4. METODI DI RUNGE-KUTTA
11
minimo necessario ad ottenere l’accuratezza e/o la stabilità voluta. L’ordine di accuratezza massimo
ottenibile da un metodo di Runge-Kutta esplicito ad s + 1 stadi varia come è riportato in tabella:
Stadi
O (τn+1 /h)
s+1≤4
hs+1
5≤s+1≤7
hs
s+1≥8
hs−1
Ne segue che raramente risulta conveniente adottare metodi di Runge-Kutta con più di quattro stadi. Vediamo ora alcuni esempi di metodi di Runge-Kutta espliciti.
Metodo di Eulero esplicito: s = 0, p = 1
un+1 = un + hF (tn , un )
0 0
1
Metodo di Heun: s = 1, p = 2
K0
h
[K0 + K1 ]
2
= F (tn , un )
K1
= F (tn + h, un + hK0 )
un+1 = un +
0
0
0
1
1
0
1
2
1
2
Metodo di Runge-Kutta del 3o ordine: s = 2, p = 3
h
[K0 + K1 + K2 ]
6
= F (tn , un )
un+1 = un +
K0
K1
K2
h
h
= F tn + , un + K0
2
2
= F (tn + h, un − K0 + 2K1 )
0
0
1
2
1
1
2
−1
1
6
0
0
0
0
2
0
1
6
1
6
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
12
Metodo di Runge-Kutta del 4o ordine: s = 3, p = 4
K0
h
[K0 + 2K1 + 2K2 + K3 ]
6
= F (tn , un )
K1
= F tn +
un+1 = un +
h
h
, un + K0
2
2 h
1
= F tn + , un + K1
2
2
= F (tn + h, un + K2 )
K2
K3
0
0
0
0
0
1
2
1
2
0
0
0
1
2
0
0
0
1
0
1
2
0
1
0
1
6
1
3
1
3
1
6
Esempio (1.1)
Determinazione dei coefficienti per un metodo di Runge-Kutta esplicito a due stadi.
un+1 = un + h (w0 K0 + w1 K1 )
(1.22)
K0 = F (tn , un )
(1.23)
K1 = F (tn + c1 h, un + ha10 K0 )
(1.24)
Iniziamo con l’espandere in serie di Taylor la soluzione esatta u (tn + h) attorno ad h = 0. Per
semplicità, in quanto segue porremo tn = 0.
1
u (h) ≈ u (0) + u̇ (0) h + ü (0) h2 + . . .
2
= u (0) + F (0, u (0)) h + 12 h2 F (t) (0, u (0)) + F (u) (0, u (0)) F (0, u (0)) + . . .
Per comodità notazionale poniamo:
(t)
(u)
u (0) = u0 ; F (0, u (0)) = F0 ; F (t) (0, u (0)) = F0 ; F (u) (0, u (0)) = F0 ; . . .
Quindi:
1 (t)
(u)
F0 + F0 F0 h2 + O h3
(1.25)
2
Adesso bisogna espandere in serie di Taylor la (1.22) attorno ad h = 0, utilizzando le definizioni (1.23)
e (1.24).
u (h) ≈ u0 + F0 h +
un+1 = un + h w0
d
d
K0 h + O h2 + w1 K1 |0 +
K1 h + O h2
K0 |0 +
dh
dh
0
0
d
K0 = 0
dh
1.4. METODI DI RUNGE-KUTTA
13
d
K1 = F (t) (c1 h, un + ha10 K0 ) c1 + F (u) (c1 h, un + a10 hK0 ) a10 K0
dh
= F (t) (c1 h, un + ha10 F0 ) c1 + F (u) (c1 h, un + a10 hF0 ) a10 F0
da cui:
(t)
(u)
un+1 = un + h w0 F0 + w1 F0 + hF0 c1 + hF0 a10 F0 + O h2
(t)
(u)
= un + h [(w0 + w1 ) F0 ] + h2 w1 F0 c1 + w1 a10 F0 F0
+ O h3
(1.26)
Confrontando la (1.26) con la (1.25) si perviene facilmente al seguente sistema de equazioni non lineari:
w0 + w1 = 1
w1 c1
=
w1 a10
=
1
2
1
2
(1.27)
La generica soluzione risulta:
a10 = c1 =
Assumendo w0 =
1
2
1
2 (1 − w0 )
si ha:
1
w0 = w1 = ; a10 = c1 = 1
2
Questo particolare metodo è noto come metodo di Heun.
Diamo alcuni cenni ai metodi di Runge-Kutta impliciti. La matrice di Butcher corrispondente ad alcuni
metodi impliciti di Rung-Kutta risulta:
• Metodi di Gauss-Legendre: p = 2s
!
1/2 1/2
1
!
(3 − !(3))/6
1/4
(3 − 2 (3))/12
!
1/4
(3 + (3))/6 (3 + 2 (3))/12
1/2
1/2
• Metodi di Radau: p = 2s − 1
0 1
1
0 1/4 −1/4
2/3 1/4 5/12
1/4 3/4
Si tengano presenti i seguenti fatti.
1. In genere, a parità di stadi, i metodi di Runge-Kutta impliciti sono più accurati di quelli espliciti
2. Per i metodi impliciti sopra riportati (e per altri ancora), l’ordine di accuratezza dipende in maniera
semplice dal numero di stadi. Questo risultato non è estendibile ai metodi espliciti, per i quali
esistono teoremi che, per ogni numero di stadi, forniscono il massimo ordine di accuratezza
ottenibile.
3. Nell’ambito della termofluidodinamica computazionale sono largamente utilizzati i metodi di RungeKutta semi-impliciti [9], mentre quelli totalmente impliciti non trovano applicazione, a causa
dell’onere computazionale associato al calcolo accoppiato dei termini Ki .
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
14
Esempio (1.2)
Risolvere numericamente il problema di Cauchy associato al calcolo della posizione di un oggetto in
moto circolare uniforme attorno ad un punto O.
Soluzione
Il problema di Cauchy in argomento si definisce comodamente nel piano complesso:
dz
= iωz
dt
(1.28)
dove z = x + iy è il numero complesso che rappresenta la posizione dell’oggetto. La soluzione analitica
della (1.28), soggetta alla condizione iniziale z (0) = z0 , è banalmente:
z(t) = z0 eiωt
Risolvendo la (1.28) con i metodi di discretizzazione accennati, si perviene alle seguenti soluzioni.
• Metodo di Eulero esplicito:
zn+1 = zn (1 + iωh)
zn = z0 (1 + iωh)n
Il modulo della generica soluzione è:
|zn | = |z0 | (1 + ω 2 h2 )n/2
da cui si vede che la distanza dell’oggetto dal centro di rotazione cresce con il numero di passi di
integrazione, tendendo all’infinito. Questa è una prima avvisaglia di quanto vedremo in seguito in
merito alla stabilità del metodo di Eulero esplicito. L’errore di fase è invece:
|zn | i[ϕn −ϕ(tn )]
zn
=
e
z(tn )
|z0 |
ϕ(tn ) = ωtn + ϕ0 = ωnh + ϕ0
n = ϕn − ϕ(tn ) = ϕn − ωnh − ϕ0 = (ϕn − ϕ0 ) − ωnh
ϕn − ϕ0 = n arctan (ωh)
n = n [arctan (ωh) − ωh]
L’errore di fase per il metodo di Eulero esplicito è rappresentato in figura 1.2. Esso cresce al
crescere del numero di passi di integrazione ed all’aumentare di ωh.
• Metodo di Eulero implicito:
zn
1 − iωh
z0
zn =
(1 − iωh)n
zn+1 =
Il modulo della generica soluzione è:
|zn | = |z0 |
1
(1 + ω 2 h2 )n/2
1.4. METODI DI RUNGE-KUTTA
15
da cui si vede che la distanza dell’oggetto dal centro di rotazione decresce con il numero di passi di integrazione, tendendo a zero. Come vedremo in seguito, il metodo di Eulero implicito è
essolutamente stabile per l’equazione (1.28). L’errore di fase è invece:
n = n[arctan ωh − ωh]
identico al precedente.
• Metodo di Crank-Nicolson:
2 + iωh
2 − iωh
2 + iωh n
zn = z0 (
)
2 − iωh
zn+1 = zn
Il modulo della generica soluzione è:
|zn | = |z0 |
L’errore di fase è invece:
n = n arctan
4ωh
4 − ω 2 h2
− ωh
Si noti che il metodo di Crank-Nicolson non dà alcun errore sul modulo, ma solo errore di fase.
• Metodo di Heun:
Può essere applicato tramite una sequenza di due passi successivi.
h
iωzn
2
h
= z ∗ + iω(zn + hiωzn )
2
z ∗ = zn +
zn+1
da cui:
(hω)2
+ iωh
zn+1 = zn 1 −
2
n
(hω)2
+ iωh
zn = z0 1 −
2
Il modulo della generica soluzione è:
1
|zn | = |z0 | 1 + (ωh)4
4
L’errore di fase è invece:
n = n arctan
n/2
2ωh
− ωh
2 − ω 2 h2
Si noti che il metodo di Heun, pur portando a divergenza la simulazione, diverge molto più
lentamente del metodo di Eulero esplicito, e per valori sufficientemente ridotti di ωh e dell’intervallo complessivo di simulazione nh fornisce accuratezza paragonabile a quella del metodo di
Crank-Nicolson.
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
16
5
|zn/z0|2/n
4
Eul. espl.
Eul. Impl.
Crank−Nic.
Heun
3
2
1
0
0
0.5
1
ωh
1.5
2
Figura 1.1 Errore di modulo per la descrizione del moto circolare uniforme di un punto materiale.
1.5 Analisi di stabilità
Una definizione operativa di stabilità è fornita in [5].
Un algoritmo è stabile se non amplifica gli errori che compaiono nel corso del processo risolutivo. Per
problemi ai valori iniziali, la stabilità garantisce che il metodo produca una soluzione limitata ogni qual
volta la soluzione dell’equazione esatta sia limitata. Un metodo iterativoè stabile qualora non diverga.
Per i nostri scopi attuali, tale definizione è più che adeguata. Presentiamo innanzi tutto una semplice analisi lineare, che consente di confrontare tra loro i diversi metodi e di individuarne alcune caratteristiche
salienti. Consideriamo quindi l’equazione differenziale lineare:
u = Cu
(1.29)
con coefficiente C complesso. Come già ricordato, l’equazione (1.29) può essere interpretata come
risultante dalla linearizzazione del generico problema autonomo di Cauchy u = F (u). La soluzione
esatta di (1.29) è:
u(t) = u0 eCt
ed è limitata per Re(u) ≤ 0. Vediamo ora le soluzioni numeriche ottenute con i vari metodi.
• Eulero esplicito
un+1 = (1 + Ch)un
Il metodo risulta stabile nel caso in cui porti ad una soluzione limitata. Quindi deve essere
un+1 u ≤ 1 =⇒ |1 + Ch| ≤ 1
n
condizione che è rispettata solo nel caso in cui Ch appartenga al cerchio di centro (−1, 0) e raggio
1 nel piano di Argand-Gauss. Quindi, il metodo di Eulero esplicito è condizionatamente stabile.
1.5. ANALISI DI STABILIT À
17
Eul. espl./impl.
Crank−Nic.
Heun
0
−1
εn/n
−2
−3
−4
−5
0
1
2
ωh
3
4
Figura 1.2 Errore di fase per la descrizione del moto circolare uniforme di un punto materiale.
• Eulero implicito
un+1 (1 − Ch) = un
Il metodo risulta stabile nel caso in cui porti ad una soluzione limitata. Quindi deve essere
un+1 1
u ≤ 1 =⇒ |1 + Ch| ≤ 1
n
condizione che è rispettata solo nel caso in cui Ch giaccia all’esterno del cerchio di centro (1, 0)
e raggio 1 nel piano di Argand-Gauss. In questo caso, il metodo di Eulero implicito è incondizionatamente stabile. Si noti che, mentre il metodo di Eulero esplicito è instabile anche dove la
soluzione analitica risulta limitata, il metodo di Eulero implicito è stabile anche in zone in cui la
soluzione analitica diverge. Si evince quindi l’esigenza di considerare sempre in maniera critica i
risultati ottenuti con un metodo implicito, in quanto si potrebbe ottenere una soluzione limitata ma
irrealistica. Come regola del pollice, un buon metodo di discretizzazione deve rispettare quanto
più possibile le caratteristiche dell’equazione analitica.
• Crank-Nicolson
un+1 |2 + Ch|
u ≤ 1 =⇒ |2 − Ch| ≤ 1
n
In tutto il semipiano Re(Ch) ≤ 0 tale condizione è rispettata, ed il metodo è incondizionatamente
stabile. In questo caso, tuttavia, il metodo porta a soluzioni divergenti nel semipiano reale positivo, conformandosi al comportamento dell’equazione analitica. Si osservi ancora che, facendo
riferimento al caso C ∈ R− , si ha:
2 − CR h
un+1
, CR ≥ 0
=
un
2 + CR h
un+1
≤ 0 per CR h ≥ 2. Quindi, pur essendo incondizionatamente staun
bile, il metodo di Crank-Nicolson introduce delle oscillazioni non fisiche nella soluzione, qualora
da cui si vede che −1 ≤
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
18
1
0.5
0
y −0.5
−1
−1.5
−2
−1
0
x
1
2
Figura 1.3 Traiettoria per la descrizione del moto circolare uniforme di un punto materiale.
CR h assuma valori troppo elevati. Molti algoritmi di fluidodinamica numerica utilizzano il metodo di Crank-Nicolson per trattare la parte diffusiva delle equazioni di trasporto; bisogna tuttavia
prestare attenzione a non usare un passo di discretizzazione temporale troppo elevato, che potrebbe
dar luogo ad oscillazioni nel campo di moto, talvolta difficili da individuare. Come esempio, in
figura 1.4 è riportato il confronto tra gli spettri della componente assiale di velocità in un condotto
a sezione circolare, in regime turbolento. Ai più elevati numeri d’onda si nota un picco fisicamente
non accettabile, che è quasi completamente scomparso una volta che sia stato ridotto il passo di
tempo. In questa simulazione, tutti i termini, convettivi e diffusivi, erano stati trattati con il metodo
di Crank-Nicolson.
5
10
0
10
Wϑ
−5
10
−10
10
−3
10
−2
10
kx
−1
10
0
10
Figura 1.4 Esempio di effetto di un passo di integrazione temporale di ampiezza eccessiva con il metodo
di Crank-Nicolson.
1.5. ANALISI DI STABILIT À
19
• Heun
un+1 = un [1 + Ch + C 2
h2
]
2
2 h2 un+1 C
u ≤ 1 =⇒ 1 + Ch + 2 ≤ 1
n
Anche in questo caso il metodo è condizionatamente stabile, con una zona di stabilità più ampia
rispetto al metodo di Eulero esplicito (figura 1.5). Una proprietà dei metodi di Runge-Kutta
consiste nel fatto che la zona di stabilità aumenta al crescere dell’ordine del metodo.
2
Heun
Eulero implicito
Imag(C)h
1
0
Eulero esplicito
−1
−2
−2
−1
0
Real(C)h
1
2
Figura 1.5 Regioni di stabilità per alcuni metodi di integrazione temporale.
Daremo ora una visione alternativa del problema della stabilità, che introdurrà alcuni concetti di
interesse pratico. Consideriamo quindi l’equazione della conduzione non stazionaria monodimensionale.
∂2T
∂T
=α 2
∂t
∂x
Useremo questa equazione per introdurre una percezione più fisica della stabilità, e per vedere come
un’analisi di stabilità completa non possa prescindere dalla discretizzazione spaziale. Per semplicità,
useremo differenze finite centrali del secondo ordine per la discretizzazione spaziale. Per il momento,
inoltre, useremo il metodo di Eulero esplicito per la discretizzazione temporale.
Tin+1 = Tin +
αh n
n
n
2 [Ti+1 − 2Ti + Ti−1 ]
∆x
La soluzione al nuovo passo di tempo n + 1 al nodo i è influenzata dalla soluzione al tempo precedente
nei nodi adiacenti, come mostrato in figura 1.6.
Usando il metodo di Crank-Nicolson si perviene a:
Tin+1 = Tin +
αh
n+1
n
n
[(T n+1 − 2Tin+1 + Ti−1
) + (Ti+1
− 2Tin + Ti−1
)]
2∆x2 i+1
Vediamo ora cosa accade se il passo di tempo h è incrementato oltre un certo limite, dipendente dal
metodo. A tal proposito, osserviamo innanzi tutto che il coefficiente moltiplicativo di Tin deve essere
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
20
Figura 1.6 Zona di influenza dei metodi di Eulero esplicito e di Crank-Nicolson.
positivo. Per rendercene conto, supponiamo che le temperature dei nodi adiacenti siano uguali a T∗ e
rimangano costanti nel tempo.
n+1
n+1
n
n
= Ti−1
= Ti+1
= Ti−1
= T∗
Ti+1
La temperatura del nodo i al tempo n sia invece superiore:
Tin = T ∗ + ∆T
In tal caso la temperatura del nodo i deve ridursi passando dall’istante di tempo tn a tn+1 , in quanto del
calore fluirà dal nodo i verso i nodi adiacenti. Tuttavia, Tin+1 dovrà essere maggiore di T ∗ , in quanto in
caso contrario del calore sarebbe fluito dal nodo freddo i verso i nodi caldi adiacenti, contro il secondo
principio della termodinamica. Ma se il coefficiente moltiplicativo di Ti è negativo la soluzione ottenuta
dal metodo di Eulero esplicito risulta:
Tin+1 = T ∗ + (1 − 2
αh
) ∆T
(∆x)2
da cui risulta il seguente criterio di stabilità:
1−2
αh
1
αh
≥ 0 ⇐⇒
≤
2
2
(∆x)
(∆x)
2
Per il metodo di Crank-Nicolson, ragionando in maniera analoga, si perviene al limite:
1−2
αh
αh
≥ 0 ⇐⇒
≤1
(∆x)2
(∆x)2
più ampio rispetto al caso precedente. Questo esempio consente di evidenziare alcuni aspetti inerenti la
stabilità.
• In genere i metodi impliciti garantiscono zone di stabilità più ampie rispetto ai metodi espliciti
1.5. ANALISI DI STABILIT À
21
• I metodi impliciti non sono sempre incondizionatamente stabili. La stabilità dipende sia dal metodo che dall’equazione trattata (si confronti il risultato ottenuto per il metodo di Crank-Nicolson
nell’analisi lineare proposta in precedenza).
• I metodi espliciti consentono una risoluzione molto più agevole del problema, specie se intervengono termini non lineari. Tuttavia soffrono di restrizioni sul passo di tempo legate alla stabilità.
• Il limite di stabilità è espresso in termini di una combinazione del passo di tempo h e del passo
di discretizzazione spaziale ∆x. Nell’esempio precedente il limite di stabilità era espresso in
αh
, che è una scala di tempo della diffusione attraverso una singola cella di calcolo.
funzione di
(∆x)2
In problemi di trasporto convettivo, caratterizzati da una velocità di convezione c, il limite di
stabilità si esprime in funzione del tempo di attraversamento di cella, rappresentato dal numero di
CFL:
ch
CFL =
∆x
22
CAPITOLO 1. PROBLEMI AI VALORI INIZIALI
Bibliografia
[1] Zienkiewicz, O.C. (1977), The Finite Element Method. McGraw-Hill, UK.
[2] Bellen A. (1993), Corso di Calcolo Numerico. Dispense per il corso di Calcolo Numerico tenuto
presso l’Università degli Studi di Trieste nell’a.a. 1993-1994.
[3] Comincioli V. (1996), Metodi numerici e statistici per le scienze applicate. Casa Editrice
Ambrosiana, Milano.
[4] Lomax H., Pulliam T.H. e Zingg D.W. (2001), Fundamentals of Computational Fluid Dynamics.
Springer edrs, Berlino.
[5] Ferziger, J.H. e Perı́c M. (1999), Computational Methods for Fluid Dynamics. Springer edrs,
Berlino.
[6] Ferziger J.H. (1998), Numerical Methods for Engineering Applications, seconda edizione. John
Wiley & Sons edrs, New York.
[7] Temperton C. (1975), Algorithmms for the Solution of Cyclic Tridiagonal Systems, in J. Comp.
Phys. 19, 317 − 323
[8] Anderson, J.D. Jr. (1995), Computational Fluid Dynamics. McGraw-Hill edrs, New York.
[9] Williamson J.H. (1980), Low-storage runge-kutta schemes. Journal of Computational Physics,
35:48-56.
23