# Metodi di soluzione numerica per equazioni differenziali ordinarie

I metodi di soluzione numerica per equazioni differenziali ordinarie permettono di risolvere in maniera approssimata equazioni differenziali ordinarie altrimenti non trattabili.

## Metodi a passo singolo

Un metodo numerico per la risoluzione di una equazione differenziale si definisce ad un passo se per ogni $n>0,y_{n+1}$ dipende solamente da $y_{n}$. Altrimenti si parla di metodo a più passi o multistep.

### Metodi di Eulero
#### Metodo di Eulero esplicito (o "in avanti")

Si tratta di un metodo esplicito per risolvere un'equazione differenziale. Data l'equazione nella forma:
    $y'={\frac {dy}{dx}}=f(x,y)$
con la condizione iniziale:
    $y(x=x_{0})=y_{0}$
definita nel dominio $x\in [a,b]$ è necessario prima di tutto discretizzare il dominio con un passo $h$, ottenendo i punti discreti $\lbrace x_{0},x_{1},\dots ,x_{N}\rbrace$, dove $x_{n}=x_{0}+nh$, con $x_{0}=a$ e $x_{N}=b$. A questo punto il procedimento è quello di sostituire l'equazione della tangente alla funzione:
    $y_{1}-y_{0}=f_{x_{0},y_{0}}\cdot (x_{1}-x_{0})$
    $y_{2}-y_{1}=f_{x_{1},y_{1}}\cdot (x_{2}-x_{1})$
    $\dots$
    $Y-y_{n-1}=f_{x_{n-1},y_{n-1}}\cdot (x_{n}-x_{n-1})$
In questo modo la soluzione diviene una somma di funzioni lineari "troncate":
    $Y=y_{0}+f_{x_{0},y_{0}}\cdot (x-x_{0})^{Tr}+f_{x_{1},y_{1}}\cdot (x-x_{1})^{Tr}+\cdots +f_{x_{n-1},y_{n-1}}\cdot (x-x_{n-1})^{Tr}$
in cui:
    $(x-x_{i-1})^{Tr}={\begin{cases}0&{\text{ se }}x\leq x_{i-1}\\x-x_{i-1}&{\text{ se }}x_{i-1}\leq x\leq x_{i}\\x_{i}-x_{i-1}&{\text{ se }}x_{i}\leq x\end{cases}}$
per $i=1,\ldots ,n$.

#### Metodo di Eulero implicito (o all'indietro)

Si tratta di un metodo implicito per risolvere un'equazione differenziale, ricavato dall'approssimazione della derivata con le differenze finite all'indietro:
    ${\frac {dy}{dx}}\approx {\frac {y_{n}-y_{n-1}}{h}}$
che applicato all'equazione differenziale diventa:
    ${\frac {y_{n}-y_{n-1}}{h}}=f(x_{n},y_{n})$
equivalente a:
    ${\frac {y_{n+1}-y_{n}}{h}}=f(x_{n+1},y_{n+1})$
da cui otteniamo la formula risolutiva generica:
    $y_{n+1}=y_{n}+hf(x_{n+1},y_{n+1})$
Per risolvere l'equazione ci si riconduce pertanto ad un problema di ricerca di zeri di una funzione. Pur essendo anch'esso un metodo del prim'ordine, è in generale più stabile dell'analogo metodo esplicito. I metodi di Eulero sono usati quasi esclusivamente in analisi numerica, poiché permettono di risolvere semplicemente equazioni differenziali mediante l'utilizzo del computer.

### Metodo dei trapezi (o metodo di Crank-Nicolson)

Non sempre i metodi precedenti sono utilizzabili nell'approssimazione numerica di equazioni differenziali. Ad esempio, nel caso del pendolo lineare:
    ${\frac {d^{2}x}{dt^{2}}}+x=0$
i due metodi di Eulero porteranno, durante il processo di numerizzazione, a trasformare il centro in un fuoco. Esistono, dunque, altri metodi, uno di questi è il metodo dei trapezi. Questo metodo deriva comunque dai metodi di Eulero: è sufficiente sommare membro a membro la formula del metodo di Eulero esplicito e quella di Eulero implicito per ricavarne il nuovo metodo, come segue:
    $y_{n+1}=y_{n}+{\frac {h}{2}}(f_{n}+f_{n+1})=y_{n}+{\frac {h}{2}}(y'_{n}+y'_{n+1})$
Il nome del metodo deriva dal fatto che la formula risultante ha la stessa forma utilizzata per approssimare l'integrale definito di una funzione come l'area di un trapezio.

### Metodo di Heun

Dapprima, calcolare:
    $y_{n+1}^{(0)}=y_{n}+hf_{n}$
Poi, calcolare:
    $y_{n+1}=y_{n}+{\frac {h}{2}}(f(x_{n},y_{n})+f(x_{n}+h,y_{n+1}^{(0)}))$

## Metodi multipasso

Questi metodi utilizzano non solamente $f_{n}$ e $f_{n+1}$ per calcolare $y_{n+1}$ ma anche i valori $f_{n-k}$. Con tutti questi metodi, è necessario utilizzare dapprima un metodo a singolo passo (come il metodo di Eulero) per calcolare i primi valori dei $f_{n-k}$.

### Metodo di Adams-Bashforth

Metodo esplicito:
    $y_{n+1}=y_{n}+{\frac {h}{12}}(23f_{n}-16f_{n-1}+5f_{n-2})$
Fu utilizzata da John Couch Adams per risolvere le equazioni differenziali della teoria della capillarità (vedi la bibliografia).

### Metodo di Adams-Moulton

Metodo implicito:
    $y_{n+1}=y_{n}+{\frac {h}{12}}(5f_{n+1}+8f_{n}-f_{n-1})$

### Formule di differenziazione all'indietro

Le formule di differenziazione all'indietro (BDF) sono una famiglia di metodi impliciti usati specialmente per la soluzione di equazioni differenziali rigide.

## Metodi predittore-correttore

Un metodo predittore-correttore si forma di un metodo esplicito (il predittore) e un metodo implicito (il correttore). Dapprima il metodo esplicito è utilizzato per calcolare un'approssimazione di $y_{n+1}$, poi questa approssimazione di $y_{n+1}$ è utilizzata nel metodo implicito per calcolare una migliore approssimazione di $y_{n+1}$. Il vantaggio di questo tipo di metodo è di evitare di risolvere un'equazione implicita per $y_{n+1}$. Un esempio di metodo predittore correttore è il metodo di Adams-Bashforth (il predittore) con il metodo di Adams-Moulton (il correttore).

## Metodo di approssimazione a serie di potenze

Le serie di potenze sono un algoritmo per costruire funzioni e quindi soluzioni di equazioni differenziali lineari. Il procedimento è quello di costruire formalmente una serie di potenze in modo che i suoi coefficienti soddisfino l'equazione differenziale, in particolare utilizzando le serie derivate, e controllare poi che la scelta dei coefficienti dia una serie convergente, quindi converga ad una funzione.

### Esempio

Si consideri:
    $y'=5y$
Si costruisce formalmente le serie:
    $\sum _{k=0}^{+\infty }ka_{k}x^{k-1}=5\cdot \sum _{k=0}^{+\infty }a_{k}x^{k}$
valutando i primi termini:
    $a_{1}+2a_{2}\cdot x+3a_{3}\cdot x^{2}+...=5a_{0}+5a_{1}\cdot x+5a_{2}\cdot x^{2}+...$
uguagliando alle rispettive potenze della $x$:
    $a_{1}=5a_{0}$ che corrisponde a $a_{1}=5a_{0}$
    $2a_{2}=5a_{1}$ che corrisponde a $a_{2}={\frac {5^{2}}{2}}a_{0}$
    $3a_{3}=5a_{2}$ che corrisponde a $a_{3}={\frac {5^{3}}{3!}}a_{0}$
    $\dots$
    $ka_{k}=5a_{k-1}$ che corrisponde alla serie:
    $a_{0}\sum _{k=0}^{+\infty }{\frac {5^{k}\cdot x^{k}}{k!}}$
Questa serie è convergente in $\mathbb {R}$ per ogni scelta di $a_{0}$ (potendosi ricondurre alla serie esponenziale con la sostituzione $\xi =5x$) e la somma di tale serie, che è funzione di classe $C^{1}(\mathbb {R} )$, fornisce una soluzione dell'equazione differenziale.
Naturalmente l'algoritmo vale anche per equazioni differenziali lineari di ordini superiori.