metodo di Eulero - Euler method

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

In matematica e scienze computazionali , il metodo di Eulero (chiamato anche metodo di Eulero in avanti ) è una procedura numerica del primo ordine per risolvere equazioni differenziali ordinarie (ODE) con un dato valore iniziale . È il metodo esplicito più elementare per l'integrazione numerica delle equazioni differenziali ordinarie ed è il metodo Runge-Kutta più semplice . Il metodo di Eulero prende il nome da Leonhard Euler , che lo trattò nel suo libro Institutionum calculi integralis (pubblicato nel 1768-1870).

Il metodo di Eulero è un metodo del primo ordine, il che significa che l'errore locale (errore per passo) è proporzionale al quadrato della dimensione del passo e l'errore globale (errore in un dato momento) è proporzionale alla dimensione del passo. Il metodo di Eulero serve spesso come base per costruire metodi più complessi, ad esempio il metodo predittore-correttore .

Descrizione geometrica informale

Si consideri il problema di calcolare la forma di una curva incognita che parte da un dato punto e soddisfa una data equazione differenziale. Qui, un'equazione differenziale può essere pensata come una formula mediante la quale la pendenza della retta tangente alla curva può essere calcolata in qualsiasi punto della curva, una volta calcolata la posizione di quel punto.

L'idea è che mentre la curva è inizialmente sconosciuta, il suo punto di partenza, che indichiamo con è noto (vedi l'immagine in alto a destra). Quindi, dall'equazione differenziale, può essere calcolata la pendenza della curva a , e quindi la retta tangente.

Fai un piccolo passo lungo quella tangente fino a un punto Lungo questo piccolo passo, la pendenza non cambia troppo, quindi sarà vicino alla curva. Se fingiamo che sia ancora sulla curva, si può usare lo stesso ragionamento del punto sopra. Dopo diversi passaggi, viene calcolata una curva poligonale . In generale, questa curva non diverge troppo dalla curva sconosciuta originale e l'errore tra le due curve può essere ridotto se la dimensione del passo è sufficientemente piccola e l'intervallo di calcolo è finito:

Scegli un valore per la dimensione di ogni passo e imposta . Ora, un passaggio del metodo di Eulero da a è:

Il valore di è un'approssimazione della soluzione dell'ODE al momento : . Il metodo di Eulero è esplicito , cioè la soluzione è una funzione esplicita di for .

Mentre il metodo di Eulero integra un'ODE di primo ordine, qualsiasi ODE di ordine N può essere rappresentata come un sistema di ODE di primo ordine: per trattare l'equazione

,

introduciamo variabili ausiliarie e otteniamo l'equazione equivalente:

Questo è un sistema del primo ordine nella variabile e può essere gestito dal metodo di Eulero o, di fatto, da qualsiasi altro schema per sistemi del primo ordine.

Esempio

Dato il problema del valore iniziale

vorremmo usare il metodo di Eulero per approssimare .

Usando una dimensione del passo uguale a 1 ( h = 1)

Image
Illustrazione dell'integrazione numerica per l'equazione Blue è il metodo di Eulero; verde, il metodo del punto medio ; rosso, la soluzione esatta, La dimensione del passo è h  = 1.0 .

Il metodo di Eulero è

quindi prima dobbiamo calcolare . In questa semplice equazione differenziale, la funzione è definita da . Abbiamo

Facendo il passaggio precedente, abbiamo trovato la pendenza della retta tangente alla curva della soluzione nel punto . Ricordiamo che la pendenza è definita come la variazione di divisa per la variazione di , o .

Il prossimo passo è moltiplicare il valore sopra per la dimensione del passo , che qui prendiamo uguale a uno:

Poiché la dimensione del passo è la variazione di , quando moltiplichiamo la dimensione del passo e la pendenza della tangente, otteniamo una variazione di valore. Questo valore viene quindi aggiunto al valore iniziale per ottenere il valore successivo da utilizzare per i calcoli.

I passaggi precedenti dovrebbero essere ripetuti per trovare , e .

A causa della natura ripetitiva di questo algoritmo, può essere utile organizzare i calcoli in forma di grafico, come mostrato di seguito, per evitare di commettere errori.

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 è che . La soluzione esatta dell'equazione differenziale è , così . Sebbene l'approssimazione del metodo di Eulero non fosse molto precisa in questo caso specifico, in particolare a causa di una dimensione del passo di grande valore , il suo comportamento è qualitativamente corretto come mostra la figura.

Esempio di codice MATLAB

clear; clc; close('all');
y0 = 1;
t0 = 0;
h = 1; % try: h = 0.01
tn = 4; % equal to: t0 + h*n, with n the number of steps
[t, y] = Euler(t0, y0, h, tn);
plot(t, y, 'b');

% exact solution (y = e^t):
tt = (t0:0.001:tn);
yy = exp(tt);
hold('on');
plot(tt, yy, 'r');
hold('off');
legend('Euler', 'Exact');

function [t, y] = Euler(t0, y0, h, tn)
    fprintf('%10s%10s%10s%15s\n', 'i', 'yi', 'ti', 'f(yi,ti)');
    fprintf('%10d%+10.2f%+10.2f%+15.2f\n', 0, y0, t0, f(y0, t0));
    t = (t0:h:tn)';
    y = zeros(size(t));
    y(1) = y0;
    for i = 1:1:length(t) - 1
        y(i + 1) = y(i) + h * f(y(i), t(i));
        fprintf('%10d%+10.2f%+10.2f%+15.2f\n', i, y(i + 1), t(i + 1), f(y(i + 1), t(i + 1)));
    end
end

% in this case, f(y,t) = f(y)
function dydt = f(y, t)
    dydt = y;
end

% OUTPUT:
%         i        yi        ti       f(yi,ti)
%         0     +1.00     +0.00          +1.00
%         1     +2.00     +1.00          +2.00
%         2     +4.00     +2.00          +4.00
%         3     +8.00     +3.00          +8.00
%         4    +16.00     +4.00         +16.00
% NOTE: Code also outputs a comparison plot

Esempio di codice R

Image
Output grafico del codice del linguaggio di programmazione R per l'esempio proposto

Di seguito è riportato il codice dell'esempio nel linguaggio di programmazione R .

# ============
# SOLUTION to
#   y' = y,   where y' = f(t,y)
# then:
f <- function(ti,y) y

# INITIAL VALUES:
t0 <- 0
y0 <- 1
h  <- 1
tn <- 4

# Euler's method: function definition
Euler <- function(t0, y0, h, tn, dy.dt) {
  # dy.dt: derivative function
  
  # t sequence:
  tt <- seq(t0, tn, by=h)
  # table with as many rows as tt elements:
  tbl <- data.frame(ti=tt)
  tbl$yi <- y0 # Initializes yi with y0
  tbl$Dy.dt[1] <- dy.dt(tbl$ti[1],y0) # derivative
  for (i in 2:nrow(tbl)) {
    tbl$yi[i] <- tbl$yi[i-1] + h*tbl$Dy.dt[i-1]
    # For next iteration:
    tbl$Dy.dt[i] <- dy.dt(tbl$ti[i],tbl$yi[i])
  }
  return(tbl)
}

# Euler's method: function application
r <- Euler(t0, y0, h, tn, f)
rownames(r) <- 0:(nrow(r)-1) # to coincide with index n

# Exact solution for this case: y = exp(t)
#       added as an additional column to r
r$y <- exp(r$ti)

# TABLE with results:
print(r)

plot(r$ti, r$y, type="l", col="red", lwd=2)
lines(r$ti, r$yi, col="blue", lwd=2)
grid(col="black")
legend("top",  legend = c("Exact", "Euler"), lwd=2,  col = c("red", "blue"))

# OUTPUT:
#
#   ti yi Dy.dt         y
# 0  0  1     1  1.000000
# 1  1  2     2  2.718282
# 2  2  4     4  7.389056
# 3  3  8     8 20.085537
# 4  4 16    16 54.598150
# NOTE: Code also outputs a comparison plot

Utilizzo di altre dimensioni del passo

Image
La stessa illustrazione per h  = 0,25.

Come suggerito nell'introduzione, il metodo di Eulero è più accurato se la dimensione del passo è minore. La tabella seguente mostra il risultato con diverse dimensioni del passo. La riga superiore corrisponde all'esempio della sezione precedente e la seconda riga è illustrata nella figura.

dimensione del passo risultato del metodo di Eulero errore
1 16.00 38.60
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 registrato nell'ultima colonna della tabella è la differenza tra la soluzione esatta a e l'approssimazione di Eulero. Nella parte inferiore della tabella, la dimensione del passo è la metà della dimensione del passo nella riga precedente e l'errore è anche circa la metà dell'errore nella riga precedente. Ciò suggerisce che l'errore è approssimativamente proporzionale alla dimensione del passo, almeno per valori abbastanza piccoli della dimensione del passo. Questo è vero in generale, anche per altre equazioni; vedere la sezione Errore di troncamento globale per maggiori dettagli.

Altri metodi, come il metodo del punto medio anch'esso illustrato nelle figure, si comportano in modo più favorevole: l'errore globale del metodo del punto medio è approssimativamente proporzionale al quadrato della dimensione del passo. Per questo motivo, il metodo di Eulero è detto di primo ordine, mentre il metodo del punto medio è di secondo ordine.

Possiamo estrapolare dalla tabella sopra che la dimensione del passo necessaria per ottenere una risposta corretta con tre cifre decimali è di circa 0,00001, il che significa che abbiamo bisogno di 400.000 passaggi. Questo gran numero di passaggi comporta un elevato costo computazionale. Per questo motivo, vengono impiegati metodi di ordine superiore come i metodi Runge-Kutta o metodi lineari multistep , specialmente se si desidera un'elevata precisione.

Derivazione

Il metodo di Eulero può essere derivato in diversi modi. In primo luogo, c'è la descrizione geometrica sopra.

Un'altra possibilità è considerare lo sviluppo di Taylor della funzione intorno a :

L'equazione differenziale afferma che . Se questo viene sostituito nell'espansione di Taylor e si ignorano i termini quadratici e di ordine superiore, sorge il metodo di Eulero. L'espansione di Taylor viene utilizzata di seguito per analizzare l'errore commesso dal metodo di Eulero e può essere estesa per produrre metodi di Runge-Kutta .

Una derivazione strettamente correlata consiste nel sostituire la formula delle differenze finite in avanti per la derivata,

nell'equazione differenziale . Di nuovo, questo produce il metodo di Eulero. Un calcolo simile porta al metodo del punto medio e al metodo di Eulero all'indietro .

Infine, si può integrare l'equazione differenziale da a e applicare il teorema fondamentale del calcolo per ottenere:

Ora approssima l'integrale con il metodo del rettangolo a sinistra (con un solo rettangolo):

Combinando entrambe le equazioni si ritrova il metodo di Eulero. Questa linea di pensiero può essere continuata per arrivare a vari metodi lineari multistep .

Errore di troncamento locale

L' errore di troncamento locale del metodo di Eulero è l'errore commesso in un singolo passaggio. È la differenza tra la soluzione numerica dopo un passaggio, , e la soluzione esatta al tempo . La soluzione numerica è data da

Per la soluzione esatta, usiamo lo sviluppo di Taylor menzionato nella sezione Derivazione sopra:

L'errore di troncamento locale (LTE) introdotto dal metodo di Eulero è dato dalla differenza tra queste equazioni:

Questo risultato è valido se ha una derivata terza limitata.

Ciò mostra che per small , l'errore di troncamento locale è approssimativamente proporzionale a . Ciò rende il metodo di Eulero meno accurato (per piccoli ) rispetto ad altre tecniche di ordine superiore come i metodi Runge-Kutta e i metodi multistep lineari , per i quali l'errore di troncamento locale è proporzionale a una potenza maggiore della dimensione del passo.

Una formulazione leggermente diversa per l'errore di troncamento locale può essere ottenuta utilizzando la forma di Lagrange per il termine del resto nel teorema di Taylor . Se ha una derivata seconda continua, allora esiste un tale che

Nelle espressioni precedenti per l'errore, la derivata seconda della soluzione esatta incognita può essere sostituita da un'espressione che coinvolge il membro destro dell'equazione differenziale. Infatti, dall'equazione segue che

Errore di troncamento globale

L' errore di troncamento globale è l'errore in un momento fisso , dopo tutti i passaggi che i metodi devono compiere per raggiungere quell'ora dall'ora iniziale. L'errore di troncamento globale è l'effetto cumulativo degli errori di troncamento locali commessi in ogni passaggio. Il numero di passaggi è facilmente determinabile come , che è proporzionale a , e l'errore commesso in ogni passaggio è proporzionale a (vedere la sezione precedente). Pertanto, è prevedibile che l'errore di troncamento globale sarà proporzionale a .

Questo ragionamento intuitivo può essere precisato. Se la soluzione ha una derivata seconda limitata ed è Lipschitz continua nel suo secondo argomento, allora l'errore di troncamento globale (GTE) è limitato da

dove è un limite superiore sulla derivata seconda di sull'intervallo dato ed è la costante di Lipschitz di .

La forma precisa di questo limite è di scarsa importanza pratica, poiché nella maggior parte dei casi il limite sovrastima enormemente l'effettivo errore commesso dal metodo di Eulero. Ciò che è importante è che mostra che l'errore di troncamento globale è (approssimativamente) proporzionale a . Per questo motivo si dice che il metodo di Eulero è del primo ordine.

Stabilità numerica

Image
Soluzione di calcolata con il metodo di Eulero con passo (quadrati blu) e (cerchi rossi). La curva nera mostra la soluzione esatta.

Il metodo di Eulero può anche essere numericamente instabile , specialmente per equazioni rigide , il che significa che la soluzione numerica cresce molto per equazioni in cui la soluzione esatta non lo fa. Questo può essere illustrato usando l'equazione lineare

La soluzione esatta è , che decade a zero come . Tuttavia, se si applica il metodo di Eulero a questa equazione con passo , allora la soluzione numerica è qualitativamente sbagliata: oscilla e cresce (vedi figura). Questo è ciò che significa essere instabili. Se si usa un passo più piccolo, per esempio , la soluzione numerica decade a zero.

Image
Il disco rosa mostra la regione di stabilità per il metodo di Eulero.

Se il metodo di Eulero viene applicato all'equazione lineare , allora la soluzione numerica è instabile se il prodotto è esterno alla regione

illustrato a destra. Questa regione è chiamata regione di stabilità (lineare) . Nell'esempio, è -2.3, quindi se allora che è al di fuori della regione di stabilità, e quindi la soluzione numerica è instabile.

Questa limitazione, insieme alla sua lenta convergenza dell'errore con h , significa che il metodo di Eulero non viene spesso utilizzato, se non come semplice esempio di integrazione numerica.

Errori di arrotondamento

La discussione fino ad ora ha ignorato le conseguenze dell'errore di arrotondamento . Nel passaggio n del metodo di Eulero, l'errore di arrotondamento è approssimativamente della grandezza y n dove ε è l' epsilon della macchina . Supponendo che gli errori di arrotondamento siano tutti approssimativamente della stessa dimensione, l'errore di arrotondamento combinato in N passaggi è approssimativamente N ε y 0 se tutti gli errori puntano nella stessa direzione. Poiché il numero di passi è inversamente proporzionale alla dimensione del passo h , l'errore di arrotondamento totale è proporzionale a / h . In realtà, tuttavia, è estremamente improbabile che tutti gli errori di arrotondamento puntino nella stessa direzione. Se invece si assume che gli errori di arrotondamento siano variabili casuali indipendenti, allora l'errore di arrotondamento totale atteso è proporzionale a .

Pertanto, per valori estremamente piccoli della dimensione del passo, l'errore di troncamento sarà piccolo ma l'effetto dell'errore di arrotondamento potrebbe essere grande. La maggior parte dell'effetto dell'errore di arrotondamento può essere facilmente evitata se nella formula per il metodo di Eulero viene utilizzata la sommatoria compensata .

Modifiche ed estensioni

Una semplice modifica del metodo di Eulero che elimina i problemi di stabilità annotati nella sezione precedente è il metodo di Eulero all'indietro :

Questo differisce dal metodo Eulero (standard o in avanti) in quanto la funzione viene valutata al punto finale del passaggio, anziché al punto iniziale. Il metodo di Eulero all'indietro è un metodo implicito , il che significa che la formula per il metodo di Eulero all'indietro ha entrambi i lati, quindi quando si applica il metodo di Eulero all'indietro dobbiamo risolvere un'equazione. Questo rende l'implementazione più costosa.

Altre modifiche del metodo di Eulero che aiutano con la stabilità producono il metodo di Eulero esponenziale o il metodo di Eulero semi-implicito .

Metodi più complicati possono raggiungere un ordine più elevato (e una maggiore precisione). Una possibilità è quella di utilizzare più valutazioni di funzione. Ciò è illustrato dal metodo del punto medio già menzionato in questo articolo:

.

Questo porta alla famiglia dei metodi Runge-Kutta .

L'altra possibilità è utilizzare più valori passati, come illustrato dal metodo Adams-Bashforth in due fasi:

Questo porta alla famiglia dei metodi lineari multistep . Esistono altre modifiche che utilizzano tecniche di rilevamento della compressione per ridurre al minimo l'utilizzo della memoria

Nella cultura popolare

Nel film Hidden Figures , Katherine Goble ricorre al metodo di Eulero per calcolare il rientro dell'astronauta John Glenn dall'orbita terrestre.

Guarda anche

Appunti

Riferimenti

link esterno