Soluzione numerica di equazioni differenziali a grandi dimensioni su GPUs
Soluzione di equazioni differenziali...
Transcript of Soluzione di equazioni differenziali...
Soluzione di equazioni differenziali ordinarie
• Come riferimento consideriamo una singola equazione differenziale del primo ordine
• Considereremo i seguenti metodi:– Eulero esplicito– Eulero implicito– Runge-Kutta– Cenni su metodi “stiff stable”
• L’incognita del problema è la funzione x(t)• La soluzione numerica sarà rappresentata da un vettore
di punti campionati nel tempo: x(ti)
Metodo di Eulero esplicito
Metodo di Eulero
• Per costruire il metodo numerico più semplice possiamo approssimare la derivata prima con il rapporto incrementale:
• Il termine Δt rappresenta il salto nel tempo (passo) e come vedremo rappresenta il parametro algoritmico su cui abbiamo possibilità di fare scelte.
• L’equazione differenziale si trasforma in:
Metodo di Eulero
• Con pochi passaggi algebrici si può ricavare la formula generica per l’algoritmo di Eulero:
• Resta da stabilire come valutare f.– Se f(ti,x(i)) allora Eulero Esplicito
– Se f(ti+1,x(i+1)) allora Eulero Implicito
• Esplicito: la formula fornisce direttamente x(i+1)• Implicito: Si deve risolvere una equazione algebrica in x(i+1). (ovviamente più oneroso)
Implementazione del metodo di Eulero esplicito
function [t,x]=eulero(effe,dt,t0,tf,x0,camp);%effe nome secondo membro%dt passo nel tempo%t0 tempo iniziale%tf tempo finale%x0 cndizione a t0%camp campionamento%sono conservati dati ogni camp unità di tempoj=1;t(j)=t0;x(j,:)=x0;old=x0;tempo=t0;while t(j)<tf while tempo<j*camp new=old+dt*feval(effe,tempo,old); tempo=tempo+dt; old=new; end j=j+1; t(j)=tempo; x(j,:)=new;end
Esempio scalare
function [xpunto]=xp1(t,x);xpunto(1)=-x(1);
• Equazione differenziale
• Dopo aver immesso la funzione rappresentativa del secondo membro possiamo integrare:
>>[t x]=eulero('xp1',0.5,0,10,[1],0.5);
>>plot(t,x,’*’)
Interpretazione del metodo di Eulero
• Possiamo partire dall’espansione in serie di Taylor della funzione x(t) al generico tempo t.
• Se trascuriamo termini superiore al quadratico:
Pendenza a i
Interpretazione del metodo di Eulero
• E’ evidente che al variare di Dt varia la qualità della approssimazione della soluzione esatta.
• Consideriamo l’equazione differenziale:
• Al variare della CI si ha la famiglia a destra
Interpretazione del metodo di Eulero
• Il risultato dell’integrazione numerica con vari Δt
Esatta0.50.250.1250.0625
****
Stabilità numerica
• L’integrazione dell’equazione simile a quella usata implica che:
• Questa relazione converge alla giusta soluzione se:
Eulero implicito
• L’accuratezza è identica a quella di Eulero esplicito
• Le proprietà di stabilità nettamente migliori.
• La precedente equazione contiene l’incognita x(i+1) anche in f. Si deve risolvere una equazione (in genere nonlineare) in x(i+1) del tipo:
• Si può usare Newton.– Algoritmo più oneroso ma …
Pendenza a i+1
Stabilità Eulero implicito
• Nel caso di Eulero implicito si può facilmente dimostrare che:
• L’algoritmo converge sempre alla giusta soluzione, ovvero è stabile indipendentemente dal valore di Δt.
• Algoritmi di Eulero:– Pregio: semplicità– Difetto: scarsa accuratezza con Δt ragionevoli– In genere Δt variabile e non costante
Dinamica del CSTR
• Salvate in un file chiamato parametri.m il valore dei parametri
k0=9703*3600;DeltaH=5960;Eatt=11843;rhocp=500;UA=150;R=1.987;F=1;V=1;Cain=10;Tin=298;Tj=298;
Dinamica del CSTR
• Il secondo membro delle due equazioni differenziali che rappresenta il CSTR diabatico lo implementate nella funzione cstr.m
function xdot=cstr(t,x)Ca=x(1);Temp=x(2);parametri;FV=F/V;UAV=UA/V;rate=k0*exp(-Eatt/R/Temp)*Ca;dcadt=FV*(Cain-Ca)-rate;dTdt=FV*(Tin-Temp)+DeltaH/rhocp*rate-UAV/rhocp*(Temp-Tj);xdot(1)=dcadt;xdot(2)=dTdt;%xdot=xdot'; rimuovere % per ode45
Dinamica del CSTR
• Per effettuare l’integrazione digitare
>>x0=[5,380];>>[t x]=eulero('cstr',0.01,0,10,x0);>>plot(t,x(:,1))>>figure>>plot(t,x(:,2))
Migliorare l’accuratezza
• Per migliorare l’accuratezza a parità di passo nel tempo si può fare uso dei metodi di Runge-Kutta
• In questo caso il miglioramento deriva da una migliore approssimazione della pendenza.
• Non esiste un algoritmo di RK ma piuttosto una classe di algoritmi caratterizzati da accuratezze diverse.
• L’idea di base è che per valutare la pendenza si fa una specie di media nell’intervallo dello step.
RK II e IV ordine
• L’algoritmo per RK del II ordine:
• Analogamente è possibile costruire algoritmi di accuratezza via via crescente.
• In Matlab sono disponibili due integratori alla RK ode23 e ode34:
>>[t,x]=ode45(‘cstr’,[t0,tf],x0)
Commenti
• Eulero passi piccoli• RK passi via via crescenti al crescere dell’ordine.• In genere il passo è di dimensione variabile• Problemi stiff: Il modello contiene più tempi
caratteristici molto diversi tra loro.– Il tempo più breve detta il passo di tempo da usare.– Perché non si arrivi a passi troppo piccoli si devono usare algoritmi
impliciti (stiff stable)– Sono disponibili in Matlab algoritmi stiff stable:
ode15s, ode23s