Inicio › Temas › Ecuaciones diferenciales
🌀 Ecuaciones diferenciales nivel medio
Campos de direcciones, Euler y RK4
Dibujar pendientes para ver las soluciones sin resolver, y avanzar paso a paso.
🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)
La idea
Casi ninguna ecuación diferencial tiene solución en fórmula cerrada, pero todas se pueden ver. Dado un problema de valor inicial y′ = f(x, y) con y(x₀) = y₀, la ecuación dice literalmente qué pendiente tiene la solución en cada punto del plano. Si en una rejilla de puntos se dibuja un segmento corto con pendiente f(x, y), se obtiene el campo de direcciones: un mapa de flujo en el que la solución que pasa por cualquier punto se sigue con la vista, como una hoja arrastrada por la corriente. Las curvas donde f(x, y) = 0 son las isoclinas nulas y separan las zonas de crecimiento de las de decrecimiento.
Para poner números al dibujo se usan métodos de un paso. El más simple es Euler: avanzar en línea recta siguiendo la pendiente del punto actual, yₙ₊₁ = yₙ + h f(xₙ, yₙ). Es intuitivo pero poco preciso: su error global es del orden de h, así que para ganar un dígito hay que multiplicar por diez el número de pasos. El método de Heun corrige promediando la pendiente del inicio y la del final estimado, y alcanza orden 2.
Runge-Kutta de cuarto orden lleva esa idea más lejos: evalúa f cuatro veces por paso (en el inicio, dos veces en el punto medio y una en el final tentativo) y combina las pendientes con pesos 1, 2, 2, 1 divididos por 6. El error global cae como h⁴: al reducir el paso a la mitad el error se divide por dieciséis. Con cuatro evaluaciones por paso, RK4 resulta muchísimo más eficiente que Euler para una precisión dada, y es el integrador por defecto en casi toda la simulación de sistemas dinámicos.
Fórmulas clave
- Problema de valor inicialy′ = f(x, y), y(x₀) = y₀
- Campo de direccionesen (x, y) la solución tiene pendiente m = f(x, y)
- Euleryₙ₊₁ = yₙ + h f(xₙ, yₙ), error global O(h)
- Heun (Euler mejorado)yₙ₊₁ = yₙ + (h/2)[f(xₙ, yₙ) + f(xₙ + h, yₙ + h f(xₙ, yₙ))]
- Etapas de RK4k₁ = f(xₙ, yₙ); k₂ = f(xₙ + h/2, yₙ + h k₁/2); k₃ = f(xₙ + h/2, yₙ + h k₂/2); k₄ = f(xₙ + h, yₙ + h k₃)
- Paso de RK4yₙ₊₁ = yₙ + (h/6)(k₁ + 2k₂ + 2k₃ + k₄), error global O(h⁴)
Dónde se aplica
Todo motor de videojuego y todo simulador de vuelo integra numéricamente las ecuaciones de movimiento en cada fotograma; usar Euler explícito con pasos grandes hace que la energía crezca y los objetos «exploten», por lo que se recurre a RK4 o a integradores simplécticos. En farmacocinética se resuelven así los modelos compartimentales que predicen la concentración de un fármaco. En climatología y dinámica de fluidos los mismos esquemas de un paso, con control adaptativo del tamaño de paso, avanzan millones de ecuaciones acopladas. Y el campo de direcciones sigue siendo la herramienta didáctica para decidir de un vistazo si una solución está acotada o se dispara.
Con programación (Python)
import math
# y' = x + y con y(0) = 1; solución exacta y = 2e^x - x - 1
def f(x, y):
return x + y
def exacta(x):
return 2 * math.exp(x) - x - 1
def euler(h, X):
x, y = 0.0, 1.0
for _ in range(round(X / h)):
y += h * f(x, y)
x += h
return y
def rk4(h, X):
x, y = 0.0, 1.0
for _ in range(round(X / h)):
k1 = f(x, y)
k2 = f(x + h / 2, y + h * k1 / 2)
k3 = f(x + h / 2, y + h * k2 / 2)
k4 = f(x + h, y + h * k3)
y += h * (k1 + 2 * k2 + 2 * k3 + k4) / 6
x += h
return y
print("Exacta en x = 1:", exacta(1))
for h in [0.5, 0.25, 0.125, 0.0625]:
print("h =", h, " Euler =", round(euler(h, 1), 8),
" error =", round(abs(euler(h, 1) - exacta(1)), 8),
" RK4 =", round(rk4(h, 1), 10),
" error =", abs(rk4(h, 1) - exacta(1)))La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.
Temas relacionados
Métodos de Euler y Runge-Kutta · Crecimiento y decaimiento exponencial · Crecimiento logístico · Ley de enfriamiento de Newton