# Metodo di Eulero

In matematica e informatica, il metodo di Eulero è una procedura numerica del primo ordine per risolvere equazioni differenziali ordinarie (ODE) una volta fornito un valore iniziale. Si tratta del più basilare dei metodi espliciti per l'integrazione numerica di equazioni differenziali ordinarie, ed è il più semplice metodo Runge-Kutta. Prende il nome da Leonhard Euler, il quale lo espose nel suo libro Institutionum calculi integralis pubblicato nel 1768–70.

## Introduzione

Si consideri il problema del calcolo della forma di una curva sconosciuta che inizia in un certo punto e soddisfa una data equazione differenziale. In questo caso, un'equazione differenziale ordinaria può essere immaginata come una formula tramite cui il coefficiente angolare della retta tangente alla curva può essere calcolato in ogni punto $A_{0}$ della curva. Si prenda quindi un piccolo incremento sulla retta tangente, da $A_{0}$ fino ad un punto $A_{1}$ sufficientemente vicino. Si può supporre che in questo intervallo il coefficiente angolare non cambi significativamente, quindi se si assume che $A_{1}$ è ancora sulla curva si può utilizzare nuovamente lo stesso ragionamento fatto per il punto $A_{0}$ in modo che, dopo diversi passi, viene generata una curva poligonale $A_{0}A_{1}A_{2}A_{3}\dots$ come mostrato nella figura a lato. Si tratta di una curva che non diverge troppo dalla curva originale sconosciuta; l'errore tra le due curve può essere diminuito se l'incremento è piccolo abbastanza e l'intervallo di calcolo è finito.

## Formulazione

Si supponga di voler approssimare la soluzione del problema di Cauchy:
    $y'(t)=f(t,y(t))\qquad y(t_{0})=y_{0}$
discretizzando la variabile $t$, quindi definendo $t_{n}=t_{0}+nh$, con $h$ la dimensione di ogni intervallo. Tra $t_{n}$ e $t_{n+1}=t_{n}+h$ il comportamento della soluzione può essere approssimato stimando:
    $y_{n+1}=y_{n}+hf(t_{n},y_{n})$
dove il valore di $y_{n}\approx y(t_{n})$ risulta essere un'approssimazione della soluzione della ODE al tempo $t_{n}$. Il metodo di Eulero è esplicito, ovvero la soluzione $y_{n+1}$ è una funzione esplicita di $y_{i}$ per $i\leq n$.
Il metodo integra una equazione differenziale ordinaria del primo ordine; tuttavia per un'equazione differenziale di ordine N:
    $y^{(N)}(t)=f(t,y(t),y'(t),\ldots ,y^{(N-1)}(t))$
si introducono le variabili ausiliari $z_{1}(t)=y(t),z_{2}(t)=y'(t),\ldots ,z_{N}(t)=y^{(N-1)}(t)$ in modo da ottenere l'equazione equivalente:
    $\mathbf {z} '(t)={\begin{pmatrix}z_{1}'(t)\\\vdots \\z_{N-1}'(t)\\z_{N}'(t)\end{pmatrix}}={\begin{pmatrix}y'(t)\\\vdots \\y^{(N-1)}(t)\\y^{(N)}(t)\end{pmatrix}}={\begin{pmatrix}z_{2}(t)\\\vdots \\z_{N}(t)\\f(t,z_{1}(t),\ldots ,z_{N}(t))\end{pmatrix}}$
Si tratta di un sistema del primo ordine nella variabile $\mathbf {z} (t)$, e può essere approssimato col metodo di Eulero o con qualsiasi altro metodo per sistemi del primo ordine.

## Esempio

Dato il valore iniziale del problema:
    $y'=y\qquad y(0)=1$
si vuole utilizzare il metodo di Eulero per approssimare $y(4)$.

### Incremento h = 1

Il metodo di Eulero prevede:
    $y_{n+1}=y_{n}+hf(t_{n},y_{n})$
Per calcolare $f(t_{0},y_{0})$, essendo la funzione $f$ definita da $f(t,y)=y$ si ha:
    $f(t_{0},y_{0})=f(0,1)=1\qquad h\cdot f(y_{0})=1\cdot 1=1$
Per ottenere il successivo valore da utilizzare nei calcoli:
    $y_{0}+hf(y_{0})=y_{1}=1+1\cdot 1=2$
e allo stesso modo con $y_{2}$, $y_{3}$ e $y_{4}$:
    ${\begin{aligned}y_{2}&=y_{1}+hf(y_{1})=2+1\cdot 2=4,\\y_{3}&=y_{2}+hf(y_{2})=4+1\cdot 4=8,\\y_{4}&=y_{3}+hf(y_{3})=8+1\cdot 8=16.\end{aligned}}$
A causa della natura ripetitiva di questo algoritmo, può essere utile organizzare i calcoli sotto forma di grafico:
    $n$$y_{n}$$t_{n}$$f(t_{n},y_{n})$$h$$\Delta y$$y_{n+1}$ 0101112 1212124 2424148 38381816
La conclusione di questo calcolo è $y_{4}=16$. La soluzione esatta della equazione differenziale è $y(t)=e^{t}$, quindi $y(4)=e^{4}\approx 54.598$: l'approssimazione del metodo di Eulero con $h=1$ non è buona in questo caso, sebbene il suo comportamento è qualitativamente corretto. Una stima migliore si ottiene riducendo $h$.

### Diversi valori per l'incremento

Il metodo di Eulero è maggiormente accurato al diminuire del passo $h$; la tabella sottostante mostra i diversi risultati sfruttando passi di diverse dimensioni. La prima riga corrisponde all'esempio della sezione precedente mentre la seconda riga è illustrata in figura:
    passorisultato con Euleroerrore 11638,598 0,2535,5319,07 0,145,269,34 0,0549,565,04 0,02551,982,62 0,012553,261,34
L'errore riportato nell'ultima colonna della tabella indica la differenza tra la soluzione esatta per $t=4$ e l'approssimazione con il metodo di Eulero. Si può constatare che al dimezzarsi del passo corrisponde approssimativamente un dimezzamento dell'errore, questo suggerisce che l'errore è all'incirca proporzionale alla dimensione del passo, almeno per piccoli valori di $h$. Questo è vero in generale ed anche per altre equazioni.
Altri metodi, come la regola del punto medio, sono generalmente più precisi: sfruttando il punto medio l'errore è all'incirca proporzionale al quadrato del passo. Per questo motivo il metodo di Eulero viene definito del primo ordine, mentre il metodo del punto medio del secondo ordine.
Dalla tabella è possibile affermare che il passo necessario per approssimare un risultato fino alla terza cifra decimale è circa 0.00001: il che significa che saranno necessari 400000 passi. Questo alto numero di passi implica un alto costo computazionale. Per questo motivo generalmente si preferiscono metodi numerici più precisi (cioè di ordine maggiore) come ad esempio il metodo di Runge-Kutta oppure i metodi lineari multistep, soprattutto se è necessaria grande accuratezza.

## Derivazione ed errore di troncamento locale

Ci sono diversi modi per ricavare il metodo di Eulero; ad esempio si può considerare l'espansione di Taylor di $y$ intorno a $t_{0}$:
    $y(t_{0}+h)=y(t_{0})+hy'(t_{0})+{\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3})$
e quindi sostituire $y'=f(t,y)$ ignorando i termini al quadrato e di ordine superiore. L'errore di troncamento locale $\mathrm {LTE}$ che si ha con tale approssimazione è dato dalla differenza tra la soluzione $y_{1}$:
    $y_{1}=y_{0}+hf(t_{0},y_{0})$
e la soluzione al tempo $t_{1}=t_{0}+h$ fornita con il precedente sviluppo, ovvero:
    $\mathrm {LTE} =y(t_{0}+h)-y_{1}={\frac {1}{2}}h^{2}y''(t_{0})+O(h^{3})$
dove la derivata terza di $y$ è supposta limitata. L'errore è quindi proporzionale, per piccoli $h$, ad $h^{2}$: l'estensione del metodo di Eulero, che si ha ad esempio con i metodi di Runge-Kutta, consente di avere stime più accurate, in cui l'errore è proporzionale a potenze maggiori di $h$,
Un'altra derivazione del metodo utilizza le differenze finite per scrivere la derivata:
    $y'(t_{0})\approx {\frac {y(t_{0}+h)-y(t_{0})}{h}}$
in modo che sostituendo tale espressione in $y'=f(t,y)$ si ottiene il metodo di Eulero.
Si può infine integrare direttamente l'equazione differenziale tra $t_{0}$ e $t_{0}+h$ e applicare il teorema fondamentale del calcolo integrale:
    $y(t_{0}+h)-y(t_{0})=\int _{t_{0}}^{t_{0}+h}f(t,y(t))\,\mathrm {d} t$
Quindi si approssima l'integrale con la regola del rettangolo:
    $\int _{t_{0}}^{t_{0}+h}f(t,y(t))\,\mathrm {d} t\approx hf(t_{0},y(t_{0}))$
e combinando entrambe le equazioni si trova il metodo di Eulero.

## Implementazione

Di seguito una possibile implementazione del metodo in linguaggio Matlab