05. Equazioni Differenziali Ordinarie

❗❗❗❗❗❗❗❗❗❗❗❗❗
❗❗❗ COMPLETARE ❗❗❗
❗❗❗❗❗❗❗❗❗❗❗❗❗


2023-04-12


5. Soluzione numerica di equazioni differenziali ordinarie

Introduzione

Molti fenomeni possono essere descritti con modelli matematici consistenti di sistemi di equazioni differenziali ordinarie (EDO) del primo ordine:

{y1(x)=f1(x,y1(x),...,yn(x))y2(x)=f2(x,y1(x),...,yn(x))yn(x)=fn(x,y1(x),...,yn(x))

soggette ad assegnate condizioni iniziali:

{y1(x0)=y10y2(x0)=y20yn(x0)=yn0

Esempi

Pendolo

pendolo

Il moto di un oscillatore armonico (come può essere un pendolo) senza attrito, è descritto dall'equazione:

θ¨(t)gLsin(θ(t))=0

Se vogliamo risolvere questo problema in modo analitico, siamo costretti ad usare l'approssimazione delle piccole oscillazioni per cui:

θ(t)0sin(θ(t))θ(t)

da cui l'equazione diventa:

θ¨(t)gLθ(t)=0

di cui appunto sappiamo trovare la soluzione.

Per risolvere però il problema reale, siamo costretti a non usare le piccole oscillazioni. In questo caso l'equazione risulta non lineare e non ne conosciamo la soluzione esplicita. Dobbiamo quindi avvalerci di un metodo numerico.

In ogni caso, per la soluzione sono necessarie le condizioni iniziali che permettano di scrivere il #Problema di Cauchy:

{θ¨(t)gLsin(θ(t))=0θ(t0)=θ0,θ˙(t0)=v0

Modello Preda-Predatore

modello preda-predatore (larka-volterra)

È un modello utile a descrivere l'andamento delle popolazioni di due specie di cui una è predatrice dell'altra. È stato sviluppato da Larka e Volterra.

Si definiscono 2 specie: P e N. La variazione (derivate) delle popolazioni è descritta dal seguente sistema:

$
\begin

\dot P(t) &= k_{1} P(t) - \frac{1}{\mu_{2}} P(t)N(t) \

\dot N(t) &= -k_{2} N(t) + \frac{1}{\mu_{1}} P(t)N(t) \

P(t_{0}) &= P_{0}, ,,,,,,,,,,, N(t_{0}) = N_

\end{cases}
$

Le prede (P) aumentano esponenzialemente in assenza di predatori (N).

Viceversa, i predatori diminuiscono esponenzialmente in assenza di prede.

La relazione è esponenziale: infatti risolvendo P˙=k1P si otterrebbe proprio P=ek1t.

Le prede poi diminuiscono in presenza dei predatori e questi ultimi aumentano in presenza di prede.

Questo si tratta di un modello non lineare costituito da un sistema di 2 EDO a 2 incognite.
Non sappiamo trovare la soluzione esplicita anche se in questo caso si può dimostrare essere periodica.

Crescita logistica

crescita logistica

Il modello:

$
\begin

\dot P (t) &= b P(t) - k P^{2} (t) \

P(t) &= P_

\end{cases}
$

Equazione logistica - Wikipedia

Definizioni

Problema di Cauchy

problema di cauchy

Il problema di Cauchy è un problema differenziale nella forma:

$
\begin

y'(t) &= f(x, y(t)) ,,,,, t > t_{0} \

y(t_{0}) &= y_

\end{cases}
$

Problema ai limiti

problema ai limiti

Un problema differenziale nella forma:
{y(x)=f(x,y(x),y(x))a<x<by(a)=α,y(b)=β

Intervallo di discretizzazione

intervallo di discretizzazione

Si definisce il [[#Problema di Cauchy]] in un intervallo:

I=[x0,x0+β]

nel quale è noto esistere un'unica soluzione y(x).

Si considera una discretizzazione di I in sottointervalli di ampiezza h, ottenuti con l'introduzione di n+1 nodi equispaziati.

  • Nodi: t0,t1,t2,...,tn=t0+β
  • Approssimazioni: y0=y(t0),y1,y2,...,yn

Risulta

yi=y(ti)

Si ha quindi che

h=βn

e

ti=t0+ih

Inoltre, l'errore di troncamento è

ei=y(ti)yi

Funzione Lipschitziana

funzione lipschitziana

Una funzione f(t,y) si dice Lipschitziana in y uniformemente rispetto a t in DR2 (Dominio) se L>0 tale che:

|f(t,y1)f(t,y2)|L|y1y2|(t,y1),(t,y2)D

Condizione sufficiente Lipschitzianeità
teorema

Se f(t,y)

  • È derivabile
  • max(t,y)D|fy(t,y)|=L<+

Allora:

f è Lipschitziana

Se L è molto grande, si dice che i problemi sono "stiff" e hanno variazioni molto grandi.

Esistenza della soluzione One-Step

esistenza e unicità della soluzione

Se f(t,y) è [[#Funzione Lipschitziana]] in S=[t0,t0+β]×(,+)

Allora

  • La soluzione esiste ed è unica
  • Il [[#Problema di Cauchy]] è [[#benposto]]

Errore di troncamento globale One-Step

errore di troncamento ($e_{i}$)

L'errore di troncamento è

ei=y(ti)yi

Dove ricordo essere:

  • y(ti) = la soluzione esatta nel punto ti
  • yi = La soluzione approssimata nel punto ti

Errore di troncamento locale One-Step

L'errore di Troncamento locale è

R(ti,h,y)=h22y(τi)τi[ti,ti+1]

se

yC2[t0,t0+β]limh0R(ti,h,y)h=0

Convergenza One-Step

convergenza

Si dice che il metodo converge se

limh0max0in|ei|=0

Consistenza One-Step

consistenza

Si dice che il metodo è consistente se per yC2[t0,t0+β] allora
limh0R(ti,h,y)h=0

Se è verificata la consistenza, dato

y(ti+1)=y(ti+h)=y(ti)+hϕ(ti,y(ti))+R(ti,h,y)

Si ha che, essendo l'#Errore di troncamento locale:

R(ti,h,y)=limh0(y(ti+h)y(ti)hhϕ(ti,y(ti))h)=0

possiamo scrivere

limh0y(ti+h)y(ti)h=limh0ϕ(ti,y(ti))y(t)=limh0ϕ(ti,y(ti))f(ti,y(ti))=limh0ϕ(ti,y(ti))

per cui

f(ti,y(ti))=limh0ϕ(ti,y(ti))

Stabilità One-Step

❗❗❗❗❗❗❗❗❗❗❗❗❗
❗❗❗ COMPLETARE ❗❗❗
❗❗❗❗❗❗❗❗❗❗❗❗❗

Metodi One-Step

Metodi per la risoluzione di [[#Problema di Cauchy]] che sfruttano un algoritmo nella forma:

{yi+1=yi+hϕ(ti,yi)0in1y0=y(t0)

Sono:

Metodo di Eulero

Metodo di Eulero


Introduzione del metodo

☑️ Ipotesi

ipotesi

Algoritmo

GraficoEulero.png|350

Discretizzazione

I=[x0,x0+β] intervallo di discretizzazione.

  • Nodi: ti=t0+ih1iny0=y(t0)
  • Approssimazioni: yi=y(ti)

Scrivo y(t) come:
y(t)=y(t0)+(tt0)y(t0)+(tt0)22y(τ0) con τ0[t0,t1], t1=t0+h
Calcolato in t1 diventa

y(t1)=y(t0)+(t1t0)y(t0)+...+R(t1,h,y)

Dove R(t1,h,y) è l'#Errore di troncamento locale.
Essendo, per come è stato definito il problema
$
\begin

t_{1}- t_{0} &= h \

y'(t_{0}) &= f(t_{0}, y(t_{0}))

\end{align}
$

posso scrivere:

y(t1)=y(t0)+hf(t0,y(t0))+R(t1,h,y)

E posso quindi scrivere l'approssimazione y1 come

y1=y0+hf(t0,y0)

algoritmo

{yi+1=yi+hf(ti,yi)y0=y(t0)

Errori

Errore di Troncamento Globale

errore di troncamento globale

ei=y(ti)yi

Errore di troncamento locale

errore di troncamento locale metodo di eulero

R(ti,h,y)=h22y(τi)τi[ti,ti+1]

Convergenza

Condizioni di convergenza

NON VISTO

Ordine di convergenza

ordine di convergenza

Il [[#Metodo di Eulero]] ha ordine di convergenza pari a 1:
p=1

Stima iterazioni necessarie

NON VISTO

Criterio di arresto

Criterio di arresto a posteriori

Posso interrompere l'algoritmo quando l'errore al passo k è minore di una tolleranza scelta ε.
|ek|ε

Implementazione in Matlab

Riportare la function per l'applicazione del metodo in matlab

function [Ti,Yi] = MetodoEulero(fun, I, y0, n_step)

% Metodo di Eulero

% Calcola la soluzione di una EDO del orimo ordine ai valori iniziali con

% il metodo di Eulero

% Input:

% fun(t,y): termine noto del problema (function)

% I(1:2): Estremi dell'intervallo di integrazione (vettore)

% y0(1): Condizione iniziale

% n_step: Numero passi temporali (scalare)

%

% Output:

% Ti(1:n_step + 1): Nodi di discretizzazione (vettore)

% Yi(1:n_step + 1): Vettore delle approssimazioni (vettore)

t0 = I(1);

tf = I(2);

% Passo di discretizzazione

h = (tf-t0)/n_step;

% Griglia dei nodi: equispaziata

Ti = linspace(t0,tf, n_step + 1);

Ti = Ti'; % Rendo Ti un vettore colonna

% Inizializzazioni

Yi = nan(n_step + 1, 1);

Yi(1) = y0;

% Metodo di Eulero

for i= 1:n_step

Yi(i+1) = Yi(i) + h*fun(Ti(i), Yi(i));

end

end

Metodo di Heun

algoritmo metodo di heun

{yi+1=yi+h2[K1(ti,yi)+K2(ti,yi)]y0=y(t0)
dove
K1(ti,yi)=f(ti,yi)K2(ti,yi)=f(ti+h,yi+hK1(ti,yi))

Ordine di Convergenza (Heun)

ordine di convergenza

Il [[#Metodo di Heun]] ha ordine di convergenza pari a 2:
p=2

Metodo di Runge-Kutta

algoritmo metodo di runge-kutta

yi+1=yi+h6[K1(ti,yi)+2K2(ti,yi)+2K3(ti,yi)+K4(ti,yi)]0in
dove
$
\begin{align}
K_{1}(t_{i}, y_{i}) &= f(t_{i}, y_{i}) \
K_{2}(t_{i}, y_{i}) &= f\left( t_{i}+ \frac{h}{2}, y_{i} + \frac{h}{2} K_{1}(t_{i}, y_{i})\right)\
K_{3}(t_{i}, y_{i}) &= f\left( t_{i}+ \frac{h}{2}, y_{i} + \frac{h}{2}K_{2}(t_{i}, y_{i}) \right)\
K_{4}(t_{i}, y_{i}) &= f(t_{i} + h,y_{i} + hK_{3}(t_{i}, y_{i}) )

\end{align}
$

Ordine di Convergenza (Runge-Kutta)

ordine di convergenza (rk)

Il [[#Metodo di Runge-Kutta]] ha ordine di convergenza pari a 4:
p=4


Metodi alle differenze finite

Metodi per la risoluzione di #Problema ai limiti.
Vedremo in particolare solo problemi ai limiti lineari:

{y(x)=p(x)y(x)+q(x)y(x)r(x)y(a)=α,y(b)=β

Convergenza

Condizione Sufficiente di esistenza e unicità della soluzione

cs di esistenza della soluzione

Se

  • p(x),q(x),r(x)C[a,b]
  • maxx[a,b]|p(x)|=k
  • q(x)>0x[a,b]

Allora
Esiste un'unica soluzione al [[#Problema ai limiti]]

Algoritmo

Discretizzazione

Intervallo di discretizzazione I=[a,b]

Il passo è

h=baN+1

Si ha che

y0=y(x0)=y(a)=αyN+1=y(xN+1)=y(b)=β

Collocazione

❗❗❗❗❗❗❗❗❗❗❗❗❗
❗❗❗ COMPLETARE ❗❗❗
❗❗❗❗❗❗❗❗❗❗❗❗❗

Schema numerico

aloritmo

{yi+12yi+yi1h2+p(xi)yi+1yi12h+q(xi)yi=r(xi)y0=α,yN+1=β

Errori

ei=y(xi)yi00N+1
osservazione

e0=eN+1=0
Perché in quei punti abbiamo le condizioni al contorno.

Errore di troncamento locale

errore di troncamento metodo alle differenze finite

τ(xi,y,h)=h212(yv(ξi)2p(xi)y(ηi))

Errore di troncamento globale

maggiorazione errore globale di troncamento

L'errore di troncamento globale può essere maggiorato come segue
max0iN+1|ei|Mmax1iN|τ(xi,y,h)
dove M=1L con L=min[a,b]q(x) (vd. [[#Condizione sufficiente di stabilità]]).

Consistenza differenze finite

consistenza differenze finite

limh0τ(xi,y,h)=0
è sempre vero per le τ come sopra

Stabilità differenze finite

stabilità differenze finite

Un [[#Metodi alle differenze finite]] è stabile se
k=max0ii|ei|cost<h fissato
L=min[a,b]q(x)>0

La stabilità va studiata schema per schema.

❗❗❗❗❗❗❗❗❗❗❗❗❗
❗❗❗ COMPLETARE ❗❗❗
❗❗❗❗❗❗❗❗❗❗❗❗❗

Condizione sufficiente di stabilità

cs di stabilità

Lo schema lineare è stabile se, siano verificate le seguenti:

k=max[a,b]|p(x)|<L=min[a,b]q(x)>0
è verificato che:

hK2

❗❗❗❗❗❗❗❗❗❗❗❗❗
❗❗❗ COMPLETARE ❗❗❗
❗❗❗❗❗❗❗❗❗❗❗❗❗

Negli appunti c'è scritto anche se valgono i) e ii). A che si riferisce?

Convergenza differenze finite

Condizioni di convergenza differenze finite

condizione cn/cs/cns di convergenza
Teorema di Lax
teo di lax

Per uno schema alle differenze finite (qualunque), la convergenza è equivalente alla [[#Consistenza differenze finite]] + [[#Stabilità differenze finite]].

Ordine di convergenza differenze finite

ordine di convergenza

Il metodo di ??? ha ordine di convergenza pari a:
p=


Dimostrazione:

Stima iterazioni necessarie differenze finite

Se rilevante

Criterio di arresto differenze finite

Se rilevante

Criterio di arresto a posteriori differenze finite

Posso interrompere l'algoritmo quando l'errore al passo k è minore di una tolleranza scelta ε.

|ek|ε

Implementazione in Matlab differenze finite

Riportare la function per l'applicazione del metodo in matlab