Universit`a degli Studi di Padova
Soluzioni di equazioni differenziali - 1
Consideriamo il sistema
y10 = y2
y20 = (1 − y12)y2− y1 che si ottiene dall’equazione di secondo ordine
y00− µ(1 − y2) + y = 0
detta equazione di van der Pol (che descrive un oscillatore smorzato con attrito non costante) nella variabile indipendente t, ponendo y1(t) = y (t), y2= y0(t), per µ = 1.
e y2(0) = 0 si ottiene 1. Definendo una funzione
function dydt = vdp1(t,y)
%VDP1 Evaluate the van der Pol ODEs for mu = 1
%
% See also ODE113, ODE23, ODE45.
% Jacek Kierzenka and Lawrence F. Shampine
% Copyright 1984-2014 The MathWorks, Inc.
dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];
2. risolvendo con il solver Matlab ode45:
[t,y] = ode45(@vdp1,[0 20],[2; 0]);
Soluzioni di equazioni differenziali - 3
Sono disponibili vari solver, utili per casi in presenza di rigidit`a, quando sia necessaria una maggiore efficienza etc.
Solver Problem Type Accuracy When to Use
ode45 Non stiff Medium Most of the time
ode23 Non stiff Low ode23 can be more efficient than ode45 at problems with crude tolerances, or in the presence of moderate stiffness.
ode113 Non stiff Low to High ode113 can be more efficient than ode45 at problems with stringent error tolerances, or when the ODE func- tion is expensive to evaluate.
ode15s Stiff Low to Medium Try ode15s when ode45 fails or is inefficient and you suspect that the problem is stiff.
ode23s Stiff Low ode23s can be more efficient than ode15s at problems with crude error tolerances. It can solve some stiff problems for which ode15s is not effective; ode23s computes the Jacobian in each step, so it is beneficial to provide the Jacobian via odeset to maximize effi- ciency and accuracy. If there is a mass matrix, it must be constant.
ode23t Stiff Low Use ode23t if the problem is only moderately stiff and you need a solution without numerical damping.
ode23t can solve differential algebraic equations.
ode23tb Stiff Low Like ode23s, the ode23tb solver might be more effi- cient than ode15s at problems with crude error toler- ances.
ode15i Fully implicit Low Use ode15i for fully implicit problems f (t, y , y0) = 0.
Consideriamo il sistema d y
dx = f(x , y) con le condizioni iniziali y(x0) = y0.
I I metodi alle differenze finite ricercano la soluzione per una successione di valori discreti della variabile indipendente x1, x2, . . . , xk, . . .,
I l’equazione differenziale `e sostituita da un’equazione approssimata in cui le derivate prime sono sostituite da rapporti incrementali ottenendo una equazione alle differenze.
Metodo delle differenze finite - 2
I Griglia di punti equidistanti: x0, x1, . . . , xk, . . ., dove xk+1 = xk + h, con x0 punto inziale.
I Scriviamo
yk+1 = yk+ hy0(xk) +h2
2y00(xk) + . . . da cui
y0(xk) = yk+1− yk
h −h
2y00(xk) + . . .
I Sostituendo, trascurando tutti i termini di ordine superiore al primo in h, e calcolando la funzione f in xk, si ha lo schema di Eulero
1
h(yk+1− yk) = f(xk, yk) ⇒ yk+1= yk+ hf(xk, yk)
1. Lo schema di Eulero `e inaccurato e fortemente instabile, a meno di non scegliere valori estremamente piccoli di h 2. Per`o `e semplice dal punto di vista computazionale (ad ogni
step richiede solo la valutazione esplicita di f nel punto precedente).
3. stabilit`a: l’errore eventuale in yk non si propaga, rendendo la soluzione divergente, per k → ∞)
4. Lo schema di Eulero `e uno schema del primo ordine (ad ogni passaggio, o step, l’errore `e di ordine h2), ed esplicito.
Metodo delle differenze finite - 4
Di solito si usano schemi di ordine superiore. Lo schema pi`u comune `e detto schema di Runge-Kutta
b1 = hf(xk, yk) b2 = hf
xk+h
2, yk +b1 2
b3 = hf
xk+h
2, yk +b2
2
b4 = hf (xk + h, yk + b2) yk+1 = yk +b1
6 + b2
3 +b3
3 +b4
6 lo schema `e del quarto ordine perch`e l’errore commesso `e
dell’ordine di h5; lo schema di Runge-Kutta `e esplicito, ma richiede quattro valutazioni di f ad ogni step.
ad ogni step sono utilizzate informazioni (funzioni e derivate) relative non solo al punto precedente, ma anche a punti pi`u lontani.
I Rigidit`a: in molti problemi di interesse chimico (con t variabile indipendente) si hanno varie scale dei tempi, molto diverse. In questi casi convengono i metodiimpliciti o semi-impliciti.
I Il pi`u semplice e pi`u stabile schema implicito `e lo schema di Eulero implicito
yk+1= yk+ hf(xk+1, yk+1)
I Sono disponibili librerie di calcolo numerico nei linguaggi di programmazione pi`u comuni in ambito scientifico, come ad esempio ODEPACK, libreria Fortran disponibile presso http://gams.nist.gov/.
Un esempio ’complesso’: cinetica bimolecolare in 2D - 1
Consideriamo un reattore cilindrico, di raggio R2 al cui interno sia inserito un secondo cilindro, di raggio R1 che ruota in senso antiorario con una velocit`a angolare ω; entrambi i cilindri possono essere considerati di lunghezza infinita. L’intercapedine tra i due cilindri `e piena di un solvente, in cui sono disciolti due reagenti A e B, che reagiscono per formare il composto C.
1. la geometria del sistema `e bidimensionale
2. il fluido si pu`o considerare in moto stazionario laminare (flusso di Couette)
3. le concentrazioni delle specie chimiche sono descritte dalle equazioni di advezione-diffusione-reazione
4. le condizioni al contorno sono di flusso radiale nullo sulle superfici dei cilindri
5. A e B sono inizialmente presenti in due settori radiali stretti con una distribuzione gaussiana; C `e assente.
Un esempio ’complesso’: cinetica bimolecolare in 2D - 3
Siano cα(r, t) (α = A, B, C ) le concentrazioni di A, B, C nel punto r, al tempo t, con r = (x , y )
∂cα
∂t + v · ∇cα = D∇2cα+X
βγ
Kαβγcβcγ cα(r, 0) = cα(0)(r)
cα(r, t) · n|r =R1,r =R2 = 0
(r , θ) sono le coordinate polari del punto (x , y ), n = r/r `e la normale alla circonferenza di raggio r .
I Assumiamo che le tre specie diffondano con lo stesso coefficiente di diffusione D
I K descrive la cinetica di II ordine, con una costante cinetica κ: gli unici elementi non nulli sono KAAB = KABA= KBAB = KBBA= −KCAB = −KCBA = −kappa/2
1. un flusso di Couette, ottenibile dalla soluzione delle equazioni di Navier-Stokes in regime laminare e stazionario in due dimensioni,
2. con le condizioni al contorno di flusso totale nullo (fluido fermo) sulla parete del cilindro esterno
3. flusso radiale nullo e flusso angolare pari a −ωR1 sulla parete del cilindro interno
Il flusso risultante `e solo angolare vr = 0
vθ = ωR12 R22− R12
−r + R22 r
≡ v (r )
Un esempio ’complesso’: cinetica bimolecolare in 2D - 5
Conviene riscrivere le equazioni in coordinate polari. In forma esplicita
∂cA
∂t +v (r ) r
∂cA
∂θ = D ∂2cA
∂r2 +1 r
∂cA
∂r + 1 r2
∂2cA
∂θ2
− κcAcB
∂cB
∂t +v (r ) r
∂cB
∂θ = D ∂2cB
∂r2 +1 r
∂cB
∂r + 1 r2
∂2cB
∂θ2
− κcAcB
∂cC
∂t +v (r ) r
∂cC
∂θ = D ∂2cC
∂r2 +1 r
∂cC
∂r + 1 r2
∂2cC
∂θ2
+ κcAcB
con le condizioni al contorno ∂cα(r, t)
∂r = 0 per r = R1, R2, e condizioni iniziali cA(r, 0) = cA(0)(r), cB(r, 0) = cB(0)(r), cC(r, 0) = 0.
metodo alle differenze finite
1. la griglia `e regolare ri, θj, con ri = i δr , θj = j δθ; i passi δr e δθ sono
δr = R2− R1
Nr δθ = 2π
Nθ
2. per una generica concentrazione c(r, t) i punti interni (incognite) ci ,j sono definiti per 1 ≤ i ≤ Nr e 1 ≤ j ≤ Nθ
3. le condizioni al contorno sono c0,j = cNr,j = 0, ci ,0= ci ,Nθ 4. adottiamo uno schema semi-implicito sull’asse dei tempi
(diffusione e advezione impliciti, reazione esplicito) con un passo δt; ad ogni step temporale abbiamo pertanto i valori ci ,j(k) con k = 0, . . . , Nt, Nt= tmax/Nt
5. usiamo uno schema centrale per la diffusione eupwind per l’advezione
Un esempio ’complesso’: cinetica bimolecolare in 2D - 7
Infine scriviamo l’equazione alle differenze:
ci ,j(k+1)− ci ,j(k)
δt =
− v (ri) ri
ci ,j(k+1)− c(k+1)i , j − 1 δθ
+ D
ci +1,j(k+1)− 2ci ,j(k+1)+ ci −1,j(k+1)
(δr )2 + 1
ri
ci +1,j(k+1)− ci −1,j(k+1)
2δr +
ci ,j +1(k+1)− 2ci ,j(k+1)+ ci ,j −1(k+1) ri2(δθ)2
+ Ri ,j(k)
dove Ri ,j(k)= −κ ci ,j(k)
A
ci ,j(k)
B per la specie A etc.
Riarrangiando i vari termini, per lo step k + 1-esimo otteniamo
Nr
X
i0=1 Nθ
X
j0=1
Ai ,j ;i0,j0ci(k+1)0,j0 = b(k)i ,j ⇔ Ac(k+1)= b(k)
dove i coefficienti del vettore b(k) sono calcolati dalle condizioni al contorno e dai valori delle concentrazioni dello step temporale precedente k-esimo.
Lo schema operativo dello script ex5h.m `e il seguente:
1. Operazioni I/O: definizione dei parametri geometrici (R1, R2), di trasporto (ω, D) e reattivit`a (κ); scelta di tmax, Nr, Nθ, Nt; calcolo di δt, δr , δθ
2. Definizione della matrice A
3. Assegnazione delle condizioni iniziali c(0)A , c(0)B , c(0)C 4. Loop k = 0, . . . , Nt− 1
I per ogni α = A, B, C
I calcolo del vettore b(k)α
I calcolo di c(k+1)α mediante soluzione del sistema lineare Ac(k+1)α = b(k)α
5. Analisi e rappresentazione grafica dei risultati