Metodo di Eulero

Da Wikipedia, l'enciclopedia libera.
bussola Disambiguazione – Se stai cercando l'omonimo metodo di fattorizzazione, vedi Metodo di fattorizzazione 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[modifica | modifica wikitesto]

Illustrazione del metodo di Eulero. La curva sconosciuta è in blu, e la sua approssimazione polinomiale in rosso.

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 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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

Illustrazione della funzione y'=y, y(0)=1: in blu il risultato del metodo di Eulero; in verde il metodo del punto medio; in rosso la funzione esatta y=e^t. L'incremento è h = 1.0.

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{align}
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{align}

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}
0 1 0 1 1 1 2
1 2 1 2 1 2 4
2 4 2 4 1 4 8
3 8 3 8 1 8 16

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[modifica | modifica wikitesto]

The same illustration for h = 0.25.

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:

passo risultato con Eulero errore
1 16 38.598
0.25 35.53 19.07
0.1 45.26 9.34
0.05 49.56 5.04
0.025 51.98 2.62
0.0125 53.26 1.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 il metodo del punto medio, sono generalmente più precisi: sfruttando il punto medio l'errore è all'incirca proporzionale al quadrato della 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[modifica | modifica wikitesto]

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) + h y'(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 + h f(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 h f(t_0, y(t_0))

e combinando entrambe le equazioni si trova il metodo di Eulero.

Bibliografia[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

matematica Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica