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?
ode
python
explicit-methods
joshlk
fuente
fuente
f(x,y)
para que los resultados sean memorables.Respuestas:
Si va desde
yp_1 = f(x_1, y_1)
alyp_2 = f(x_1+h, y_2)
que se va a necesitar los puntos intermedios:En general, ninguno de los puntos intermedios es útil en el siguiente paso. Porque
K1
<>K2
yK3
<>yp_2
.fuente
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.
fuente
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.
fuente
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.
fuente