Runge-Kutta y reutilización de puntos de datos


11

Estoy tratando de implementar el método Runge-Kutta de cuarto orden para resolver un ODE de primer orden en Python, es decir, . Entiendo cómo funciona el método, pero estoy tratando de escribir un algoritmo eficiente que minimice el número de veces quese calculaf(x,y)ya que esto es bastante costoso. Me han dicho que es posible reutilizar los puntos de datos que se calcularon previamente a medida que se incrementan los pasos, pero no puedo ver cómo. ¿Alguien sabe cómo hacer esto o no es posible?dydx=f(x,y)f(x,y)


Investigación "memorización". Puede "envolver" fácilmente f(x,y)para que los resultados sean memorables.

2
@ S.Lott: El término es "memorización", sin la "r".

1
@DietrichEpp: totalmente correcto. Mac OS X tiene un nuevo corrector ortográfico agresivo sin conocimientos técnicos en absoluto.

¿Es este un sistema de segundo orden simulado con un método de cuarto orden?

Aquí hay una gran lista de soluciones alternativas: google.com /... Cualquiera de ellas probablemente será útil.

Respuestas:


8

Si va desde yp_1 = f(x_1, y_1)al yp_2 = f(x_1+h, y_2)que se va a necesitar los puntos intermedios:

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)

En general, ninguno de los puntos intermedios es útil en el siguiente paso. Porque K1<> K2y K3<> yp_2.


4

N NN=4N

Si desea reutilizar evaluaciones de funciones pasadas, debe usar un método de varios pasos como Adams-Bashforth.

En cualquier caso, paga por cada estrategia. Los métodos de un solo paso requieren el mayor número de evaluaciones de funciones, pero los métodos de varios pasos tienen el mayor requisito de memoria.

Editar: Corrección. Mi afirmación es verdadera solo para métodos explícitos. La situación es menos clara para los métodos implícitos, ya que el número de etapas no se traduce directamente en el número de evaluaciones de funciones.


Probablemente debería ser un poco más específico. Ver Butcher para más detalles: Butcher, JC y J. Wiley. Métodos numéricos para ecuaciones diferenciales ordinarias. Wiley Online Library, 2008. excelente referencia para soluciones ODE, y también proporciona una gran cantidad de pruebas inexistencia de métodos RK (por ejemplo, no existe orden 5 método de Runge-Kutta que utiliza sólo 4 evaluaciones de la función.)
Reid.Atcheson

1
Para completar: sus afirmaciones no son ciertas para los "métodos generales de Runge-Kutta", sino solo para los métodos explícitos de Runge-Kutta.
David Ketcheson

Whoops! Tienes razón, perdón por eso.
Reid.Atcheson

1

Sé que está utilizando los métodos Runge-Kutta para resolver su EDO, pero si desea reutilizar los valores calculados antiguos de su f (x, y), es posible que desee considerar métodos de varios pasos, como Adams-Bashforth o Adams-Moulton métodos. Por supuesto, la desventaja de estos métodos es que no puede usar el paso de tiempo adaptativo muy fácilmente.


0

Verifique los métodos "incrustados": el objetivo en este tipo de métodos RK es tener dos métodos con diferentes órdenes, donde el método de orden superior usa las mismas evaluaciones de función que el método de orden bajo. Esto permite una estimación de errores muy eficiente. Ver p.165 y más de "Resolviendo Ecuaciones Diferenciales Ordinarias I: Problemas no rígidos" por Hairer, Norsett y Wanner. Ejemplos típicos son los métodos de Fehlberg de orden 7 (8).

Además, si está buscando resolver EDO en PYTHON, consulte Assimulo . He estado jugando con este paquete durante un par de semanas y estoy bastante feliz.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.