Runge-Kutta e Riutilizzo dei Datapoints


11

Sto cercando di implementare il metodo Runge-Kutta del quarto ordine per risolvere un ODE del primo ordine in Python, ovvero . Capisco come funziona il metodo, ma sto cercando di scrivere un algoritmo efficiente che riduca al minimo il numero di volte in cui viene calcolato quanto è piuttosto costoso. Mi è stato detto che è possibile riutilizzare i punti dati che erano stati calcolati in precedenza man mano che si incrementano i passaggi ma non si vede come. Qualcuno sa come fare questo o non è possibile?dydX=f(X,y)f(X,y)


Ricerca "memorizzazione". Puoi facilmente "avvolgere" il tuo in f(x,y)modo che i risultati vengano memorizzati.

2
@ S.Lott: il termine è "memoization", senza la "r".

1
@DietrichEpp: totalmente corretto. Mac OS X ha un nuovo correttore ortografico aggressivo senza alcuna esperienza tecnica.

Si tratta di un sistema del 2 ° ordine simulato con un metodo del 4 ° ordine?

Ecco un vasto elenco di soluzioni alternative: google.com/… Ognuno di loro probabilmente sarà utile.

Risposte:


8

Se stai andando da yp_1 = f(x_1, y_1)a yp_2 = f(x_1+h, y_2)te avrai bisogno dei punti intermedi:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

In generale nessuno dei punti intermedi è utile nel passaggio successivo. Perché K1<> K2e K3<> yp_2.


4

In generale, i metodi espliciti di ordine di Runge-Kutta richiedono almeno N valutazioni di funzione e non c'è assolutamente modo di evitarlo. Passato N = 4 hanno bisogno di più di N valutazioni di funzione.N NN=4N

Se si desidera riutilizzare le valutazioni delle funzioni precedenti, è necessario utilizzare un metodo a più fasi come Adams-Bashforth.

In ogni caso paghi per ogni strategia. I metodi a passaggio singolo richiedono il maggior numero di valutazioni delle funzioni, ma i metodi a più fasi hanno il requisito di memoria più elevato.

Modifica: correzione. La mia affermazione è vera solo per metodi espliciti. La situazione è meno chiara per i metodi impliciti poiché il numero di fasi non si traduce direttamente in numero di valutazioni delle funzioni.


Probabilmente dovrei essere un po 'più specifico. Vedi Butcher per maggiori dettagli: Butcher, JC e J. Wiley. Metodi numerici per equazioni differenziali ordinarie. Wiley Online Library, 2008. Eccellente riferimento per le soluzioni ODE, e fornisce anche molte prove di inesistenza per i metodi RK (ad es. Non esiste un metodo Runge-Kutta per l'ordine 5 che utilizza solo 4 valutazioni delle funzioni.)
Reid.Atcheson

1
Per completezza: le tue affermazioni non sono vere per i "metodi generali di Runge-Kutta" ma solo per i metodi espliciti di Runge-Kutta.
David Ketcheson,

Ops! Hai ragione, mi dispiace per quello.
Reid.Atcheson,

1

So che stai usando i metodi Runge-Kutta per risolvere il tuo ODE, ma se vuoi riutilizzare i vecchi valori calcolati della tua f (x, y), potresti prendere in considerazione metodi multistep, come Adams-Bashforth o Adams-Moulton metodi. Naturalmente, lo svantaggio di questi metodi è che non è possibile utilizzare il time-ste adattivo molto facilmente.


0

Verificare i metodi "incorporati": l'obiettivo in questo tipo di metodi RK è di avere due metodi con ordini diversi, in cui il metodo di ordine elevato utilizza le stesse valutazioni delle funzioni del metodo di ordine basso. Ciò consente una stima dell'errore molto efficiente. Vedi p.165 e oltre di "Risoluzione delle equazioni differenziali ordinarie I: problemi di non scioglimento" di Hairer, Norsett e Wanner. Esempi tipici sono i metodi Fehlberg dell'ordine 7 (8).

Inoltre, se stai cercando di risolvere gli ODE in PYTHON, dai un'occhiata a assimulo . Ho giocato con questo pacchetto per un paio di settimane e sono abbastanza contento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.