Dispense del corso di Laboratorio di Metodi Numerici per le
by user
Comments
Transcript
Dispense del corso di Laboratorio di Metodi Numerici per le
Dispense del corso Laboratorio di Metodi Numerici per le Equazioni Differenziali Dott. Marco Caliari a.a. 2009/10 aggiornate al 6 ottobre 2010 Questi appunti non hanno nessuna pretesa di completezza. Sono solo alcune note ed esercizi che affiancano il corso 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 0.1 Metodi iterativi per sistemi di equazioni lineari . . . . 0.2 Metodi di Richardson . . . . . . . . . . . . . . . . . . . 0.2.1 Metodo del gradiente precondizionato . . . . . . 0.2.2 Metodo del gradiente coniugato precondizionato 0.2.3 Test d’arresto . . . . . . . . . . . . . . . . . . . 0.3 Memorizzazione di matrici sparse . . . . . . . . . . . . 0.3.1 Alcuni comandi per matrici sparse . . . . . . . . 0.4 Metodo di Newton per sistemi di equazioni non lineari 0.4.1 Metodo di Newton modificato . . . . . . . . . . 0.5 Esponenziale di matrice . . . . . . . . . . . . . . . . . 0.5.1 Formula delle variazioni delle costanti . . . . . 0.5.2 Calcolo di exp(A) . . . . . . . . . . . . . . . . . 0.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ODEs(Equazioni differenziali ordinarie) 6 6 6 7 8 9 10 10 11 12 12 12 13 16 18 1 theta-metodo 1.1 Caso lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Equazioni di ordine superiore al primo . . . . . . . . . . . . . 1.3 Verifica della correttezza dell’implementazione . . . . . . . . . 19 20 20 21 2 Metodi di Runge–Kutta 2.1 Implementazione dei metodi di Runge–Kutta 2.2 Metodi di Runge–Kutta embedded . . . . . . 2.2.1 Passo di integrazione variabile . . . . 2.2.2 Strutture in GNU Octave . . . . . . 24 24 24 26 26 3 Integratori esponenziali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3 4 INDICE 4 Esercizi 29 II 32 BVPs(Problemi ai limiti) 5 Metodo di shooting 34 5.1 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2 Metodo di Newton . . . . . . . . . . . . . . . . . . . . . . . . 35 5.3 Problema ai limiti con frontiera libera . . . . . . . . . . . . . . 36 6 Differenze finite 6.1 Costruzione delle matrici delle differenze finite 6.2 Condizioni di Dirichlet . . . . . . . . . . . . . 6.3 Condizioni di Neumann . . . . . . . . . . . . . 6.4 Differenze finite centrate del secondo ordine . 6.5 Convergenza per un problema modello . . . . 6.5.1 Unicità . . . . . . . . . . . . . . . . . . 6.5.2 Esistenza . . . . . . . . . . . . . . . . 6.5.3 Regolarità . . . . . . . . . . . . . . . . 6.5.4 Consistenza . . . . . . . . . . . . . . . 6.5.5 Esistenza ed unicità . . . . . . . . . . . 6.5.6 Proprietà di Ah . . . . . . . . . . . . . 6.5.7 Stabilità . . . . . . . . . . . . . . . . . 6.5.8 Convergenza . . . . . . . . . . . . . . . 6.5.9 Un esempio: l’equazione della catenaria 6.6 Norme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 39 40 40 41 41 42 42 43 44 44 44 45 45 46 7 Equazione di Poisson 47 7.1 Equazione di Poisson bidimensionale . . . . . . . . . . . . . . 47 7.1.1 Condizioni al bordo di Dirichlet . . . . . . . . . . . . . 47 7.1.2 Condizioni al bordo miste . . . . . . . . . . . . . . . . 49 8 Metodi variazionali 8.1 Formulazione variazionale di un problema modello 8.1.1 Metodo di approssimazione variazionale . . 8.1.2 Estensione al caso bidimensionale . . . . . 8.2 Metodi spettrali . . . . . . . . . . . . . . . . . . . 8.2.1 Trasformata di Fourier . . . . . . . . . . . 8.2.2 Trasformata di Fourier discreta . . . . . . 8.3 Metodi di collocazione . . . . . . . . . . . . . . . 8.3.1 Condizioni al bordo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 51 53 57 57 58 59 64 65 5 INDICE 9 Esercizi 68 III PDEs(Equazioni alle derivate parziali) 70 10 Equazione del calore 10.1 Equazione del calore con dati iniziali e condizioni ai limiti 10.1.1 Esistenza di una soluzione . . . . . . . . . . . . . . 10.1.2 Unicità della soluzione . . . . . . . . . . . . . . . . 10.2 Metodo delle linee . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Differenze finite . . . . . . . . . . . . . . . . . . . . 10.2.2 Elementi finiti . . . . . . . . . . . . . . . . . . . . . 10.3 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 71 71 73 74 74 75 77 11 Equazione del trasporto 11.1 Linee caratteristiche . . . . . . . . . . . 11.2 Differenze finite . . . . . . . . . . . . . . 11.2.1 Eulero esplicito/upwind . . . . . 11.2.2 Condizione CFL . . . . . . . . . . 11.2.3 Equazioni modificate . . . . . . . 11.2.4 Formulazione di flusso . . . . . . 11.2.5 Verifica dell’ordine . . . . . . . . 11.2.6 Estensione . . . . . . . . . . . . . 11.2.7 Condizioni al bordo . . . . . . . . 11.2.8 Problemi di convezione-diffusione 11.3 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 78 80 80 81 83 84 85 85 85 85 86 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Capitolo 0 Preliminari 0.1 Metodi iterativi per sistemi di equazioni lineari I metodi iterativi per la soluzione del sistema lineare Ax = b (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 splitting 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 (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. 0.2 Metodi di Richardson Indicato con r(l) il residuo r(l) = b − Ax(l) = Ax − Ax(l) = A(x − x(l) ) = Ae(l) , 6 7 0.2. METODI DI RICHARDSON il metodo (2) può essere riscritto come P (x(l+1) − x(l) ) = r(l) . (3) In questo contesto, P viene chiamata matrice di precondizionamento o precondizionatore 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) sia “facile”. Una generalizzazione dello schema (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) (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. 0.2.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) ) 8 CAPITOLO 0. PRELIMINARI e dunque il minimo è dato dalla scelta T αl = z (l) r(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) (l+1) x = x(l) + αl z (l) (5) 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). 0.2.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) P z (l+1) = r(l+1) T βl+1 = p(l+1) z (l+1) r(l+1) T z (l) r(l) (l+1) =z + βl+1 p(l) (6) 0.2. METODI DI RICHARDSON 9 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: !l−1 Ãp −1 A) − 1 cond (P 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. 0.2.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 , (7) che coincide con il precedente nel caso in cui come x(1) venga scelto il vettore di zeri. 10 CAPITOLO 0. PRELIMINARI 0.3 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 primo elemento è 0 e l’elemento i+1-esimo è il numero totale di elementi diversi da zero nelle prime i colonne della matrice. 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 = [0, 2, 3, 5, 7] In GNU Octave, il formato CCS e l’implementazione del prodotto matrice-vettore sono automaticamente usati dalla function sparse e dall’operatore *, rispettivamente. 0.3.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 v21 V = .. . v12 v22 .. . v13 v23 .. . vN 1 vN 2 vN 3 0.4. METODO DI NEWTON PER SISTEMI DI EQUAZIONI NON LINEARI11 Il comando spdiags(V,-1:1,N,N) genera la matrice v12 v11 0 . .. 0 0 0.4 v23 0 v22 v33 0 0 ... ... ... ... ... ... 0 0 .. . .. . vN 3 v21 v32 ... ... . . . 0 vN −2 1 vN −1 2 ... ... 0 vN −1 1 vN 2 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(l+1) è J (l) δx(l) = −f (x(l) ) x(l+1) = x(l) + δx(l) (8) ove J (l) è la matrice Jacobiana, definita da (l) Jij = ∂fi (x(l) ) (l) ∂xj Il criterio d’arresto solitamente usato è kδx(l) k ≤ tol . . (9) 12 CAPITOLO 0. PRELIMINARI 0.4.1 Metodo di Newton modificato (o inesatto) Il metodo di Newton (8) richiede il calcolo della matrice Jacobiana e la sua “inversione” ad ogni passo k. Questo potrebbe essere troppo oneroso. Una strategia per ridurre il costo computazionale è usare sempre la stessa matrice Jacobiana J (1) , oppure aggiornarla solo dopo un certo numero di iterazioni. In tal modo, per esempio, è possibile usare la stessa fattorizzazione L(l) U (l) per più iterazioni successive. Un’altra strategia potrebbe essere quella di usare una matrice Jacobiana più semplice (per esempio quella risultante dall’eventuale parte lineare della funzione). 0.5 Esponenziale di matrice Data una matrice quadrata A ∈ RN ×N , si definisce exp(A) = ∞ X Aj 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) . 0.5.1 Formula delle variazioni delle costanti Data l’equazione differenziale ( y ′ (t) = ay(t) + b(y(t)), y(t0 ) = y0 t>0 (10) y(t) ∈ R, la soluzione può essere scritta analiticamente mediante la formula delle variazioni delle costanti Z t (t−t0 )a e(t−τ )a b(y(τ ))dτ (11) y(t) = e y0 + t0 Infatti, si ha ′ (t−t0 )a y (t) = ae y0 + a Z t t0 e(t−τ )a b(y(τ ))dτ + e(t−t)a b(y(t)) = ay(t) + b(y(t)) 13 0.5. ESPONENZIALE DI MATRICE Si osservi che Z t (t−τ )a e t0 ¯t 1 (t−τ )a ¯¯ −ae dτ = − e ¯ = a t0 t0 (t−t0 )a ¡ ¢ 1 e −1 = − 1 − e(t−t0 )a = (t − t0 ) = a (t − t0 )a = (t − t0 )ϕ1 ((t − t0 )a) , 1 dτ = − a Z t (t−τ )a ove ∞ ez − 1 X z j = . ϕ1 (z) = z (j + 1)! j=0 (12) e, analogamente, Z t t0 e(t−τ )a (τ − t0 )dτ = (t − t0 )2 ϕ2 ((t − t0 )a) ove ∞ ez − 1 − z X z j ϕ2 (z) = = . z2 (j + 2)! j=0 Consideriamo ora un sistema differenziale ( y ′ (t) = Ay(t) + b(y(t)), y(t0 ) = y 0 t>0 (13) (14) Ancora, la soluzione esplicita può essere scritta come y(t) = exp((t − t0 )A)y 0 + 0.5.2 Z t t0 exp((t − τ )A)b(y(τ ))dτ 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. 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. 14 CAPITOLO 0. PRELIMINARI 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 a1 z p−1 + a2 z p−2 + . . . + ap e ≈ , b1 z q−1 + b2 z q−2 + . . . + bq z (15) 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 esponenziale e si fanno coincidere quanti più coefficienti possibile. Per esempio, fissiamo p = q = 2. Si ha allora ¶ µ z2 z3 + + . . . (b1 z + 1) = a1 z + a2 1+z+ 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. Considerando 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à ´j ¡ ¢2 ³ j 2 ez = ez/2 = ez/2 . 15 0.5. 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 ³z ´ 1 ϕ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. 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 A ≈ Vm Hm VmT , ove Vm ∈ Rn×m , VmT Vm = I, Vm e1 = v e Hm è matrice di Hessenberg di ordine m (con m ≪ N ). Allora AVm ≈ Vm Hm e 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(N m2 ) 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 (A − ξi I) v = (A − ξm−1 )wm−1 pm−1 (A)v = pm−2 v + dm wm , wm = i=1 16 CAPITOLO 0. PRELIMINARI 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 i=1 |ξm − ξi | = max ξ∈[a,b] m−1 Y i=1 |ξ − ξi | , 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’intervallo [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. 0.6 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 soluzione esatta sia il vettore [1, 1, . . . , 1]T usando il comando \ di GNU Octave, il metodo del gradiente precondizionato e il metodo del gradiente 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 riporti, 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 (8). Si usi una tolleranza pari a 10−6 , un numero massimo di iterazioni pari a 150 e un vettore iniziale x(1) = 0.6. ESERCIZI 17 [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 coefficienti dell’approssimazione razionale di Padé (15) (con p = q) per la funzione esponenziale. Parte I ODEs (Equazioni differenziali ordinarie) 18 Capitolo 1 θ-metodo Consideriamo il sistema di ODEs ′ 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)) y(t0 ) = y 0 (1.1) Notiamo come il sistema non autonomo (1.1) può essere ricondotto ad uno autonomo ′ y0 (t) = 1 y ′ (t) = f (y (t), y(t)) 0 (1.2) y (t ) = t 0 0 0 y(t0 ) = y 0 ponendo y0 (t) = t. Il θ-metodo per il sistema (1.2) si scrive y n+1 − y n = θf (y n ) + (1 − θ)f (y n+1 ) h 19 (1.3) 20 CAPITOLO 1. THETA-METODO ove tn+1 = tn + h e y n ≈ y(tn ). Chiaramente, il θ metodo si riduce al metodo di Eulero esplicito per θ = 1, al metodo di Eulero implicito per θ = 0 e al metodo di Crank–Nicolson per θ = 1/2. Nel caso implicito (θ 6= 1), ad ogni passo si deve risolvere un sistema di equazioni non lineari F (x) = 0, x = y n+1 , ove F (x) = x − h(1 − θ)f (x) − y n − hθf (y n ). La matrice Jacobiana associata (utile per l’applicazione del metodo di Newton) è ∂f (x) Jij (x) = I − h(1 − θ) i . ∂xj Ovviamente, si può scegliere un metodi di Newton modificato. Come vettore iniziale per il calcolo di y n+1 si può prendere la soluzione al passo precedente yn. 1.1 Caso lineare Il caso più frequente è quello lineare autonomo ( y ′ (t) = Ay(t) y(t0 ) = y 0 con passo di integrazione h costante. In tal caso, il metodo si scrive (I − h(1 − θ)A)y n+1 = y n + hθAy n Nel caso implicito, si tratta dunque di risolvere un sistema lineare di matrice I − h(1 − θ)A ad ogni passo. Pertanto, per problemi di piccola dimensione, è conveniente precalcolare la fattorizzazione LU della matrice. Altrimenti, si 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 . 1.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)) y(t ) = y0,0 ′ 0 y (t0 ) = y0,1 .. . (d−1) y (t0 ) = y0,d−1 1.3. VERIFICA DELLA CORRETTEZZA DELL’IMPLEMENTAZIONE21 si possono ricondurre ad un sistema di ODEs di ordine uno, mediante la sostituzione y1 (t) = y(t) y2 (t) = y ′ (t) .. . yd−1 (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 1.3 Verifica della correttezza dell’implementazione Supponiamo di aver implementato un metodo di ordine p per la soluzione del sistema differenziale ( y ′ (t) = f (y(t)) y(t0 ) = y 0 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 (x(t)) = g(t) A questo punto, si risolve il sistema differenziale ( y ′ (t) = f (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 h1 = t∗ /m1 e h2 = t∗ /m2 , rispettivamente. Si avranno errori finali em1 ,h1 = ky m1 ,h1 − x(t0 + t∗ )k = Chp1 e em2 ,h2 = ky m2 ,h2 − x(t0 + t∗ )k = Chp2 . Si ha dunque µ ¶p em2 ,h2 h2 = , em1 ,h1 h1 22 CAPITOLO 1. THETA-METODO da cui log em2 ,h2 − log em1 ,h1 = p(log h2 − log h1 ) = −p(log m2 − log m1 ) . Dunque, rappresentando in un grafico logaritmico-logaritmico l’errore in dipendenza 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 (y(t)) sia particolarmente complicato, invece di calcolare il residuo, si può calcolare una soluzione di riferimento y m̄,h̄ e poi confrontare con essa le soluzioni y m1 ,h1 e y m2 ,h2 , 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. Falsa superconvergenza Supponiamo che la soluzione esatta di un problema differenziale sia y = 1 e che, discretizzandolo con m = 1, 2, 4, 8 passi si ottengano le soluzioni y1 = 17, y2 = 9, y4 = 5 e y8 = 3. Supponiamo poi di averne calcolato una soluzione di riferimento con m = 16 passi ȳ = y16 = 2. In Figura 1.1 il grafico degli errori che si ottiene. 1.3. VERIFICA DELLA CORRETTEZZA DELL’IMPLEMENTAZIONE23 100 rispetto alla soluzione esatta rispetto alla soluzione di riferimento errore 10 1 0.1 1 2 4 m Figura 1.1: Ordine dei metodi 8 Capitolo 2 Metodi di Runge–Kutta 2.1 Implementazione dei metodi di Runge– Kutta Consideriamo un metodo Runge–Kutta esplicito i−1 X ξ = y + h ai,j f (tn + cj h, ξ j ), n i i = 1, . . . , ν j=1 ν X y = y + h bj f (tn + cj h, ξ j ) n n+1 j=1 Ai fini dell’implementazione, per evitare di calcolare più volte la funzione f negli stessi punti, si usa lo schema i−1 X k = f (tn + ci h, y n + h ai,j kj ), i = 1, . . . , ν i j=1 2.2 y = yn + h n+1 ν X bj k j j=1 Metodi di Runge–Kutta embedded Supponiamo di avere un metodo di Runge–Kutta esplicito di ordine p − 1 il cui tableaux è riportato nella Tabella 2.1 e un altro metodo di Runge– Kutta di ordine p il cui tableaux è riportato nella Tabella 2.2. È chiaro che, 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 24 2.2. METODI DI RUNGE–KUTTA EMBEDDED 0 c2 c3 .. . cν−1 a2,1 a3,1 .. . a3,2 .. . ... aν−1,1 b1 aν−1,2 b2 ... ... 25 aν−1,ν−2 bν−2 bν−1 Tabella 2.1: Metodo di Runge–Kutta di ordine p − 1. 0 c2 c3 .. . a2,1 a3,1 .. . a3,2 .. . ... cν−1 cν aν−1,1 aν,1 aν−1,2 aν,2 ... ... aν−1,ν−2 aν,ν−2 aν,ν−1 b̂1 b̂2 ... b̂ν−2 b̂ν−1 b̂ν Tabella 2.2: Metodo di Runge–Kutta di ordine p. dice embedded e si scrive di solito un unico tableaux, come nella Tabella 2.3. Consideriamo il sistema differenziale 0 c2 c3 .. . cν a2,1 a3,1 .. . a32 .. . ... aν,1 b1 aν,2 b2 ... ... aν,ν−1 bν−1 b̂1 b̂2 ... b̂ν−1 b̂ν Tabella 2.3: Metodi di Runge–Kutta embedded di ordine p − 1 e p. ( ỹ ′ (t) = f (t, ỹ(t)) ỹ(tn ) = y (p) n (p) ove y n è l’approssimazione di y(tn ) ottenuta con il metodo Runge–Kutta di ordine p. Si ha allora (p) (p−1) (p) (p−1) ky n+1 − y n+1 k = ky n+1 − ỹ(tn+1 ) + ỹ(tn+1 ) − y n+1 k / Chpn+1 , (2.1) 26 CAPITOLO 2. METODI DI RUNGE–KUTTA ove hn+1 = tn+1 − tn è il passo di integrazione e Chp−1 n+1 è l’errore di troncamento locale del metodo di ordine p − 1. Se si vuole controllare tale errore si può allora imporre, ad ogni passo, che (p) (p−1) (p) ky n+1 − y n+1 k ≤ tola + ky n+1 ktolr , (p) (p−1) rifiutando y n+1 (e y n+1 ) nel caso la disuguaglianza non sia soddisfatta e calcolando un nuovo passo di integrazione minore del precedente. 2.2.1 Passo di integrazione variabile Per calcolare il successivo passo di integrazione hn+2 , imponiamo che valga (p) Chpn+2 = tola + ky n+1 ktolr e, ricavando 1/C da (2.1), si ha hn+2 = à (p) tola + ky n+1 ktolr (p) (p−1) ky n+1 − y n+1 k !1/p · hn+1 . Per evitare che il passo di integrazione cambi troppo bruscamente, si può adottare una correzione del tipo à !1/p (p) tol + ky ktol a r n+1 · hn+1 . hn+2 = min 2, max 0.6, 0.9 · (p) (p−1) ky n+1 − y n+1 k 2.2.2 Strutture in GNU Octave Dato un generico metodo esplicito per la soluzione di un sistema differenziale (1.1), implementiamo l’algoritmo di risoluzione mediante una function [tout,yout] = method(odefun,tspan,y0), ove odefun implementa f (t, y(t)), tspan è un vettore dei tempi ai quali si desidera la soluzione, y0 la soluzione iniziale (corrispondente a tspan(1)), tout un vettore dei tempi ai quali si ottiene la soluzione e yout la soluzione corrispondente. Opzionalmente, si può passare una struttura options con i seguenti dati: • options.RelTol tolleranza relativa • options.AbsTol tolleranza assoluta • options.InitialStep passo temporale iniziale Capitolo 3 Integratori esponenziali Il metodo Eulero esponenziale per la risoluzione di (14) è yn+1 = exp(hA)yn + kϕ1 (hA)b(yn ) (3.1) ove yn ≈ y(tn ), tn+1 = tn + h. Proposizione 1. Per il metodo di Eulero esponenziale (3.1), se y(tn ) = yn , si ha ky(tn+1 ) − yn+1 k = O(h2 ) e y(tn+1 ) = yn+1 , se b(y(t)) = b(y0 ) ≡ b . Dunque il metodo è esatto per problemi lineari autonomi a coefficienti costanti, di ordine 1 altrimenti. Dimostrazione. Si ha yn+1 = exp(hA)yn + Z tn+1 tn exp((tn+1 − τ )A)g(tn )dτ , ove si è posto g(t) = b(y(t)). Per la formula di variazioni delle costanti (11) Z tn+1 exp((tn+1 − τ )A)g(tn )dτ = y(tn+1 ) − exp(hA)y(tn ) − tn Z tn+1 = exp(hA)y(tn ) + exp((tn+1 − τ )A)g(τ )dτ + tn Z tn+1 − exp(hA)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 2 = h ϕ2 (hA)g ′ (τn ) 27 28 CAPITOLO 3. INTEGRATORI ESPONENZIALI Proposizione 2. Per un problema lineare, non autonomo ( y ′ (t) = Ay(t) + b(t), t > 0 y(t0 ) = y0 il metodo esponenziale—punto medio yn+1 = exp(hA)yn + kϕ1 (hA)b(tn + h/2) è di ordine 2. Dimostrazione. Procedendo come sopra, si arriva a Z tn+1 y(tn+1 ) = yn+1 + exp((tn+1 − τ )A)g ′ (τn + h/2)(τ − (tn + h/2))dτ = t Z ntn+1 = yn+1 + exp((tn+1 − τ )A)g ′ (τn + h/2)(τ − tn − h/2)dτ = tn 2 = yn+1 + (h ϕ2 (hA) − h/2hϕ1 (hA))g ′ (τn + h/2) = µ 2 ¶ h I h3 A h2 I h3 A 4 4 = yn+1 + + + O(h ) − − + O(h ) g ′ (τn + h/2) . 2 6 2 2 Capitolo 4 Esercizi 1. Si consideri il seguente problema differenziale del secondo ordine ai limiti ′′ y (x) − 3 cos(y(x)) = 0, x ∈ (0, 1) y(0) = 0 y(1) = 1 Lo si trasformi in un sistema del primo ordine (t = x, y1 (t) = y(x), y2 (t) = y ′ (x)) da risolvere con il metodo di Eulero esplicito e si determini, con una opportuna strategia, quale dovrebbe essere il valore iniziale y2 (0) affinché y1 (t) = y(x) sia soluzione del problema originale. 2. Con riferimento alla Figura 4.1, l’equazione del pendolo è ′′ lϑ (t) = −g sin ϑ(t) ϑ(0) = ϑ0 ϑ′ (0) = 0 p La si risolva con il metodo di Crank–Nicolson fino al tempo t∗ = π l/g (assumendo l = 1, ϑ0 = π/4). Si confronti la traiettoria con quella del pendolo linearizzato (sin ϑ(t) ≈ ϑ(t)). Di quest’ultimo, si trovi il numero 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([-2,1,zeros(1,N-2)])), N = 10, usando il θ-metodo con θ = 0, 1/2, 1 e diversi passi temporali h = 2−3 , 2−4 , . . . , 2−8 . Si confrontino i risultati con la soluzione di riferimento ottenuta usando θ = 1/2 e h = 2−10 , mettendo in evidenza 29 30 CAPITOLO 4. ESERCIZI ϑ0 l ϑ(t) m g Figura 4.1: Pendolo l’ordine del metodo usato. Si provi anche il valore θ = 2/3, discutendo i risultati ottenuti. 4. Si risolva il sistema di ODEs ′ A (t) = −2a(t)A(t) a′ (t) = A(t)2 + Ω(t)2 − a(t)2 − 1 Ω′ (t) = −2(a(t) + A(t))Ω(t) con dato iniziale (4.1) A(0) = 0.5 a(0) = 2 Ω(0) = 10 con il metodo di Eulero implicito fino ad un tempo finale t∗ = 15, producendo 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 Runge–Kutta–Fehlberg il cui tableaux è riportato nella Tabella 4.1, e se ne individui numericamente l’ordine. e lo si testi sul sistema differenziale (4.1). 31 0 1 4 3 8 12 13 1 1 2 1 4 3 32 1932 2197 439 216 8 − 27 9 32 − 7200 2197 −8 7296 2197 3680 513 3544 − 2565 845 − 4104 1859 4104 − 11 40 25 216 0 1408 2565 2197 4104 − 15 16 135 0 6656 12825 28561 56430 9 − 50 2 2 55 Tabella 4.1: Metodo di Runge–Kutta–Fehlberg. 6. Si implementi la function relativa ad un generico metodo di Runge– Kutta con tableaux dato da c A bT ove c, A e b sono dati. Parte II BVPs (Problemi ai limiti) 32 33 Consideriamo il seguente problema ai limiti (boundary value problem) ′′ ′ u (x) = f (x, u(x), u (x)), x ∈ (a, b) u(a) = ua (4.2) u(b) = ub ove u(x) ∈ R. Capitolo 5 Metodo di shooting È possibile trasformare il problema (4.2) 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 iniziali, 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 (5.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) 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 genere non lineare) F (s) = 0. 5.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 (5.1) 34 35 5.2. METODO DI NEWTON è 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. 5.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)), u(a) = ua u′ (a) = s x ∈ (a, b) 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 u(a | u′ (a) = s + h) − u(a | u′ (a) = s) ∂ u(a | u′ (a) = s) = lim = h→0 ∂s h u a − ua = lim =0 h→0 h u′ (a | u′ (a) = s + h) − u′ (a | u′ (a) = s) ∂ ′ u (a | u′ (a) = s) = lim = v ′ (a) = h→0 ∂s h s+h−s = lim =1 h→0 h v(a) = 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 36 CAPITOLO 5. 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) y1 1 2 3 y2 1 2 4 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. 5.3 Problema ai limiti con frontiera libera Un caso particolarmente interessante per l’applicazione del metodo di shooting è quello a frontiera libera (free boundary) ′′ u (x) = f (x, u(x), u′ (x)), u(s) = α u′ (s) = β u(b) = ub x ∈ (s, b) (5.2) 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 h→0 ∂s h 5.3. PROBLEMA AI LIMITI CON FRONTIERA LIBERA 37 è 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) = −u′′ (s) h→0 h v ′ (s) = lim ove il valore u′′ (s) si ricava dal problema (5.2). Capitolo 6 Differenze finite Consideriamo il seguente problema ai limiti u′′ (x) = f (x, u(x), u′ (x)), x ∈ (a, b) (6.1) soggetto a condizioni al bordo di Dirichlet o di Neumann. 6.1 Costruzione delle matrici delle differenze finite La matrice corrispondente all’approssimazione mediante differenze finite di ordine 2 della derivata prima con griglia non equispaziata è ′ ∗ ∗ ∗ ∗ ∗ ∗ u (x1 ) u(x ) 1 1 −1 0 0 ... 0 u′ (x2 ) u(x2 ) h1 +h2 h1 +h2 . ... u′ (x3 ) 0 1 −1 . u(x ) 0 . 3 h2 +h3 h2 +h3 ≈ . .. .. . . . . . . . . . . . . . . 0 . ′ . −1 1 u (xm−1 ) 0 u(xm−1 ) ... 0 0 hm−2 +hm−1 hm−2 +hm−1 u′ (xm ) u(xm ) ∗ ∗ ∗ ∗ ∗ ∗ 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) 38 6.2. CONDIZIONI DI DIRICHLET 39 La costruzione della matrice relativa alla derivata seconda è analoga. Nel caso di griglia equispaziata, di passo h, le matrici relative alle approssimazione della derivata prima e seconda possono essere costruite con i comandi > toeplitz(sparse([0,-1/(2*h),zeros(1,m-2)]),... > sparse([0,1/(2*h),zeros(1,m-2)])) e > toeplitz(sparse([-2/h^2,1/h^2,zeros(1,m-2)])) rispettivamente. 6.2 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) = 0, x ∈ (a, b) u(a) = ua u(b) = u b diventa −2 1 1 0 h2 ... 0 0 0 u1 1 0 0 ··· 0 −2 1 0 · · · 0 u2 0 . . . . . . . . . . . . .. .. .. . . . . = . ... ... ... ... . . 0 . . · · · 0 1 −2 1 um−1 0 0 ··· 0 0 1 −2 um Poi, si correggono le equazioni relative ai nodi al bordo 1 1 1 0 2 h ... 0 0 0 0 0 ··· 0 ua u1 −2 1 0 · · · 0 u2 0. . . ... ... ... ... . . 1 . . .. = . . . . . . . . . . . . .. h2 .. 0 . . 0 · · · 0 1 −2 1 um−1 ··· 0 0 0 1 ub um 40 6.3 CAPITOLO 6. DIFFERENZE FINITE Condizioni di Neumann Se vengono prescritti i valori della derivata prima u′ (a) = u′a o u′ (b) = u′b , è necessario approssimare la derivata prima con uno stencil non simmetrico, eventualmente con ordine di approssimazione minore. Per esempio, la discretizzazione del problema ai limiti ′′ u (x) = 0, x ∈ (a, b) u′ (a) = u′a u(b) = u b potrebbe essere −1 1 1 0 2 h ... 0 0 o, meglio, ′ ua /h 1 0 0 ··· 0 u1 u2 0 −2 1 0 · · · 0 . . . . . . . . . . . . .. u .. . 3 . .. = . ... ... ... ... . 0 . . · · · 0 1 −2 1 um−1 0 um ub /h2 ··· 0 0 0 1 ′ 3 ua /h − 2 2 − 21 0 · · · 0 u1 1 −2 1 0 · · · 0 u 2 0 . . . . . . . . . . . . .. u .. 1 3 . . 0 .. = . ... ... ... ... . h2 ... 0 . . 0 ··· 0 1 −2 1 um−1 0 um 0 ··· 0 0 0 1 ub /h2 Infatti lo stencil in avanti [−3, 4, −1]/(2h) produce una approssimazione del secondo ordine in h della derivata prima. 6.4 Differenze finite centrate del secondo ordine Sia u ∈ C 4 ([a, b]) e xi = a + (i − 1)h, i = 1, 2, . . . , m, h = (b − a)/(m − 1). Sviluppando in serie, si ha h2 ′′ h3 h4 u (xi ) + u(3) (xi ) + u(4) (x̂i ) 2 6 24 3 2 h h4 h u(xi−1 ) = u(xi ) − hu′ (xi ) + u′′ (xi ) − u(3) (xi ) + u(4) (x̃i ) 2 6 24 u(xi+1 ) = u(xi ) + hu′ (xi ) + 41 6.5. CONVERGENZA PER UN PROBLEMA MODELLO da cui u(xi+1 ) − 2u(xi ) + u(xi−1 ) + τi h2 2 ove τi = − h12 u(4) (x̄i ) è l’errore locale (u(4) (x̂i )/24 + u(4) (x̃i )/24 = u(4) (x̄i )/12, per un opportuno x̄i , per il teorema dei valori intermedi). u′′ (xi ) = 6.5 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 u(b) = u b (6.2) con q, g ∈ C 0 ([a, b]), q(x) ≥ 0 per x ∈ [a, b]. Vogliamo studiare l’esistenza, l’unicità e la regolarità della soluzione analitica. 6.5.1 Unicità Siano u1 (x) e u2 (x) due soluzioni di (6.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 (6.3) z(b) = 0 Proposizione 3. Se z(x) è soluzione di (6.3), allora z(x) ≡ 0. Dimostrazione (metodo dell’energia). Moltiplicando l’equazione per z(x) ed integrando si ha Z b Z b ′′ q(x)z(x)2 dx = −z (x)z(x)dx + 0= 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 q(x)z(x)2 dx z ′ (x)2 dx + = a a Poiché le funzioni integrande sono non negative, si ha che deve essere necessariamente z(x) ≡ 0. Dunque, u1 (x) ≡ u2 (x). 42 6.5.2 CAPITOLO 6. DIFFERENZE FINITE Esistenza Sia z(x) = c1 z1 (x) + c2 z2 (x) la soluzione generale di −z ′′ (x) + q(x)z(x) = 0. La soluzione di (6.3) 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). La soluzione di (6.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. 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 u(0) = 0 u(π) = 1 La soluzione generale è c1 cos(x) + c2 sin(x), ma non è possibile imporre le condizioni al bordo. 6.5.3 Regolarità Proposizione 4. 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]). 6.5. CONVERGENZA PER UN PROBLEMA MODELLO 43 Ci occupiamo adesso di analizzare la convergenza del problema discretizzato mediante differenze finite centrate del secondo ordine, che si scrive ui+1 − 2ui + ui−1 + qi ui = gi , i = 2, 3, . . . , m − 1 − h2 u1 = u a um = u b ove qi = q(xi ) e gi = g(xi ). 6.5.4 Consistenza Se si sostituisce ui con la soluzione analitica u(xi ), si ottiene u(xi+1 ) − 2u(xi ) + u(xi−1 ) + q(xi )u(xi ) − g(xi ) = τi , − h2 i = 2, 3, . . . , m − 1 u(x1 ) = ua u(xm ) = ub da cui si deduce che il metodo numerico è consistente di ordine 2. Il sistema lineare da risolvere per trovare uh = [u1 , u2 , . . . , um−1 , um ]T è 1 0 ... −1 2 + q2 h2 −1 1 0 −1 2 + q3 h2 ... ... h2 ... 0 ... 0 0 ... ... ... 0 ... ... −1 ... 0 ... −1 0 2 + qm−1 h2 0 0 ... ... −1 .. . .. . 0 .. . .. . ... .. . .. . 0 u1 ua /h2 u2 g2 0 .. . u3 g3 .. = .. 0 . . −1 um−1 gm−1 um ub /h2 1 e può essere semplificato in 2 + q2 h2 −1 −1 2 + q3 h2 .. . 1 0 . h2 .. 0 .. . ... 0 ... 0 ... −1 0 2 + qm−2 h2 −1 cioè Ah uh = gh 0 .. . g2 + ua /h2 u2 u3 g3 .. .. . 0 . = .. .. . . 0 um−2 gm−2 −1 2 u g + u /h m−1 m−1 b 2 + qm−1 h2 (6.4) 44 6.5.5 CAPITOLO 6. DIFFERENZE FINITE Esistenza ed unicità Proposizione 5. Il sistema lineare (6.4) è non singolare e dunque ammette un’unica soluzione. Dimostrazione (metodo dell’energia discreto). Consideriamo il prodotto z T Ah z ove z = [z2 , z3 , . . . , zm−1 ]T . Si ha 1 [(2 + q2 h2 )z22 − z2 z3 − z3 z2 + (2 + q3 h2 )z32 − z3 z4 + . . . + 2 h 2 + . . . − zm−1 zm−2 + (2 + qm−1 h2 )zm−1 ]= 1 2 ]+ = 2 [z22 + (z2 − z3 )2 + (z3 − z4 )2 + . . . + (zm−2 − zm−1 )2 + zm−1 h m−1 X + qi zi2 ≥ 0 z T Ah z = i=2 Dunque la matrice Ah è definita positiva e quindi non singolare. 6.5.6 Proprietà di Ah Ah è 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. 6.5.7 Stabilità Consideriamo due soluzioni relative a dati perturbati g̃h e ĝh . Si ha Ah ũh = g̃h Ah ûh = ĝh da cui (ũh − ûh ) = A−1 h (g̃h − ĝh ) Se si vuole che le perturbazioni sui dati non si ripercuotano in maniera distruttiva sulle soluzioni, occorre che la matrice A−1 h sia limitata in norma indipendentemente da h, in particolare per h → 0. Consideriamo la matrice Ah,q=0 corrispondente alla stessa discretizzazione nel caso q(x) ≡ 0. Si ha Ah − Ah,q=0 = diag(q2 , . . . , qm−1 ) ≥ 0. Allora −1 −1 −1 A−1 h,q=0 − Ah = Ah,q=0 (Ah − Ah,q=0 )Ah ≥ 0 6.5. CONVERGENZA PER UN PROBLEMA MODELLO 45 −1 perché Ahq =0 e Ah sono M -matrici. Allora A−1 h ≤ Ah,q=0 . Osserviamo poi T che A−1 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 (3) (x) ≡ 0, cosı̀ è per v (4) e dunque l’errore locale, per questo problema, è 0. Dunque −1 T kA−1 h,q=0 k∞ = kAh,q=0 [1, . . . , 1] k∞ = = max i=2,...,m−1 max i=2,...,m−1 v(xi ) ≤ max v(x) ≤ x∈[a,b] vi = (b − a)2 8 e poiché kA−1 h k∞ ≤ kAh,q=0 k∞ , si ha la maggiorazione richiesta. 6.5.8 Convergenza Definiamo eh = [e2,h , . . . , em−1,h ]T = [u2,h − u(x2 ), . . . , um−1,h − u(xm−1 )]T . Poiché Ah [u2,h , . . . , um−1,h ]T = gh Ah [u(x2 ), . . . , u(xm−1 )]T = gh + τh si deduce eh = −A−1 h τh . Combinando i risultati di consistenza e stabilità, si ottiene, per il problema (6.2) discretizzato mediante differenze finite centrate del secondo ordine, (b − a)2 h2 (4) ku k∞ keh k∞ ≤ 8 12 e dunque l’errore è proporzionale a h2 , posto che u ∈ C 4 ([a, b]). 6.5.9 Un esempio: l’equazione della catenaria Consideriamo l’equazione della catenaria p ′′ ′ 2 u (x) = a 1 + u (x) , u(−1) = 1 u(1) = 1 x ∈ (−1, 1) 46 CAPITOLO 6. DIFFERENZE FINITE La discretizzazione mediante differenze finite centrate del secondo ordine è u1 1 ¡ u3 −u1 ¢2 u2 q . 1 + 2h . . .. A . − a =b . .. q ¢ ¡ um −um−2 2 um−1 1+ 2h 1 um Si tratta dunque di risolvere il sistema non lineare p F (u) = Au − a 1 + (Bu)2 − b = 0 ove 1 0 0 1 −2 1 . . 1 0 .. .. A= 2 . h .. . . . . . . 0 · · · 0 0 ··· 0 0 ··· 0 ··· .. .. . . .. .. . . 1 −2 0 0 Lo jacobiano di F (u) è J(u) = A − aD(u)B, 6.6 Norme 0 0 .. . , 0 1 1 0 0 −1 0 .. . 1 0 B= . . 2h .. .. 0 ··· 0 ··· D = (dij (u)), 0 0 ··· 1 0 ··· .. .. .. . . . .. .. .. . . . 0 −1 0 0 0 0 (Bu)i q , 1 + (Bu)2i dij (u) = 0, 0 0 .. . , 0 1 0 1 h2 −a 0 b = ... 0 1 −a h2 i=j i 6= j Data una funzione u(x) e due discretizzazioni su nodi equispaziati [ũ1 , ũ2 , . . . , ũm ] ≈ [u(x̃1 ), u(x̃2 ), . . . , u(x̃m )] e [û1 , û2 , . . . , ûl ] ≈ [u(x̂1 ), u(x̂2 ), . . . , u(x̂l )], {x̃i }i ⊂ [a, b], {x̂i }i ⊂ [a, b], con m 6= l, 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 , . . . , u(x̂l )−ûl ]k2q . Si preferisce usare la norma infinito, oppure la norma k[v1 , v2 , . . . , vm ]kL2 = kvk2 b−a m , che risulta essere una approssimazione mediante quadratura con formula dei rettangoli della norma in L2 . Capitolo 7 Equazione di Poisson Di particolare interesse è l’equazione di Poisson −∇2 u(x) = f (x), x ∈ Ω ⊂ Rd ove ∇2 è l’operatore laplaciano definito da ∇2 = d X ∂2 ∂x2k k=1 L’equazione è solitamente accompagnata da condizioni al bordo di Dirichlet o di Neumann. 7.1 Equazione di Poisson bidimensionale Analizziamo numericamente in dettaglio il caso d = 2 (x = (x, y)) e Ω = [a, b] × [c, d]. 7.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) = Dd (x) con le necessarie condizioni di compatibilità ai vertici. Introduciamo una discretizzazione xj = a+(j−1)hx , j = 1, 2, . . . , mx , hx = (b−a)/(mx −1) e yi = c+(i−1)hy , 47 48 CAPITOLO 7. EQUAZIONE DI POISSON i = 1, 2, . . . , my , hy = (d − c)/(my − 1). Introduciamo infine la discretizzazione di u(x, y) definita da uk ≈ u(xj , yi ), k = (j − 1)my + i di cui si vede un esempio in Figura 7.1. La matrice di discretizzazione alle dif- u4 u8 u12 u16 u3 u7 u11 u15 u2 u6 u10 u14 u1 u5 u9 u13 Figura 7.1: Numerazione di una griglia bidimensionale ferenze finite centrate del secondo ordine, senza tener conto delle condizioni al bordo, è data da A = Imx ⊗ Ay + Ax ⊗ Imy ove ⊗ indica il prodotto di Kronecker e 2 −1 0 6 6−1 6 6 6 1 6 0 Ay = 2 6 hy 6 6 6 0 6 6 . 4 .. 0 2 .. . −1 .. . .. 2 .. ... ... ... ... . 0 .. . .. ... .. . .. . 0 ... −1 0 . . 2 −1 3 0 .7 .7 .7 7 7 07 7, 7 7 07 7 7 −15 2 2 2 6 6−1 6 6 6 1 6 0 Ax = 2 6 hx 6 6 6 0 6 6 . 4 .. 0 0 ... ... 2 .. . −1 .. . 0 .. . .. .. . .. ... .. . .. . 0 ... −1 0 −1 . ... ... . 2 −1 3 0 .7 .7 .7 7 7 07 7 7 7 07 7 7 −15 2 ove Ay ∈ Rmy ×my e Ax ∈ Rmx ×mx . Poi, le righe di indice, diciamo k, corrispondente ad un nodo al bordo vanno sostituite con il vettore della base canonica ek , diviso per h2x + h2y . Il termine noto è [b1 , b2 , . . . , bmx my ]T , ove f (xj , yi ) se (xj , yi ) è un nodo interno, k = (j − 1)my + i Da (yi ) se xj = a, k = (j − 1)my + i 2 2 y hDx +h (y ) b i se xj = b, k = (j − 1)my + i bk = h2x +h2y D (x ) c j se yi = c, k = (j − 1)my + i h2 +h2 x y D (x ) j d 2 2 se yi = d, k = (j − 1)my + i h +h x y 49 7.1. EQUAZIONE DI POISSON BIDIMENSIONALE Alternativamente, si può sostituire il solo termine diagonale delle righe corrispondenti 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. 7.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 0 0 ⊗ Ay + Ax ⊗ Im A = Im y x ove 2 −1 0 6 6−1 6 6 6 1 6 0 Ay = 2 6 hy 6 6 6 0 6 6 . 4 .. 0 2 .. . −1 .. . .. 2 e 0 Im x .. ... ... ... ... . 0 .. . .. ... .. . .. . 0 ... −1 1 2 . . 2 −2 3 0 .7 .7 .7 7 7 07 7, 7 7 07 7 7 −1 5 3 2 0 0 0 ... 0 . 0 1 0 . . . .. .. .. .. , = 0 . . . 0 .. . . . . 0 1 0 0 ... ... 0 1 2 3 2 6 6 −1 6 6 6 1 6 0 Ax = 2 6 hx 6 6 6 0 6 6 . 4 .. 0 0 Im y 1 2 ... ... 2 .. . −1 .. . 0 .. . .. .. . .. ... .. . .. . 0 ... −1 0 −2 . ... ... 1 0 0 ... 0 . 0 1 0 . . . .. .. .. .. = 0 . . . 0 .. . . . . 0 1 0 0 ... ... 0 0 . 2 −1 3 0 .7 .7 .7 7 7 07 7 7 7 07 7 7 −15 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 50 CAPITOLO 7. EQUAZIONE DI POISSON bordo (a, c), va sostituita con [1, 0, . . . , 0] ⊗ 1 [0, . . . , 0, 1/2, −2, 3/2] h2y Il termine noto è [b1 , b2 , . . . , bmx my ]T , ove bk = f (xj , yi ) Db (yi ) h2x +h2y Dc (xj ) h2x +h2y N a (yi ) hx Nd (xj ) hy se (xj , yi ) è un nodo interno, k = (j − 1)my + i se xj = b, k = (j − 1)my + i se yi = c, k = (j − 1)my + i se xj = a, k = (j − 1)my + i, i 6= 1, i 6= my se yi = d, k = (j − 1)my + i, j 6= mx Capitolo 8 Metodi variazionali 8.1 Formulazione variazionale di un problema modello Consideriamo il seguente problema ai limiti (equazione di Poisson) ( −u′′ (x) = f (x), x ∈ (0, 1) u(0) = u(1) = 0 (8.1) con f ∈ C 0 ([0, 1]). 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 funzionale lineare J : V → R dato da 1 J(v) = (v ′ , v ′ ) − (f, v) 2 ove (v, w) = Z 1 v(x)w(x)dx 0 Teorema 2 (Formulazione variazionale). Se u è la soluzione del problema (8.1), allora (u′ , v ′ ) = (f, v), ∀v ∈ V (8.2) e, equivalentemente, J(u) ≤ J(v), ∀v ∈ V Dimostrazione. Sia u soluzione di (8.1). Allora, per ogni v ∈ V , Z 0 1 ′′ −u (x)v(x)dx = Z 1 f (x)v(x)dx = (f, v) 0 51 (8.3) 52 CAPITOLO 8. METODI VARIAZIONALI Integrando per parti, Z 1 ¯1 Z ¯ ′′ ′ −u (x)v(x)dx = −u (x)v(x)¯ + 0 0 1 u′ (x)v ′ (x)dx = (u′ , v ′ ) 0 poiché v(0) = v(1) = 0. Sia adesso u ∈ V soluzione di (8.2) e w = v − u, per v ∈ V . Allora w ∈ V e 1 J(v) = J(u + w) = (u′ + w′ , u′ + w′ ) − (f, u + w) = 2 1 ′ ′ 1 = (u , u ) + (u′ , w′ ) + (w′ , w′ ) − (f, u) − (f, w) ≥ J(u) 2 2 ′ ′ ′ ′ perché (u , w ) − (f, w) = 0 e (w , w ) ≥ 0. Dunque J(u) ≤ J(v). Sia infine u ∈ V soluzione di (8.3). Allora J(u) ≤ J(u + εv), ∀ε, ∀v ∈ V Allora ψ(ε) = J(u + εv) ha un minimo in ε = 0 e dunque ψ ′ (0) = 0. Poiché ε2 1 ψ(ε) = (u′ , u′ ) + ε(u′ , v ′ ) + (v ′ , v ′ ) − (f, u) − ε(f, v) 2 2 si ha i h ε ψ(ε) − ψ(0) = lim (u′ , v ′ ) + (v ′ , v ′ ) − (f, v) = ε→0 ε→0 ε 2 = (u′ , v ′ ) − (f, v) 0 =ψ ′ (0) = lim Abbiamo dunque dimostrato le seguenti implicazioni (8.1) ⇒ (8.2) ⇔ (8.3) Verifichiamo che la soluzione di (8.2) è unica: se u1 e u2 sono due soluzioni, 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 u′1 (x) u′2 (x) e quindi − = (u1 (x) − u2 (x))′ = 0. Pertanto u1 − u2 è costante e siccome u1 (0) − u2 (0) = 0, allora u1 (x) − u2 (x) = 0. La soluzione di (8.1) si chiama soluzione forte del problema (8.1), mentre la soluzione di (8.2) (o, equivalentemente, di (8.3)) si chiama soluzione debole del problema (8.1). Perché soluzione debole? Se u è soluzione di (8.2) e u ∈ C 2 ([0, 1]), allora 0 = (u′ − f, v) = (−u′′ − f, v) per ogni v ∈ V . Poiché u′′ + f è continua, si deduce −u′′ (x) = f (x) per 0 < x < 1. Le formulazioni variazionali del problema (8.1) sono in realtà le più “fisiche”: pensando al problema della trave, esse permettono di descrivere anche il caso in cui il carico f (x) non sia continuo (ma, per esempio, applicato in un solo punto). 8.1. FORMULAZIONE VARIAZIONALE DI UN PROBLEMA MODELLO53 8.1.1 Metodo di approssimazione variazionale Prendiamo un sottospazio Vh di V di dimensione finita. Si cerca allora uh ∈ Vh tale che (uh , vh )′ = (f, vh ), ∀vh ∈ Vh (8.4) (metodo di Galerkin) ove, per brevità, (uh , vh )′ = (u′h , vh′ ), o, equivalentemente J(uh ) = inf J(vh ) vh ∈Vh (metodo di Ritz). Teorema 3. Il problema (8.4) ha un’unica soluzione. Dimostrazione. Sia {φj }m j=1 una base di Vh . Allora uh (x) = m X uj φj (x) j=1 e il problema (8.4) si riscrive, per i = 1, 2, . . . , m, Z 1 0 ′ m m X X u′h (x)φ′i (x)dx = uj φj , φi = (φj , φi )′ uj = Auh = (f, φi ) j=1 j=1 ove A = (φj , φj )′ . Se (uh , vh )′ = 0 per ogni vh ∈ Vh (cioè uh è soluzione del problema omogenero), allora, in particolare, (uh , uh )′ = (u′h , u′h ) = 0 da cui uh = 0. D’altra parte, se (uh , vh )′ = 0 per ogni vh ∈ Vh , allora uh = 0 è soluzione di m X (φj , φi )′ uj = A[u1 , u2 , . . . , um ]T = 0, i = 1, 2, . . . , m j=1 Dunque, la matrice A = (φj , φi )′ = (φ′j , φ′i ) è non singolare. La matrice A, che risulta essere simmetrica e definita positiva, si chiama matrice di rigidezza (stiffness matrix) e il vettore (f, φi ) vettore di carico (load vector). Vale poi il seguente risultato: Teorema 4. Se u è soluzione di (8.2) e uh di (8.4), allora ku − uh k′ ≤ inf ku − vh k′ vh ∈Vh ove k·k′ = p (·, ·)′ . 54 CAPITOLO 8. METODI VARIAZIONALI Dimostrazione. Dalle uguaglianze (u, v)′ = (f, v) ∀v ∈ V e, dunque, ∀v ∈ Vh ′ (uh , vh ) = (f, vh ) ∀vh ∈ Vh si ricava ((u − uh ), wh )′ = 0 per ogni wh ∈ Vh . Dunque (u − uh , u − uh )′ = (u − uh , u − vh + vh − uh )′ = (u − uh , u − vh )′ ≤ ≤ ku − uh k′ ku − vh k′ (per la disuguaglianza di Cauchy–Schwartz) da cui ku − uh k′ ≤ ku − vh k′ , ∀vh ∈ Vh e quindi la tesi. Per definizione, uh è allora la proiezione ortogonale della soluzione esatta u sul sottospazio Vh , tramite il prodotto scalare (·, ·)′ . La scelta di Vh 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 da (u, vh )′ = (f, vh ), ∀vh ∈ Vh (il metodo si dice fortemente consistente). Per quanto riguarda la stabilità, se dimostriamo che p (8.5) kuh k′ ≤ C (f, f ) allora abbiamo q kũh − ûh k ≤ C (f˜ − fˆ, f˜ − fˆ) ′ e cioè che piccole variazioni sui dati producono piccole variazioni sulle soluzioni. Per dimostrare (8.5), osserviamo che Z 1 Z 1 ¯1 Z 1 ′ 2 2 ¯ ′ uh (x)2 dx xuh (x) dx = uh (x) x¯ − 2xuh (x)uh (x)dx = da cui e quindi 0 0 0 0 q p p p (uh , uh ) ≤ 2 (uh , uh ) (u′h , u′h ) = 2 (uh , uh ) (uh , uh )′ Poiché uh soddisfa p (uh , uh ) ≤ 2kuh k′ (uh , uh )′ = (f, uh ) si ricava, suppondendo f a quadrato sommabile, p p p kuh k′2 ≤ (f, f ) (uh , uh ) ≤ 2 (f, f )kuh k′ da cui la tesi. 8.1. FORMULAZIONE VARIAZIONALE DI UN PROBLEMA MODELLO55 Metodo degli elementi finiti (FEM) Introduciamo una discretizzazione dell’intervallo [0, 1] a passo variabile, come in m−1 Figura 8.1 Lo spazio Vh è generato dalle funzioni di base {φj }j=2 , le quali sono hj−1 h1 x1 φj φj−1 φ1 x2 xj−2 xj−1 xj φj+1 hm−1 hj xj+1 xm Figura 8.1: Hat functions definite da e mentre, per j = 1, e e, per j = m, e x − xj−1 , xj−1 ≤ x ≤ xj hj−1 φj (x) = xj+1 − x , x ≤ x ≤ x j j+1 hj 0, altrimenti 1 , xj−1 < x < xj hj−1 1 φ′j (x) = − , xj < x < xj+1 hj 0, altrimenti x2 − x , x1 ≤ x ≤ x2 h1 φ1 (x) = 0, altrimenti − 1 , x1 < x < x2 ′ h1 φ1 (x) = 0, altrimenti x−x m−1 , xm−1 ≤ x ≤ xm h m−1 φm (x) = 0, altrimenti φ′m (x) = 1 hm−1 0, , xm−1 < x < xm altrimenti 56 CAPITOLO 8. METODI VARIAZIONALI Dunque, nell’approssimazione uh (x) = m X uj φj (x) j=1 i coefficienti uj sono i valori di uh nei nodi xj . Per 1 < j < m, µ ¶2 ¶ Z xj Z xj +hj µ 1 1 1 1 2 ′ ajj = (φj , φj ) = + dx + dx = − hj−1 hj hj−1 hj xj −hj−1 xj Z xj +hj 1 1 1 − · dx = − aj j+1 = aj+1 j = (φj , φj+1 )′ = hj hj hj xj Per j = 1 e j = m, si ha invece ¶ Z x1 +h1 µ 1 1 2 dx = − a11 = h1 h1 x1 Z x1 +h1 1 1 1 a12 = a21 = − dx = − h h h 1 1 1 x1 Z xm 1 1 1 dx = − am−1 m = am m−1 = − hm−1 hm−1 hm−1 xm −hm−1 µ ¶2 Z xm 1 1 amm = − dx = hm−1 hm−1 xm −hm−1 Per quanto riguarda il calcolo di (f, φi ) si può ricorrere alla formula di quadratura del trapezio che risulta essere sufficientemente accurata. Si ha dunque, per 1 < i < m, Z xi Z xi+1 x − xi−1 xi+1 − x fi = (f, φi ) = f (x) dx + dx ≈ f (x) hi−1 hi xi−1 xi hi−1 hi hi−1 + hi ≈ f (xi ) + f (xi ) = f (xi ) 2 2 2 Per i = 1 e i = m si ha invece Z x2 x2 − x h1 f1 = (f, φ1 ) = f (x) dx ≈ f (x1 ) h1 2 Zx1xm hm−1 x − xm−1 dx ≈ f (xm ) fm = (f, φm ) = f (x) hm−1 2 xm−1 La riga i-esima del sistema lineare risulta dunque essere .. . .. . i uj−1 h 1 1 1 1 uj = f (xi ) hi−1 +hi + − 0 . . . 0 0 . . . 0 − hi−1 hi−1 hi hi 2 uj+1 .. . .. . 57 8.2. METODI SPETTRALI e dunque uguale (per questo semplice problema modello) a quella della discretizzazione con differenze finite del secondo ordine. Pertanto, è naturale aspettarsi, sotto opportune ipotesi di regolarità, che l’errore rispetto alla soluzione analitica tenda a zero come h2 , h = maxj hj . 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 omogenee, non è necessaria alcuna modifica. Infatti, la forma debole del problema è Z 1 ¯1 Z 1 ¯ ′ ′ ′ f (x)φi (x)dx, i = 1, . . . , m u (x)φi (x)dx = −u (x)φi (x)¯ + 0 0 0 Il primo termine è naturalmente zero per 1 < i < m. Non considerarlo, cioè porlo a zero, neanche per i = 1 (i = m) significa richiedere u′ (x1 ) = 0 (u′ (xm ) = 0) visto che φ1 (x1 ) = 1 (φm (xm ) = 1). Nel caso di condizioni di Neumann non omogenee (per esempio in 0), basta modificare la prima riga del sistema secondo l’equazione Z 1 Z 1 f (x)φ1 (x)dx u′ (x)φ′1 (x)dx = −u′ (0) + 0 0 8.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 v(s)∇u(s) · ν(s)ds ∇ u(x)v(x)dx = − ∇u(x) · ∇v(x)dx + Ω ∂Ω Ω ove ν(s) è il versore esterno normale a ∂Ω. 8.2 Metodi spettrali Sia u(x) = 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 esponenzialmente oppure spettralmente. Significa che |uj | decade più velocemente di ogni potenza negativa di j. Parleremo di metodi spettrali quando useremo un’approssimazione di una serie convergente spettralmente u(x) ≈ m X j=1 ûj φj (x) 58 CAPITOLO 8. METODI VARIAZIONALI per u(x). 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 = f , L operatore differenziale lineare, diventa Z b Z b m X Lφj (x)φi (x)w(x)dx = f (x)φi (x)w(x)dx uj a j=1 a Per l’approssimazione degli integrali si usano le corrispondenti formule di quadratura gaussiana a m punti, dando origine al sistema lineare Ãm ! m m X X X uj f (xn )φi (xn )wn (8.6) Lφj (xn )φi (xn )wn = n=1 n=1 j=1 In tal caso si parla di metodi pseudospettrali. I coefficienti uj che si trovano risolvendo il sistema lineare si chiamano solitamente soluzione nello P spazio spettrale. Dati i coefficienti, si ricostruisce la soluzione nello spazio fisico j uj φj (x). La formulazione di Galerkin è particolarmente utile quando le funzioni {φj }j soddisfano naturalmente le condizioni al bordo (condizioni al bordo periodiche, condizioni di Dirichlet omogenee, vanishing boundary conditions) e/o il calcolo di Lφj (x) risulta semplice. Consideriamo ora un caso particolare di fondamentale importanza. Molte proprietà risultato comuni anche agli altri metodi presudospettrali. 8.2.1 Trasformata di Fourier Sia [a, b] un intervallo di R, m > 0 pari e fissato. Consideriamo, per ogni j ∈ Z, φj (x) = Allora, Z ei(j−1−m/2)2π(x−a)/(b−a) √ b−a b φj (x)φk (x)dx = δjk a Infatti, se j = k allora φj (x)φk (x) = 1/(b − a), altrimenti φj (x)φk (x) = ei2π(j−k)(x−a)/(b−a) b−a e quindi Z a b φj (x)φk (x)dx = Z 1 0 ei2π(j−k)y (b − a)dy = 0 , b−a (8.7) 59 8.2. METODI SPETTRALI poiché l’integrale delle funzioni sin e cos in un intervallo multiplo del loro periodo è 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 , n=1 1 ≤ j, k ≤ m (8.8) È ovvio per j = k; altrimenti m X e i(n−1)2π(j−k)/m = m−1 X³ ei2π(j−k)/m n=0 n=1 = ´n = 1 − ei2π(j−k) 1 − cos(2π(j − k)) = =0 i2π(j−k)/m 1−e 1 − ei2π(j−k)/m poiché −m + 1 ≤ j − k ≤ m − 1. 8.2.2 Trasformata di Fourier discreta Sia u una funzione da [a, b] a C periodica (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), j=−∞ uj ∈ C (8.9) Fissato k ∈ Z, moltiplicando entrambi i membri per φk (x) e integrando nell’intervallo [a, b], usando (8.7) si ottiene Z b u(x)φk (x)dx = a = Z b a ∞ X +∞ X j=−∞ uj j=−∞ Z uj φj (x)φk (x) dx = b (8.10) φj (x)φk (x)dx = uk a Dunque, abbiamo un’espressione esplicita per uj . Analogamente si vede che Z a b |u(x)|2 dx = +∞ X |uj |2 j=−∞ (identità di Parseval) 60 CAPITOLO 8. METODI VARIAZIONALI La prima approssimazione da fare consiste nel troncare la serie infinita. Osserviamo che, definito J = Z \ {1, 2, . . . , m}, ¯ ¯2 ¯2 ¯ ¯ ¯ Z b ¯X Z b¯ m X ¯ ¯ ¯ ¯ ¯ ¯ ¯u(x) − uj φj (x)¯¯ dx = uj φj (x)¯ dx = ¯ ¯ a ¯ j∈J a ¯ ¯ ¯ j=1 à ! Z b X X X |uk |2 uk φk (x) dx = = uj φj (x) a j∈J k∈J k∈J Stimiamo adesso uk : si ha, per funzioni di classe C 1 , uk = Z a b µ ¶ b−a u(b) u(a) √ u(x)φk (x)dx = − + −√ i(k − 1 − m/2)2π b−a b−a Z b b−a u′ (x)φk (x)dx = O(k −1 ) + i(k − 1 − m/2)2π a Se anche u′ (a) = u′ (b) e u′ ∈ C 1 , allora, integrando ancora per parti, si ottiene uk = O(k −2 ) e cosı̀ via. Se dunque u è infinitamente derivabile e periodica (cioè tutte le derivate sono periodiche), allora uk decade più velocemente di ogni potenza negativa di k. La seconda approssimazione da fare è utilizzare una formula di quadratura per il calcolo di uk . 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 X b−a b−aX u(x)dx ≈ u(xn ) + f (xm+1 ) = u(xn ) f (x1 ) + 2 2m m a n=2 n=1 Usando la (8.8), abbiamo mδjk = m X ei(n−1)2π(j−k)/m = m X ei(j−k)2πyn = ei(j−k)2π(xn −a)/(b−a) = n=1 n=1 n=1 m X 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) = b − a b − a n=1 Z b m X φj (x)φk (x)dx φj (xn )φk (xn ) = m = (b − a) n=1 a cioè la famiglia {φj }j , 1 ≤ j ≤ m, è ortonormale anche rispetto al prodotto scalare discreto m b−aX φj (xn )φk (xn ) (φj , φk )d = m n=1 61 8.2. METODI SPETTRALI Questo significa che la formula di quadratura trapezoidale a m punti è esatta per m−1 le funzioni {φj }j=−m+1 . Applicando la formula di quadratura ai coefficienti (8.10) si ottiene Z b e−i(k−1−m/2)2π(x−a)/(b−a) √ dx = u(x) uk = b−a a Z 1 √ u((b − a)y + a)e−i(k−1)2πy eimπy dy ≈ = b−a ≈ √ b−a m 0 m X n=1 ¡ ¢ u(xn )eimπyn e−i(k−1)2πyn = ûk ove x = (b − a)y + a. La funzione (serie troncata di Fourier) ũ(x) = m X m/2−1 ûj φj (x) = j=1 X m/2−1 = X ûk+1+m/2 φk+1+m/2 (x) = k=−m/2 ûk+1+m/2 k=−m/2 eik2π(x−a)/(b−a) √ b−a è un polinomio trigonometrico che approssima f (x) ed è interpolante nei nodi xn . Infatti, usando (8.8), ũ(xn ) = m X ûj φj (xn ) = j=1 ! Ã√ m ¢ −i(j−1)2πy ei(j−1−m/2)2π(xn −a)/(b−a) b−a X¡ imπyk k √ u(xk )e e = = m b−a j=1 m X = = 1 m 1 m m X k=1 m X k=1 u(xk )eimπ(k−1)/m e−imπ(n−1)/m m X e−i(j−1)2π(k−1)/m ei(j−1)2π(n−1)/m = j=1 u(xk )ei(k−n)π m X j=1 k=1 ei(j−1)2π(n−k)/m = 1 u(xn )m = u(xn ) . m Si può far vedere poi che ¯ ¯2 ¯ Z b¯ m +∞ X X ¯ ¯ ¯u(x) − ¯ |uk |2 ûj φj (x)¯ dx ≤ 2 ¯ a ¯ ¯ j=1 k∈J La trasformazione [u(x1 ), u(x2 ), . . . , u(xm )]T → [û1 , û2 , . . . , ûm ]T 62 CAPITOLO 8. METODI VARIAZIONALI si chiama trasformata di Fourier discreta √ di u e û1 , . . . , ûm coefficienti di Fourier T di u. Il vettore m · [û1 , û2 , . . . , ûm ] / b − a può essere scritto come prodotto matrice-vettore F [u(x1 )eimπy1 , u(x2 )eimπy2 , . . . , u(xm )eimπym ]T , ove F = (fjk ), fjk = e−i(j−1)2πyk . Alternativamente, si può usare la Fast Fourier Transform (FFT). Il comando fft imπy1 , u(x )eimπy2 , . . . , u(x )eimπym ]T produce il vettore applicato al vettore [u(x m 2 √ 1 )e T m · [û1 , û2 , . . . , ûm ] / b − a, cosı̀ come il comando fftshift applicato al risultato del comando fft applicato al vettore [u(x1 ), u(x2 ), . . . , u(xm )]. Dati dei coefficienti v̂j , j = 1, . . . , m, si può considerare la funzione (periodica) m X v̂j φj (x) j=1 La valutazione nei nodi xn , n = 1, . . . , m, porge v̂ˆn = m X v̂j φj (xn ) = La trasformazione v̂j j=1 j=1 =√ m X m ei(j−1−m/2)2π(xn −a)/(b−a) √ = b−a 1 X i(j−1)2πyn −imπyn m . e v̂j e b − a m j=1 [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 di interpolazione comporta v̂ˆn = u(xn ). √ v(x), la proprietà imπy ˆ ˆ 1 Il vettore b − a · [v̂1 e , v̂2 eimπy2 , . . . , v̂ˆm eimπym ]T /m può essere scritto co∗ me prodotto matrice-vettore F [v̂1 , v̂2 , . . . , v̂m ]T /m. Alternativamente, il comando √ imπy ˆ2 eimπy2 , . . . , v̂ˆm eimπym ]/ ˆ 1 , v̂ ifft applicato al vettore [v̂1 , v̂2 , . . . , v̂m ] produce il vettore b − a·[v̂1 e mentre, se applicato al risultato √ del comando ifftshift applicato al vettore [v̂1 , v̂2 , . . . , v̂m ], produce il vettore b − a · [v̂ˆ1 , v̂ˆ2 , . . . , v̂ˆm ]/m. 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 implementazioni ottimizzate di algebra lineare (come, ad esempio, le librerie ATLAS). 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 63 8.2. METODI SPETTRALI 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 à ! 2|j − m/2 − 21 | − 1 σj = 1 − , j = 1, . . . , m (8.11) m Il risultato è che i coefficienti ûm/2 e ûm/2+1 sono pesati da σm/2 = σm/2+1 = 1, i coefficienti fˆm/2−1 e fˆm/2+2 da σm/2−1 = σm/2+2 = m−2 m e cosı̀ via secondo la formula (8.11). Questa scelta corrisponde alle medie di Cesáro. Infatti, si sostituisce la serie troncata di Fourier m X ũ(x) = ûj φj (x) j=1 Fk = M +k X fˆn φn (x) k−1 X fˆm+1+M φm+1+M (x), k=M m=−k m=M +1−k con la media delle troncate m/2 X k=1 m/2+k X j=m/2+1−k ûj φj (x) /m 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 ûj φj (x) . u(x) = j=1 su un insieme di nodi target xk equispaziati, xk = (k − 1)/n, k = 1, . . . , n, n > m, n pari. Si possono introdurre dei coefficienti fittizi Ûk Ûk = 0 k = 1, . . . , Ûk = ûk− n−m k= 2 Ûk = 0 n−m 2 n−m n−m + 1, . . . , m − 2 2 n−m k =m− + 1, . . . , n 2 64 CAPITOLO 8. METODI VARIAZIONALI Si avrà ˆk = û m X ûj φj (xk ) = j=1 n X Ûj j=1 ei(j−1−n/2)2π(xk −a)/(b−a) √ = b−a n 1 X n Û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 le NFFT. 8.3 Metodi di collocazione Si assume comunque u(x) = m X uj φj (x) j=1 ove {φj } è un sistema ortonormale rispetto ad un prodotto scalare, ma si impone poi che l’equazione differenziale Lu = f sia soddisfatta in certi nodi xn . Si ha il seguente risultato interessante: Teorema 5. La soluzione del sistema lineare m X uj Lφj (xn ) = f (xn ), n = 1, 2, . . . , m (8.12) j=1 ove gli {xn } sono i nodi della quadratura gaussiana relativa alla famiglia {φj } è la stessa del problema di Galerkin Z b Z b m X f (x)φi (x)w(x)dx Lφj (x)φi (x)w(x)dx = uj j=1 a a quando si approssimino gli integrali con le formule gaussiane. Dimostrazione. Per ogni i, 1 ≤ i ≤ m, da (8.12), si ha m X uj Lφj (xn )φi (xn )wn = f (xn )φi (xn )wn , n = 1, 2, . . . , 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 Lφj (xn )φi (xn )wn = uj Lφj (xn )φi (xn )wn = uj n=1 j=1 j=1 = m X n=1 f (xn )φi (xn )wn , i = 1, 2, . . . , m n=1 che è precisamente la formulazione di Galerkin pseudospettrale (8.6). 65 8.3. METODI DI COLLOCAZIONE 8.3.1 Condizioni al bordo Consideriamo il problema Lu(x) = f (x) u(a) = α ′ u (b) = β Con il metodo di collocazione, si ha X m uj Lφj (xn ) = f (xn ), j=1 m X uj φj (a) = α j=1 m X uj φ′j (b) = β n = 1, 2, . . . , m − 2 j=1 Anche in questo caso il metodo di collocazione può essere visto come un metodo di Galerkin pseudospettrale: basta prendere come nodi di collocazione gli m − 2 nodi di quadratura gaussiana. Si ha poi Ãm−2 ! m−2 m X X X uj f (xn )φi (xn )wn , i = 1, 2, . . . , m − 2 Lφj (xn )φi (xn )wn = n=1 n=1 j=1 m X uj φj (a) = α j=1 m X uj φ′j (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)), e soddisfano Z 1 −1 ππ Tj (x)Ti (x) √ dx = 2 1 − x2 0 −1 ≤ x ≤ 1 i=j=0 i = j 6= 0 i 6= j 66 CAPITOLO 8. METODI VARIAZIONALI (lo si vede con il cambio di variabile x = cos θ e applicando le formule di Werner). I nodi di Gauss–Lobatto sono xn = cos((n−1)π/(m−1)), n = 1, 2, . . . , m. Possiamo allora definire la seguente famiglia di funzioni ortonormali φ1 (x) = r 1 T0 (x), π φj (x) = r 2 Tj−1 (x), π j = 2, 3, . . . , m Ricordando la formula di ricorrenza tra polinomi di Chebyshev, possiamo scrivere 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), j = 3, 4, . . . , m − 1 r Da qui, possiamo calcolare anche la derivata prima e seconda delle funzioni: r 2 , φ′3 (x) = 2φ2 (x) + 2xφ′2 (x), π φ′j+1 (x) = 2φj (x) + 2xφ′j (x) − φ′j−1 (x), j = 3, 4, . . . , m − 1 φ′1 (x) = 0, φ′′1 (x) = 0, φ′2 (x) = φ′′2 (x) = 0, φ′′3 (x) = 4φ′2 (x), φ′′j+1 (x) = 4φ′j (x) + 2xφ′′j (x) − φ′′j−1 (x), Conviene calcolare le matrici φ1 (x1 ) φ2 (x1 ) T= . .. φ1 (x2 ) φ2 (x2 ) .. . φm (x1 ) φm (x2 ) ′ φ1 (x1 ) φ′1 (x2 ) φ′ (x1 ) φ′ (x2 ) 2 2 T′ = . .. .. . φ′m (x1 ) φ′m (x2 ) ′′ φ1 (x1 ) φ′′1 (x2 ) φ′′ (x1 ) φ′′ (x2 ) 2 2 T′′ = . .. .. . ... ... j = 3, 4, . . . , m − 1 φ1 (xm ) φ2 (xm ) .. . ... . . . φm (xm ) . . . φ′1 (xm ) . . . φ′2 (xm ) .. ... . . . . φ′m (xm ) . . . φ′′1 (xm ) . . . φ′′2 (xm ) .. . ... φ′′m (x1 ) φ′′m (x2 ) . . . φ′′m (xm ) Consideriamo, a titolo di esempio, il seguente problema modello ′′ −u (x) + q(x)u(x) = f (x) u(−1) = α u′ (1) = β 67 8.3. METODI DI COLLOCAZIONE Il sistema lineare da risolvere per il metodo di collocazione Gauss–Chebyshev– Lobatto (per il momento senza tener conto delle condizioni al bordo) è f (x1 ) u1 q(x1 ) u2 f (x2 ) q(x2 ) T ′′ T −T + T .. = .. .. . . . f (xm ) um q(xm ) Per imporre le condizioni al bordo, si sostituisce la prima riga della matrice con la prima riga di TT e il primo elemento del termine noto con α. Poi, l’ultima riga della matrice con l’ultima riga di T′ T e l’ultimo elemento del termine noto con β. Una volta noti i coefficienti uj , si ricostruisce la soluzione nello spazio fisico tramite u1 u(x1 ) u2 u(x2 ) .. = TT .. . . u(xm ) um Capitolo 9 Esercizi 1. Si risolva il problema ai limiti ′′ u (x) = u(x) + x, u(0) = 0 u(1) = 0 x ∈ (0, 1) (9.1) 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. Si risolva infine lo stesso problema con il metodo di shooting. 2. Si risolva il problema ai limiti ′′ ′ u (x) + u (x) + u(x) − cos(x) = 0, u(0) = 0 u(π/2) = 1 x ∈ (0, π/2) 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, u′ (0) = 1 u(π/2) = 1 x ∈ (0, π/2) 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. 68 69 4. Si risolva il problema ai limiti ′′ u (x) = cos(u(x)), u(0) = 0 u(1) = 1 x ∈ (0, 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, u(0) = 0 u(1) = 0 x ∈ (0, 1) 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), u(0) = 0 u(1) = 1 x ∈ (0, 1) Visto l’andamento della soluzione, si implementi uno schema di differenza finite su nodi non equispaziati secondo una distribuzione di tipo coseno. 7. Si ricavi la relazione di ricorrenza dei polinomi ortonormali nell’intervallo 2 2 [−∞, ∞] rispetto alla funzione peso w(x) = e−α x 8. Noti gli zeri dei polinomi di Legendre e i pesi di quadratura della rispettiva 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 (9.1) usando il metodo di collocazione 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 dalla 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 III PDEs (Equazioni alle derivate parziali) 70 Capitolo 10 Equazione del calore 10.1 Equazione del calore con dati iniziali e condizioni ai limiti Consideriamo la seguente equazione alle derivate parziali ∂2u ∂u (t, x) = (t, x), t > 0, x ∈ (0, L) ∂t ∂x2 u(a, t) = u(b, t) = 0, t > 0 (condizioni ai bordi) u(0, x) = u (x), x ∈ (0, L) (condizioni iniziali) 0 (10.1) 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 iniziale distribuzione di temperatura u0 (x). 10.1.1 Esistenza di una soluzione Cerchiamo una soluzione a variabili separabili u(t, x) = ψ(t)φ(x) Inserendo tale rappresentazione in (10.1), si deduce ψ ′ (t)φ(x) = ψ(t)φ′′ (x), t > 0, x ∈ (0, L) da cui ψ ′ (t) = −K (costante) ⇒ ψ(t) = Ae−Kt ψ(t) Per quanto riguarda φ(x), l’unica possibilità non banale, tenendo conto anche delle condizioni ai bordi, è che K = λ2 > 0, λ > 0. Allora φ′′ (x) = −λ2 ⇒ φ(x) = B sin(λx) + C cos(λx) φ(x) 71 72 CAPITOLO 10. EQUAZIONE DEL CALORE Le condizioni ai bordi impongono C = 0 e λ = kπ/L, k numero naturale non nullo. Pertanto, la funzione µ 2 2 ¶ µ ¶ k π kπ uk (t, x) = exp − 2 t sin x L L è soluzione dell’equazione del calore (e soddisfa le condizioni ai bordi) per ogni k. Quindi, la seguente combinazione lineare infinita u(t, x) = ∞ X Ak uk (t, x) k=1 è soluzione formale dell’equazione del calore. Per quanto riguarda la condizione iniziale, si deve imporre µ ¶ ∞ X kπ Ak sin u0 (x) = u(0, x) = x L k=1 Possiamo prolungare per antisimmetria la funzione u0 (x) nell’intervallo [−L, L]. Sotto opportune ipotesi, la sua serie di Fourier ū0 (x) = +∞ X u0 j φj (x) j=−∞ converge. Si ha dunque, per parità, √ Z Z L −i −i 2 L um/2+1+k = √ ū0 (x) sin(2πk(x + L)/(2L))dx = √ ū0 (x) sin(kπx/L + kπ)dx 2L −L L 0 e um/2+1−k i =√ 2L Z √ Z i 2 L ū0 (x) sin(2πk(x + L)/(2L))dx = √ ū0 (x) sin(kπx/L + kπ)dx L 0 −L L da cui ū0 (x) = = +∞ X k=−∞ ∞ X um/2+1+k φm/2+1+k (x) = um/2+1+k k=−∞ ∞ √ X cos(kπx/L + kπ) + i sin(kπx/L + kπ) √ = 2L 2 √ um/2+1+k i sin(kπx/L + kπ) = L k=1 µ ¶ ¸ µ ¶ · ∞ X 2Z L kπ kπ u0 (x) sin x dx sin x = L 0 L L = k=1 10.1. EQUAZIONE DEL CALORE CON DATI INIZIALI E CONDIZIONI AI LIMITI73 Si potrebbe mostrare adesso che u(t, x) = ∞ · Z X 2 L k=1 L u0 (x) sin 0 ¶ ¸ µ 2 2 ¶ µ ¶ kπ kπ k π x dx exp − 2 t sin x L L L µ è soluzione di (10.1). Dalla presenza del termine esponenziale negativo nel tempo, si deduce che la soluzione tende a zero per t → +∞. L’equazione del calore rappresenta il modello dei fenomeni di diffusione. La diffusione è il processo mediante il quale la materia (o l’energia) è trasportata da una parte di un sistema ad un’altra come risultato di moti molecolari random. Notiamo come la funzione U (t, x) = u(−t, x) per cui limt→+∞ U (t, x) = ∞, soddisfi l’equazione differenziale ∂U ∂2U (t, x) = − 2 (t, x) ∂t ∂x con le stesse condizioni ai bordi e iniziali dell’equazione del calore. 10.1.2 Unicità della soluzione Introduciamo la seguente quantità (energia) E(t) = Z L 0 1 2 u (t, x)dx 2 Si ha dE = dt Z L 0 ¸ · Z L Z L 2 ∂ 1 2 ∂u ∂ u u dx = u 2 dx u (t, x) dx = ∂t 2 ∂t ∂x 0 0 Integrando per parti e tenendo conto delle condizioni ai bordi, si ha dE =− dt Z 0 Lµ ∂u ∂x ¶ dx ≤ 0 Per dimostrare l’unicità, consideriamo come al solito il problema omogeneo (corrispondente a (10.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 (10.1), allora u1 (t, x) − u2 (t, x) sarebbe soluzione del problema omogeneo e quindi u1 (t, x) ≡ u2 (t, x). 74 10.2 CAPITOLO 10. EQUAZIONE DEL CALORE Metodo delle linee Il metodo delle linee per la risoluzione di problemi del tipo ∂u ∂2u (t, x) = (t, x) + f (u(t, x)) + g(t, x), t > 0, x ∈ (a, b) ∂t ∂x2 + condizioni ai bordi + condizioni iniziali (10.2) ove il termine f (u(t, x)) si chiama reazione e il termine g(t, x) sorgente, prevede 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. Vediamo qualche esempio. 10.2.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) f (y1 (t)) g1 (t) . .. y (t) f (y (t)) g (t) y ′ (t) 1 −2 1 ... 2 2 2 2 1 .. . . .. . . . . . . . . = + + . . . . . 0 . h2 0 ′ . ym−1 (t) f (ym−1 (t)) gm−1 (t) .. ym−1 (t) .. . 1 −2 1 . ′ (t) ym ym (t) f (ym (t)) gm (t) 0 ... 0 1 −2 ove yj (t) ≈ y(t, xj ) o, in maniera compatta, y ′ (t) = Ay(t) + f (y(t)) + g(t) (10.3) (con l’ovvia definizione dei simboli). A questo punto, si sceglie il metodo di integrazione temporale (θ-metodo, Runge–Kutta, multistep). Si tenga presente che il problema (10.3), che si dice semidiscretizzato, è solitamente un problema stiff. Infine, si sistemano le condizioni ai bordi. Condizioni al bordo di Dirichlet Vediamo come imporre una condizione di Dirichlet costante in x1 = a. La prima equazione del sistema di ODEs riguarda y1 (t) ≈ y(t, x1 ) e sarà della forma y1′ (t) = . . . Se si vuole imporre una condizione di Dirichlet costante, è sufficiente modifcare opportunamente la prima del termine di destra del sistema di ODEs in modo da ottenere l’equazione y1′ (t) = 0. Nel caso si volesse imporre una condizione di Dirichlet dipendente dal tempo, per esempio y(t, a) = α(t), si deve ancora modificare la prima riga del sistema differenziale, ma tale modifica dipende dal metodo scelto per l’integrazione temporale. 75 10.2. METODO DELLE LINEE Per esempio, avendo scelto il metodo di Eulero implicito, si ha (I − kA)y n+1 − kf (y n+1 ) = y n + kg(tn+1 ) ove k è il passo di integrazione temporale, cioè si deve risolvere il sistema non lineare in y n+1 B(y n+1 )y n+1 = b A questo punto, si può sostituire la prima riga di B(y n+1 ) con il primo vettore della base canonica e la prima riga di b a α(tn+1 ). Per il metodo di Eulero esponenziale, invece, si ha y n+1 = exp(kA)y n + kϕ1 (kA)(f (y n ) + g(tn )) = exp(kA)y n + kϕ1 (kA)b 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 b uguale a (α(tn+1 ) − α(tn ))/k. Condizioni al bordo di Neumann 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 2 e imporre che ym+1 (t) = ym−1 (t). L’approssimazione da usare per ∂∂xu2 (t, b) diventa dunque ∂2u u(t, xm+1 ) − 2u(t, xm ) + u(t, xm−1 ) (t, b) ≈ = ∂x2 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. 10.2.2 Elementi finiti Nel caso di discretizzazione spaziale con elementi finiti lineari, la discretizzazione del problema (10.2) porta al sistema di ODEs P y ′ (t) = Ay(t) + f (y(t)) + g(t) (10.4) ove A è (l’opposta de) la stiffness matrix e P la mass matrix, definita da, Z xj+1 hj−1 + hj φj (x)φj (x)dx = pjj = 3 xj−1 Z xj+1 (10.5a) hj pj j+1 = pj+1 j = φj (x)φj+1 (x)dx = 6 xj 76 CAPITOLO 10. EQUAZIONE DEL CALORE mentre, per j = 1 e j = m, Z x2 h1 p11 = φ1 (x)φ1 (x)dx = 3 Zx1x2 h1 φ1 (x)φ2 (x)dx = p12 = 6 x1 Z xm hm−1 pm−1 m = pm m−1 = φm (x)φm−1 (x)dx = 6 xm−1 Z xm hm−1 pmm = φm (x)φm (x)dx = 3 xm−1 Poi, per 1 < i < m, Z xi+1 m X fi = f uj φj (x) φi (x)dx = xi−1 = Z xi xi−1 (10.5b) j=1 Z m X f uj φj (x) φi (x)dx + j=1 xi+1 xi hi hi−1 + hi hi−1 + f (ui ) = f (ui ) ≈ f (ui ) 2 2 2 Z xi+1 hi−1 + hi gi = g(t, x)φi (x)dx ≈ g(t, xi ) 2 xi−1 m X f uj φj (x) φi (x)dx ≈ j=1 mentre per i = 1 e i = m hm−1 h1 , fm = f (um ) 2 2 hm−1 h1 g1 = g(t, x1 ) , gm = g(t, xm ) 2 2 Le condizioni di Dirichlet omogenee per un nodo xi si impongono sostituendo la riga corrispondente di P con zeri e 1 in diagonale e la riga corrispondente del termine di destra del sistema di ODEs con zeri. Usando un metodo esplicito per la risoluzione del sistema differenziale (10.4), è 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’approssimazione degli integrali in (10.5) mediante la formula dei trapezi e dunque non riduce l’accuratezza del metodo. (−1) 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 differenziale (10.4), non è necessaria la tecnica del mass lumping: semplicemente, si devono risolvere sistemi lineari in cui la matrice identità è sostituita dalla matrice di massa. f1 = f (u1 ) 10.3. ESERCIZI 10.3 Esercizi 1. Si risolva la PDE ∂u ∂2u 2 t ∂t (t, x) = ∂x2 (t, x) + (1 + π )e sin(πx), t > 0, x ∈ (0, 1) u(t, 0) = u(t, 1) = 0 t>0 u(0, x) = sin(πx) x ∈ (0, 1) usando il metodo delle linee. Si mostrino gli ordini spaziali e temporali. 77 Capitolo 11 Equazione del trasporto 11.1 Linee caratteristiche Consideriamo la seguente equazione del trasporto ∂u (t, x) + c ∂u (t, x) = 0, t > 0, x ∈ R ∂t ∂x u(0, x) = u0 (x), x∈R (11.1) È facile verificare che la soluzione esatta è u(t, x) = u0 (x − ct) (da cui il nome dell’equazione). Dunque, si può definire la linea caratteristica x(t) = x0 + ct la soluzione è costante e vale u0 (x0 ). Ovviamente esiste una linea caratteristica per ogni x0 ∈ R. Per un problema più generale ∂u (t, x) + c(x) ∂u (t, x) = f (x), t > 0, x ∈ R ∂t ∂x u(0, x) = u0 (x), x∈R possiamo definire le linee caratteristiche come quelle curve parametriche x(t) per cui la soluzione u(t, x(t)) soddisfa un’equazione differenziale ordinaria, cioè ∂u ∂u d u(t, x(t)) = (t, x(t)) + (t, x(t))x′ (t) = f (x(t)), t > 0 dt ∂t ∂x u(0, x0 ) = u0 (x0 ) x′ (t) = c(x(t)), t>0 x(0) = x0 Si ha dunque u(t, x(t)) = u0 (x0 ) + Z t f (x(s))ds 0 e dunque la soluzione u(t̄, x̄) dipende solo dai valori di u0 in x(0) e di f in x(t), 0 ≤ t ≤ t̄, ove ( x′ (t) = c(x(t)), 0 ≤ t < t̄ x(t̄) = x̄ 78 79 11.1. LINEE CARATTERISTICHE L’insieme {(t, x(t)), 0 ≤ t ≤ t̄} è chiamato dominio di dipendenza continuo di u(t̄, x̄). Tornando al caso dell’equazione del trasporto, il dominio di dipendenza continuo di u(t̄, x̄) è la retta t = 1c (x(t) − x(0)) nel piano tOx. c>0 t t = 1c (x − x̄) + t̄ t̄ a x̄ b x Figura 11.1: Linee caratteristiche per l’equazione del trasporto, c > 0 È ovviamente più fisico considerare un dominio limitato a < x < b. Nel caso (11.1) con c > 0, si vede dalla Figura 11.1 allora che 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 (t, x) + c ∂x (t, x) = 0, t > 0, x ∈ (a, b), c > 0 u(0, x) = u0 (x), u(t, a) = f (t), x ∈ [a, b] t>0 con u0 (a) = f (0). La soluzione analitica è u(t, x) = ũ0 (x − ct), ove ( u0 (x) a≤x≤b ¡ a−x ¢ ũ0 (x) = x<a f c (11.2) 80 11.2 CAPITOLO 11. EQUAZIONE DEL TRASPORTO Differenze finite Introduciamo la seguente discretizzazione per l’equazione di trasporto (11.2) xj = a + jh, j = 1, 2, . . . , m, h = (b − a)/m tn = nk, n = 0, 1, . . . un j ≈ u(tn , xj ) un 0 = f (tn ) 11.2.1 Eulero esplicito/upwind Se discretizziamo con differenze finite in avanti nel tempo e all’indietro nello spazio, otteniamo un+1 j − un j un j − un j−1 +c =0 k h da cui un+1 j = (1 − cλ)un j + cλun j−1 , λ= k h (11.3) Introducendo la notazione un = [un 1 , un 2 , . . . , un m ]T , si ha un+1 = U un + cλfn (11.4) ove 1 − cλ 0 ... cλ 1 − cλ 0 . . .. .. U = 0 .. .. .. . . . 0 ... 0 ... 0 ... 0 .. .. . . , .. . 0 cλ 1 − cλ un 0 0 .. fn = . .. . 0 Consistenza Si ha 1 [u(tn+1 , xj ) − (1 − cλ)u(tn , xj ) − cλu(tn , xj−1 )] = k" ∂u ck 1 = u(tn , xj ) + k (tn , xj ) + O(k 2 ) − u(tn , xj ) + u(tn , xj )+ k ∂t h µ ¶# ck ∂u − u(tn , xj ) − (tn , xj )h + O(h2 ) = O(k + h) = τn+1 j h ∂x 81 11.2. DIFFERENZE FINITE Stabilità Consideriamo due schemi (11.4) perturbati ũn+1 = U ũn + cλfn ûn+1 = U ûn + cλfn Allora (ũn+1 − ûn+1 ) = U (ũn − ûn ) = U n+1 (ũ0 − û0 ) da cui kũn+1 − ûn+1 k ≤ kU kn+1 kũ0 − û0 k Dunque, se kU k1 = kU k∞ = |1 − cλ| + |cλ| ≤ 1, cioè c k ≤1 h (11.5) si ha stabilità del metodo. Convergenza Definiamo τn+1 = [τn+1 1, , τn+1 2 , . . . , τn+1 m ]T u(tn+1 ) = [u(tn , x1 ), u(tn , x2 ), . . . , u(tn , xm )]T Allora, dal risultato di consistenza, u(tn+1 ) = U u(tn ) + λfn + kτn+1 e dunque, definendo en+1 = un+1 − u(tn+1 ) si ha en+1 = U en − kτn+1 da cui, se vale (11.5), ken+1 k∞ ≤ ken k∞ + kkτn+1 k∞ ≤ ke0 k∞ + tn+1 O(k + h) 11.2.2 Condizione CFL Analizziamo, alla luce delle linee caratteristiche, il significato della condizione (11.5). Essa significa chiedere che il dominio di dipendenza discreto di un+1 j (rappresentato dai pallini neri in Figura 11.2) “contenga” il dominio di dipenda continuo di u(tn+1 , xj ). La condizione, nel caso generale, |c|h ≤1 k 82 CAPITOLO 11. EQUAZIONE DEL TRASPORTO c>0 t t = 1c (x − xj ) + tn+1 t = hk (x − xj ) + tn+1 tn+1 tn tn−1 a xj−2 xj−1 b xj x Figura 11.2: Dominio di dipendenza discreto dello schema (11.3), c > 0. c>0 t t = 1c (x − xj ) + tn+1 tn+1 tn tn−1 a xj xj+1 xj+2 b x Figura 11.3: Dominio di dipendenza discreto dello schema (11.6), c > 0. chiama CFL condition o condizione di Courant–Friedrichs–Lewy ed è una condizione necessaria (ma non sufficiente) per la stabilità. Per esempio, discretizzando con differenze finite in avanti sia nel tempo che nello spazio l’equazione del trasporto 83 11.2. DIFFERENZE FINITE con c > 0, otteniamo un+1 j = (1 + cλ)un j − cλun j+1 (11.6) da cui il dominio di dipendenza discreto in Figura 11.3. Chiaramente, in tal caso la soluzione numerica non può convergere alla soluzione analitica. Anche quando il dominio di dipendenza discreto contiene quello continuo si possono avere problemi di stabilità: se consideriamo infatti lo schema che si ottiene usando differenze finite in avanti nel tempo e centrate nello spazio, si ottiene un+1 = Cun + cλfn ove 1 λ c 2 C=0 .. . 0 −c λ2 1 .. . .. . ... 0 ... −c λ2 .. . ... .. . c λ2 0 (11.7) 0 .. . 0 λ 1 −c 2 cλ 1 − cλ (l’ultima riga è stata corretta con differenze finite all’indietro). Si vede dunque che kCk1 = kCk∞ = 1 + cλ > 1. 11.2.3 Equazioni modificate Consideriamo l’approssimazione mediante differenze finite all’indietro del termine ∂u ∂x (t, xj ): si ha un j − un j−1 ∂u (tn , xj ) + O(h) = = ∂x h un j+1 − un j−1 h un j+1 − 2un j + un j−1 − = = 2h 2 h2 ∂u h ∂2u = (tn , xj ) − (tn , xj ) + O(h2 ) ∂x 2 ∂x2 (11.8) Dunque essa corrisponde ad una approssimazione del secondo ordine in h di un’equazione di trasporto-diffusione, con coefficiente di diffusione proporzionale ad h. Ciò giustifica l’andamento dissipativo della soluzione dell’equazione del trasporto mediante lo schema upwind. In generale, la presenza di termini dissipativi stabilizza la discretizzazione, perché anche gli errori vengono dissipati. Analogamente, discretizzando mediante differenze finite centrate il termine ∂u ∂x (t, xj ), si ottiene una approssimazione al quarto ordine in h di ∂u h2 ∂ 3 u u(t, x) + (t, x) ∂x 6 ∂x3 Ciò giustifica l’andamento dispersivo della soluzione del trasporto mediante lo schema Eulero/centrato (11.7). 84 CAPITOLO 11. EQUAZIONE DEL TRASPORTO 11.2.4 Formulazione di flusso Un qualsiasi metodo alle differenze finite può essere scritto nella forma un+1 j = un j − λ(Fj+1/2 − Fj−1/2 ) (11.9) con Fj+1/2 = F (un j , un j+1 ), ove F (·, ·) è detto flusso numerico ed è, in generale, un’approssimazione del flusso esatto cu(tn , xj+1/2 ) associato all’equazione (11.2). La (11.9) può essere interpretata come una discretizzazione in xj e tn dell’equazione che deriva da ¤ 1£ d ūj (t) + cu(t, xj+1/2 ) − cu(t, xj−1/2 ) = 0 dt h ∂u ∂u (t, x) + c (t, x) = 0 ∂t ∂x integrando nello spazio tra xj−1/2 e xj+1/2 e ponendo Z 1 xj+1/2 u(t, x)dx ūj (t) = h xj−1/2 La scelta del flusso numerico caratterizza il metodo. Citiamo i seguenti metodi espliciti, indicando per ognuno l’ordine dell’errore di troncamento: Eulero in avanti/centrato (O(k + h2 )): 1 Fj+1/2 = c(un j+1 + un j ) 2 Equivale al metodo (11.7). Lax–Friedrichs (O(h2 /k + k + h2 )): 1 Fj+1/2 = [c(un j+1 + un j ) − λ−1 (un j+1 − un j )] 2 È una modifica di (11.7), ove si sostituisce un j con la media (un j+1 + un j−1 )/2. Ciò rende il metodo stabile, in quanto la norma della matrice associata vale 1 (qualora la CFL condition sia soddisfatta). Lax–Wendroff (O(k 2 + h2 + h2 k)): 1 Fj+1/2 = [c(un j+1 + un j ) − λc2 (un j+1 − un j )] 2 upwind (O(k + h)): 1 Fj+1/2 = [c(un j+1 + un j ) − |c|(un j+1 − un j )] 2 Equivale a (11.3). 11.2. DIFFERENZE FINITE 11.2.5 85 Verifica dell’ordine Per verificare l’ordine di un metodo di ordine p nel tempo e q nello spazio, in cui non sia possibile disaccoppiare il passo temporale k e il passo spaziale h, è possibile scegliere un passo di discretizzazione temporale k proporzionale alla potenza q/p del passo di discretizzazione spaziale. In questo modo, l’errore globale risulta essere q p O(k p + hq ) = O(h p + hq ) = O(hq ). 11.2.6 Estensione I metodi descritti sopra si estendono, senza modifiche, al caso c < 0, ove però le condizioni al bordo in (11.1) vanno imposte in x = b. Si estendono inoltre a problemi a coefficienti non costanti in forma conservativa ∂u ∂(c(t, x)u(t, x)) (t, x) + =0, ∂t ∂x ove Fj+1/2 = F (xj+1/2 , un j , un j+1 ). Se c(t, x) > 0, le condizioni al bordo di inflow sono in x = a, se c(t, x) < 0 le condizioni al bordo di inflow sono in x = b. Negli altri casi, essendo c(t, x) la velocità di propagazione, si possono originare shocks. 11.2.7 Condizioni al bordo Nel punto di outflow non è possibile usare una discretizzazione della derivata che utilizzi punti esterni al dominio. Si possono allora usare discretizzazioni non simmetriche, eventualmente con ordine di approssimazione minore (vedi § 6.3). Oppure, si possono estrapolare i valori mancanti. 11.2.8 Problemi di convezione-diffusione I problemi di convezione-diffusione ∂u ∂2u ∂u (t, x) + c (t, x) = d (t, x), t > 0, x ∈ (a, b), d > 0 ∂t ∂x ∂x2 u(0, x) = u0 (x) + condizioni ai bordi si risolvono, generalmente, con il metodo delle linee. Per quanto riguarda la discretizzazione spaziale, allora, si può usare il metodo delle differenze finite, degli elementi finiti o metodi spettrali. Per quanto riguarda i primi due, occorre però un passo di discretizzazione spaziale h sufficientemente piccolo. Nel caso di differenze finite centrate del secondo ordine, omettendo la dipendenza temporale, si ha 86 CAPITOLO 11. EQUAZIONE DEL TRASPORTO infatti (per c > 0) c uj+1 − uj−1 uj+1 − 2uj + uj−1 ∂2u ∂u (t, xj ) − d 2 (t, xj ) ≈ c −d = 2 ∂x ∂x 2h µ ¶ h uj − uj−1 uj+1 − 2uj + uj−1 ch =c + −d h 2 h2 Se il coefficiente ch/2 − d fosse non negativo, lo schema corrisponderebbe alla discretizzazione di un’equazione senza diffusione o addirittura con un termine antidiffusivo. Pertanto, si richiede, nel caso generale, |c|h <1 2d La quantità |c|h/(2d) si chiama numero di Peclét di griglia. Le condizioni ai bordi, di Dirichlet o di Neumann, si impongono come nel caso dell’equazione del calore. 11.3 Esercizi 1. Data l’approssimazione del secondo ordine della derivata y ′ (xN −1 ) ≈ (yN − yN −2 )/(2h), si ricavi per estrapolazione lineare il valore yN da yN −2 e yN −1 e lo si inserisca nell’approssimazione. Determinare l’ordine dell’approssimazione risultante. 2. Data l’approssimazione del secondo ordine della derivata seconda y ′′ (xN −1 ) ≈ (yN − 2yN −1 + yN −2 )/(h2 ), si ricavi per estrapolazione quadratica il valore yN da yN −3 , yN −2 e yN −1 e lo si inserisca nell’approssimazione. Determinare l’ordine dell’approssimazione risultante. 3. Data l’approssimazione del secondo ordine della derivata y ′ (xN −1 ) ≈ (yN − yN −2 )/(2h), si ricavi per estrapolazione quadratica il valore yN da yN −3 , yN −2 e yN −1 e lo si inserisca nell’approssimazione. Si verifichi che l’approssimazione risultante è y ′ (xN −1 ) ≈ (3yN −1 −4yN −2 +yN −3 )/(2h). Determinare l’ordine dell’approssimazione risultante. 4. Data l’approssimazione del secondo ordine della derivata seconda y ′′ (xN −1 ) ≈ (yN − 2yN −1 + yN −2 )/h2 , si ricavi per estrapolazione cubica il valore yN da yN −4 , yN −3 , yN −2 e yN −1 e lo si inserisca nell’approssimazione. Si verifichi che l’approssimazione risultante è y ′′ (xN −1 ) ≈ (2yN −1 − 5yN −2 + 4yN −3 − yN −4 )/h2 . 5. Dato il problema di trasporto ∂y ∂y ∂t (x, t) + c ∂x (x, t) = 0 (x, t) ∈ (a, b) × (0, +∞) y(x, 0) = y0 (x) y(a, t) = y0 (a) x ∈ (a, b) t ∈ (0, +∞) (11.10) 87 11.3. ESERCIZI con c > 0 e y0 (x) = y0 (a) per x ≤ a, si dimostri che la soluzione è y(x, t) = y0 (x − ct) . Bibliografia [1] J. P. Boyd, Chebyshev and Fourier Spectral 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-DiffusionReaction 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. 88