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