Los métodos de Runge-Kutta (hay un nombre de métodos de Runge-Kutta en la literatura ) es una gran clase de métodos numéricos para resolver el problema de Cauchy para ecuaciones diferenciales ordinarias y sus sistemas. Los primeros métodos de esta clase fueron propuestos alrededor de 1900 por los matemáticos alemanes K. Runge y M. V. Kutta .
La clase de métodos de Runge-Kutta incluye el método de Euler explícito y el método de Euler modificado con recálculo, que son métodos de primer y segundo orden de precisión, respectivamente. Existen métodos explícitos estándar de tercer orden de precisión que no se utilizan mucho. El más utilizado e implementado en varios paquetes matemáticos ( Maple , MathCAD , Maxima ) es el método clásico de Runge-Kutta , que tiene el cuarto orden de precisión. Cuando se realizan cálculos con mayor precisión, se utilizan cada vez más métodos de quinto y sexto orden de precisión [1] [2] . La construcción de circuitos de orden superior está asociada a grandes dificultades computacionales [3] .
Los métodos de séptimo orden deben tener al menos nueve etapas y los métodos de octavo orden deben tener al menos 11 etapas. Para los métodos del noveno y superiores órdenes (que, sin embargo, no tienen gran importancia práctica), no se sabe cuántas etapas son necesarias para lograr el orden de precisión correspondiente [3] .
El método de Runge-Kutta de cuarto orden para cálculos con un paso de integración constante está tan extendido que a menudo se lo denomina simplemente método de Runge-Kutta.
Considere el problema de Cauchy para un sistema de ecuaciones diferenciales ordinarias de primer orden. (Además , a ).
Luego, el valor aproximado en puntos posteriores se calcula mediante la fórmula iterativa:
El cálculo de un nuevo valor se realiza en cuatro etapas:
donde está el valor del paso de cuadrícula en .
Este método tiene el cuarto orden de precisión. Esto significa que el error en un paso es de orden y el error total en el intervalo de integración final es de orden .
La familia de métodos explícitos de Runge-Kutta es una generalización tanto del método explícito de Euler como del método clásico de Runge-Kutta de cuarto orden. viene dada por las formulas
donde está el valor del paso de cuadrícula y el cálculo del nuevo valor se lleva a cabo en los siguientes pasos:
El método específico está determinado por el número y los coeficientes y . Estos coeficientes a menudo se ordenan en una tabla (llamada tabla Butcher ):
Para los coeficientes del método de Runge-Kutta, se deben cumplir las condiciones para . Si desea que el método tenga orden , también debe proporcionar la condición
donde es la aproximación obtenida por el método de Runge-Kutta. Después de la diferenciación múltiple, esta condición se transforma en un sistema de ecuaciones polinómicas con respecto a los coeficientes del método.
Todos los métodos de Runge-Kutta mencionados hasta ahora son métodos explícitos . Desafortunadamente, los métodos explícitos de Runge-Kutta, por regla general, no son adecuados para resolver ecuaciones rígidas debido a la pequeña región de su estabilidad absoluta [4] . La inestabilidad de los métodos explícitos de Runge-Kutta también crea problemas muy serios en la solución numérica de ecuaciones diferenciales parciales .
La inestabilidad de los métodos explícitos de Runge-Kutta motivó el desarrollo de métodos implícitos. El método implícito de Runge-Kutta tiene la forma [5] [6] :
dónde
El método explícito se caracteriza por el hecho de que la matriz de coeficientes para él tiene una forma triangular inferior (incluida la diagonal principal cero), en contraste con el método implícito, donde la matriz tiene una forma arbitraria. Esto también se ve en Butcher's table .
Una consecuencia de esta diferencia es la necesidad de resolver el sistema de ecuaciones para , donde es el número de etapas, en cada paso. Esto aumenta el costo computacional, sin embargo, con un valor suficientemente pequeño, uno puede aplicar el principio de mapeos de contracción y resolver este sistema por iteración simple [7] . En el caso de una iteración, esto aumenta el costo computacional por solo un factor de dos.
Por otro lado, Jean Kunzman (1961) y John Butcher (1964) demostraron que para cualquier número de etapas existe un método implícito de Runge-Kutta con orden de precisión . Esto significa, por ejemplo, que para el método explícito de cuatro etapas de cuarto orden descrito anteriormente, hay un análogo implícito con el doble de precisión.
El método de Runge-Kutta implícito más simple es el método "con recálculo" de Euler modificado. Está dada por la fórmula:
.
Para implementarlo en cada paso, se requieren al menos dos iteraciones (y dos evaluaciones de funciones).
Pronóstico:
.Corrección:
.La segunda fórmula es una iteración simple de la solución del sistema de ecuaciones con respecto a , escrita en forma de mapeo de contracción. Para mejorar la precisión, la iteración-corrección se puede hacer varias veces sustituyendo . El método de Euler modificado "con recálculo" tiene el segundo orden de precisión.
La ventaja de los métodos implícitos de Runge-Kutta en comparación con los explícitos es su mayor estabilidad, lo que es especialmente importante cuando se resuelven ecuaciones rígidas . Considere como ejemplo la ecuación lineal y' = λ y . El método habitual de Runge-Kutta aplicado a esta ecuación se reduce a la iteración , con r igual a
donde denota un vector columna de unidades [8] . La función se llama función de estabilidad [9] . Se puede ver en la fórmula que es la razón de dos polinomios de grado si el método tiene etapas. Los métodos explícitos tienen una matriz triangular estrictamente inferior , lo que implica que y que la función de estabilidad es un polinomio [10] .
La solución numérica de este ejemplo converge a cero bajo la condición c . El conjunto de tales se denomina región de estabilidad absoluta . En particular, un método se llama A-estable si todos los c están en la región de estabilidad absoluta. La función de estabilidad del método explícito de Runge-Kutta es un polinomio, por lo que, en principio, los métodos explícitos de Runge-Kutta no pueden ser A-estables [10] .
Si el método tiene orden , entonces la función de estabilidad satisface la condición de . Por lo tanto, la relación de polinomios de un grado dado es de interés, aproximando la función exponencial de la mejor manera. Estas relaciones se conocen como aproximaciones de Padé . La aproximante de Padé con numerador de grado y denominador de grado es A-estable si y solo si [11]
El método Gauss-Legendre de etapas tiene orden , por lo que su función de estabilidad es la aproximación de Padé . Esto implica que el método es A-estable [12] . Esto muestra que los métodos de Runge-Kutta estables en A pueden ser de orden arbitrariamente alto. Por el contrario, el orden de estabilidad A de los métodos de Adams no puede exceder de dos.
De acuerdo con las normas gramaticales del idioma ruso, el apellido Kutta se declina, por lo que dicen: "El método Runge-Kutta". Las reglas de la gramática rusa prescriben declinar todos los apellidos (incluidos los masculinos) que terminan en -а, -я, precedidos por una consonante. La única excepción son los apellidos de origen francés con acento en la última sílaba como Dumas, Zola [13] . Sin embargo, a veces hay una versión indeclinable del "Método Runge-Kutta" (por ejemplo, en el libro [14] ).
haciendo un reemplazo y transfiriendo al lado derecho, obtenemos el sistema:
El programa C# usa la clase abstracta RungeKutta , que debe anular el método abstracto F que especifica los lados derechos de las ecuaciones.
La resolución de sistemas de ecuaciones diferenciales por el método de Runge-Kutta es uno de los métodos de solución numérica más comunes en ingeniería. En el entorno MATLAB , se implementa una de sus variedades: el método Dorman-Prince . Para resolver un sistema de ecuaciones, primero debes escribir una función que calcule las derivadas, es decir, las funciones y = g ( x , y , z ) y z = cos(3 x ) − 4 y = f ( x , y , z ), como se describe anteriormente . En uno de los directorios a los que se puede acceder desde el sistema MATLAB , debe crear un archivo de texto llamado (por ejemplo) runge.m con el siguiente contenido (para la versión 5.3 de MATLAB):
MATLAB , runge.m función Dy = rango ( x, y ) Dy = y (:); Dy ( 1 ) = y ( 2 ); Dy ( 2 ) = cos ( 3 * x ) - 4 * y ( 1 );El nombre del archivo y el nombre de la función deben coincidir, pero puede ser cualquier cosa que no se haya usado anteriormente.
Luego, debe crear un archivo principal llamado, por ejemplo, main.m , que hará los cálculos básicos. Este archivo principal contendrá el siguiente texto:
MATLAB , principal.m claro ; clc ; % Borrar memoria y pantalla h = 0,1 ; % Paso de integración aleta_x = 8 ; % Tiempo de integración final y0 = 0,8 ; % Valor inicial de la función Dy0 = 2 ; % Valor inicial de la derivada de la función [ x , y ] = ode45 ( 'runge' , [ 0 : h : x_fin ], [ y0 Dy0 ]); % método de Runge-Kutta parcela ( x , y , 'LineWidth' , 2 ); cuadrícula ; % Parcela y Cuadrícula leyenda ( 'y(x)' , 'y''(x)' , 0 ); % Leyenda en el gráficoDado que MATLAB está orientado a matrices, la solución de Runge-Kutta es muy fácil de realizar para un rango completo de x , como, por ejemplo, en el programa de ejemplo anterior. Aquí la solución es la gráfica de la función dentro de los tiempos de 0 a x_fin .
Las variables xey devueltas por la función ODE45 son vectores de valor. Obviamente, la solución al ejemplo anterior es el segundo elemento de x , ya que el primer valor es 0, el paso de integración es h = 0.1 y el valor de interés x = 0.1. La siguiente entrada en la ventana de comandos de MATLAB dará la solución deseada:
soluciónMATLAB _ y1 = y ( encontrar ( x == 0.1 ))Respuesta: y1 = 0.98768
Método de diferencias finitas | |
---|---|
Artículos generales | |
Tipos de esquemas de diferencia. |