Los métodos de Taylor de orden \(k\) tienen el inconveniente de tener expresiones más complejas a medida que va aumentando \(k\) debido a que las expresiones de la derivada \(k\)-ésima de la solución del problema de valores iniciales \(y^{(k)}\) es cada vez es más compleja y va aumentado de forma exponencial debido a la aplicación de la regla de la cadena.
Esto hace que los métodos de Taylor sean computancionalmente costosos para valores de \(k\) relativamente grandes y usualmente no se usen en la práctica.
Sin embargo, no hemos de olvidar que sabemos que el método de Taylor de orden \(k\) es consistente de orden \(k\), conocimiento que no siempre es tan sencillo de obtener en otro tipo de métodos.
En esta sección vamos a introducir los métodos de Runge-Kutta.
Veamos primero un ejemplo de método de Runge-Kutta introductorio: el método de Euler modificado: \[ \hat{y}_{i+1}=\hat{y}_i+h f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{h}{2}f(t_i,\hat{y}_i)\right),\ \hat{y}_0 =y_0. \]
Observamos que no usamos las derivadas sucesivas de la función \(f(t,y(t))\) tal como hacíamos en los métodos de Taylor.
En este caso usamos el valor \(t_i+\frac{h}{2}\) y \(\hat{y}_i+\frac{h}{2}f(t_i,\hat{y}_i)\) como valores “cercanos” a \(t_i\) y \(\hat{y}_i\).
Calculemos el orden de consistencia del método anterior.
El error local de truncamiento será donde recordemos que \(y_i=y(t_i)\) es el valor de la solución exacta en el punto del mallado \(t_i\): \[ \begin{align*} \tau_{i+1} & =\frac{y_{i+1}-y_i}{h}-f\left(t_i+\frac{h}{2},y_i+\frac{h}{2}f(t_i,y_i)\right)\\ & =\frac{y_i+h y'(t_i)+\frac{h^2}{2}y''(t_i)+O(h^3)-y_i}{h}\\ &\quad -\left(f(t_i,y_i)+\frac{h}{2}\frac{\partial f}{\partial t}(t_i,y_i)+\frac{h}{2}\frac{\partial f}{\partial y}(t_i,y_i)f(t_i,y_i)+O(h^2)\right)\\ & = y'(t_i)+\frac{h}{2}y''(t_i)-f(t_i,y_i)-\frac{h}{2}\left(\frac{\partial f}{\partial t}(t_i,y_i)+\frac{\partial f}{\partial y}(t_i,y_i)f(t_i,y_i)\right)\\ & \quad +O(h^2) \end{align*} \]
Ahora, usando que \[ \begin{align*} y'(t_i) & =f(t_i,y_i),\\ y''(t_i) & =\frac{\partial f}{\partial t}(t_i,y_i)+\frac{\partial f}{\partial y}(t_i,y_i)y'(t_i) =\frac{\partial f}{\partial t}(t_i,y_i)+\frac{\partial f}{\partial y}(t_i,y_i)f(t_i,y_i), \end{align*} \] tenemos que \(\tau_{i+1}(h)=O(h^2)\).
Por tanto, el método de Euler modificado tiene orden de consistencia \(2\).
INPUT valores inicial y final
\(a\), \(b\), entero
\(n\), condición inicial
\(y_0\) y función
\(f(t,y)\)Set
\(h=\frac{b-a}{n}\).Set
\(t=a\).Set
\(\mathbf{\hat{y}}=\mathbf{0}\). (Definimos inicialmente el vector de aproximaciones como
\(0\))Set
\(\hat{y}_1=y_0\). (Definimos la primera componente del vector de aproximaciones como la condición inicial
)For i=1,...,n
Set
\(\hat{y}_{i+1} =\hat{y}_{i}+h f\left(t+\frac{h}{2},\hat{y}_{i}+\frac{h}{2}f(t,\hat{y}_{i})\right)\) (Hallamos el valor \(\hat{y}(t_{i})=\hat{y}(a+ih)\))Set
\(t=t+h\). (actualizamos el tiempo
\(t\))Print
\(\mathbf{\hat{y}}\) (Damos el vector de aproximaciones
).Recordemos que se trataba de aproximar la solución del siguiente problema de valores iniciales: \[ y'=f(t,y)=\frac{1+t}{1+y},\ 1\leq t\leq 3,\ y(1)=2, \] de solución exacta \(y(t)=\sqrt{t^2+2t+6}-1\).
Vamos a aplicarle el método de Euler modificado para hallar una solución aproximada en el mallado siguiente usando \(h=0.1\).
La ecuación en diferencias a resolver es la siguiente: \[ \begin{align*} \hat{y}_{i+1} & =\hat{y}_i+h f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{h}{2}f(t_i,\hat{y}_i)\right)=\hat{y}_i +h\cdot \frac{\left(1+t_i+\frac{h}{2}\right)}{\left(1+\hat{y}_i+\frac{h}{2}f(t_i,\hat{y}_i)\right)}=\hat{y}_i +h\cdot \frac{\left(1+t_i+\frac{h}{2}\right)}{\left(1+\hat{y}_i+\frac{h}{2}\frac{(1+t_i)}{(1+\hat{y}_i)}\right)}\\ & =\hat{y}_i+\frac{h (\hat{y}_i+1) (h+2 t_i+2)}{h (t_i+1)+2 (\hat{y}_i+1)^2},\ \hat{y}_0=2. \end{align*} \]
Vamos a aplicarle el método de Euler modificado para hallar una solución aproximada en el mallado siguiente usando \(h=0.1\): \[ t_i=1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. \] \[ \begin{align*} \hat{y}(1.1) & = \hat{y}(1)+\frac{h\cdot (\hat{y}(1)+1)\cdot (h+2\cdot1+2)}{h\cdot (1+1)+2\cdot (\hat{y}(1)+1)^2}=2+\frac{0.1\cdot (2+1)\cdot (0.1+2\cdot1+2)}{0.1\cdot (1+1)+2\cdot (2+1)^2}= 2.0675824,\\ \hat{y}(1.2) & = \hat{y}(1.1)+\frac{h\cdot (\hat{y}(1.1)+1)\cdot (h+2\cdot1.1+2)}{h\cdot (1.1+1)+2\cdot (\hat{y}(1.1)+1)^2}\\ & =2.0675824+\frac{0.1\cdot (2.0675824+1)\cdot (0.1+2\cdot1.1+2)}{0.1\cdot (1.1+1)+2\cdot (2.0675824+1)^2}= 2.1368968,\\ \hat{y}(1.3) & = \hat{y}(1.2)+\frac{h\cdot (\hat{y}(1.2)+1)\cdot (h+2\cdot1.2+2)}{h\cdot (1.2+1)+2\cdot (\hat{y}(1.2)+1)^2}\\ & =2.1368968+\frac{0.1\cdot (2.1368968+1)\cdot (0.1+2\cdot1.2+2)}{0.1\cdot (1.2+1)+2\cdot (2.1368968+1)^2}= 2.2078307,\\ & \vdots \end{align*} \]
La siguiente tabla muestra los valores de las soluciones aproximada y exacta en los puntos del mallado:
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
1 | 2 | 2 | 0 |
1.1 | 2.0675824 | 2.0675723 | 0.0000101 |
1.2 | 2.1368968 | 2.1368774 | 0.0000193 |
1.3 | 2.2078307 | 2.207803 | 0.0000278 |
1.4 | 2.2802793 | 2.2802439 | 0.0000354 |
1.5 | 2.3541443 | 2.354102 | 0.0000423 |
1.6 | 2.4293342 | 2.4292856 | 0.0000486 |
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
1.7 | 2.5057639 | 2.5057096 | 0.0000542 |
1.8 | 2.5833538 | 2.5832946 | 0.0000593 |
1.9 | 2.6620305 | 2.6619667 | 0.0000638 |
2 | 2.7417252 | 2.7416574 | 0.0000678 |
2.1 | 2.8223743 | 2.822303 | 0.0000713 |
2.2 | 2.9039187 | 2.9038443 | 0.0000745 |
2.3 | 2.9863035 | 2.9862263 | 0.0000772 |
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
2.4 | 3.0694776 | 3.069398 | 0.0000796 |
2.5 | 3.1533937 | 3.1533119 | 0.0000817 |
2.6 | 3.2380076 | 3.237924 | 0.0000836 |
2.7 | 3.3232784 | 3.3231933 | 0.0000851 |
2.8 | 3.409168 | 3.4090815 | 0.0000864 |
2.9 | 3.4956409 | 3.4955534 | 0.0000876 |
3 | 3.5826642 | 3.5825757 | 0.0000885 |
Uno de los métodos más usados es el método de Runge-Kutta 4 cuya expresión es la siguiente: \[ \begin{align*} \hat{y}_{i+1} & = \hat{y}_i +\frac{h}{6}(k_1+2k_2+2k_3+k_4),\\ k_1 & = f(t_i,\hat{y}_i),\\ k_2 & = f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{h k_1}{2}\right),\\ k_3 & = f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{h k_2}{2}\right),\\ k_4 & = f(t_i+h,\hat{y}_i + h k_3),\ \hat{y}_0=y_0 \end{align*} \] Observemos que sigue la filosofía de los métodos de Runge-Kutta, es decir, está definido en función de valores “cercanos” al valor “actual” \((t_i,\hat{y}_i)\) sin que intervengan las derivadas \(k\)-ésimas de la función \(f(t,y(t))\).
El orden de consistencia del método de Runge-Kutta 4 es \(4\).
La proposición anterior es la razón que el método se denomine método de Runge-Kutta 4.
Hemos de demostrar que: \[ \tau_{i+1}(h)=\frac{y_{i+1} - y_i}{h} -\frac{1}{6}(k_1+2k_2+2k_3+k_4)=O(h^4), \] donde recordemos que \(y_i=y(t_i)\).
La expresión anterior es equivalente a: \[ h\tau_{i+1}(h)=y_{i+1} - y_i -\frac{h}{6}(k_1+2k_2+2k_3+k_4)=O(h^5). \] En primer lugar desarrollamos \(y_{i+1}=y(t_{i+1})=y(t_i+h)\) usando el desarrollo de Taylor alrededor de \(t=t_i\): \[ \begin{align*} y_{i+1} & =y_i+h y'(t_i)+\frac{h^2}{2} y''(t_i)+\frac{h^3}{6} y'''(t_i)+\frac{h^4}{24} y^{(iv)}(t_i)+O(h^5),\\ &= y_i +h f(t_i,y_i)+\frac{h^2}{2} f'(t_i,y_i)+\frac{h^3}{6} f''(t_i, y_i)+\frac{h^4}{24} f'''(t_i,y_i)+O(h^5) \end{align*} \]
donde recordemos que: \[ \begin{align*} y'(t_i) & =f_i,\\ y''(t_i) & =f'(t_i,y_i) =f_{t,i}^{(1)}+f_{y,i}^{(1)}f_i,\\ y'''(t_i) & =f''(t_i,y_i) = f_{t,i}^{(2)}+2 f_{t,y,i}^{(1,1)}f_i+f_{y,i}^{(2)}f_i^2+f_{y,i}^{(1)}f_{t,i}^{(1)}+\left(f_{y,i}^{(1)}\right)^2 f_i,\\ y^{(iv)}(t_i) & = f'''(t_i,y_i) = f_{y,i}^{(3)} f_i^3+\left(4 f_{y,i}^{(1)} f_{y,i}^{(2)} +3 f_{t,y,i}^{(1,2)}\right)f_i^2\\ &\quad +\left((f_{y,i}^{(1)})^3+5 f_{t,y,i}^{(1,1)} f_{y,i}^{(1)}+3\left(f_{y,i}^{(2)} f_{t,i}^{(1)} + f_{t,y,i}^{(2,1)}\right)\right) f_i\\ & \quad +f_{t,i}^{(1)}\left((f_{y,i}^{(1)})^2+3 f_{t,y,i}^{(1,1)}\right)+f_{y,i}^{(1)} f_{t,i}^{(2)}+f_{t,i}^{(3)}. \end{align*} \] usando la notación: \[ \begin{align*} f(t_i,y_i) & =f_i,\\ \frac{\partial^j f}{\partial t^j}(t_i,y_i) & =f_{t,i}^{(j)},\\ \frac{\partial^j f}{\partial y^j}(t_i,y_i)& =f_{y,i}^{(j)},\\ \frac{\partial^{j+l} f}{\partial t^j\partial y^l}(t_i,y_i) & =f_{t,y,i}^{(j,l)} \end{align*} \]
Por tanto, \[ \begin{align*} y_{i+1} & = y_i +h f_i +\frac{h^2}{2} (f_{t,i}^{(1)}+f_{y,i}^{(1)}f_i)\\ & \quad +\frac{h^3}{6} \left(f_{t,i}^{(2)}+2 f_{t,y,i}^{(1,1)}f_i+f_{y,i}^{(2)}f_i^2+f_{y,i}^{(1)}f_{t,i}^{(1)}+\left(f_{y,i}^{(1)}\right)^2 f_i\right)\\ & \quad +\frac{h^4}{24} \left(f_{y,i}^{(3)} f_i^3+\left(4 f_{y,i}^{(1)} f_{y,i}^{(2)} +3 f_{t,y,i}^{(1,2)}\right)f_i^2 +\left((f_{y,i}^{(1)})^3+5 f_{t,y,i}^{(1,1)} f_{y,i}^{(1)}+3\left(f_{y,i}^{(2)} f_{t,i}^{(1)} + f_{t,y,i}^{(2,1)}\right)\right) f_i\right.\\ & \quad \left. +f_{t,i}^{(1)}\left((f_{y,i}^{(1)})^2+3 f_{t,y,i}^{(1,1)}\right)+f_{y,i}^{(1)} f_{t,i}^{(2)}+f_{t,i}^{(3)}\right)+O(h^5) \end{align*} \]
A continuación desarrollemos las funciones \(k_i\), \(i=1,2,3,4\) usando el desarrollo de Taylor de dos variables en un entorno del punto \((t_i,y_i)\):
\[ \begin{align*} k_1 & = f_i,\\ k_2 & = f\left(t_i+\frac{h}{2},y_i+\frac{h k_1}{2}\right)= f_i+\frac{h}{2}\left(f_{t,i}^{(1)}+f_i f_{y,i}^{(1)}\right) +\frac{h^2}{8}\left(f_{t,i}^{(2)}+2 f_i f_{t,y,i}^{(1,1)}+f_i^2 f_{y,i}^{(2)}\right)\\ & \quad +\frac{h^3}{48}\left(f_{t,i}^{(3)}+3 f_i^2 f_{t,y,i}^{(1,2)}+3 f_i f_{t,y,i}^{(2,1)}+f_i^3 f_{y,i}^{(3)}\right)+O(h^4),\\ k_3 & = f\left(t_i+\frac{h}{2},y_i+\frac{hk_2}{2}\right) = f_i + \frac{h}{2}\left(f_{t,i}^{(1)}+f_i f_{y,i}^{(1)}\right)\\ &\quad +\frac{h^2}{8}\left(f_{t,i}^{(2)}+2 f_i ((f_{y,i}^{(1)})^2+f_{t,y,i}^{(1,1)})+2 f_{t,i}^{(1)} f_{y,i}^{(1)}+f_i^2 f_{y,i}^{(2)}\right)\\ & \quad + \frac{h^3}{48}\left(f_{t,i}^{(3)}+3 f_i (2f_{y,i}^{(2)} f_{t,i}^{(1)}+4 f_{y,i}^{(1)} f_{t,y,i}^{(1,1)}+f_{t,y,i}^{(2,1)})+3 f_{y,i}^{(1)} f_{t,i}^{(2)}+3 f_i^2 \left(3f_{y,i}^{(1)} f_{y,i}^{(2)}+f_{t,y,i}^{(1,2)}\right)+6 f_{t,i}^{(1)} f_{t,y,i}^{(1,1)}+f_i^3 f_{y,i}^{(3)}\right)\\ & \quad + O(h^4),\\ k_4 & = f(t_i+h,y_i + hk_3)=f_i + h\left(f_{t,i}^{(1)}+f_i f_{y,i}^{(1)}\right)\\ & \quad + \frac{h^2}{2}\left(f_{t,i}^{(2)}+ f_i ((f_{y,i}^{(1)})^2+2f_{t,y,i}^{(1,1)})+f_{t,i}^{(1)} f_{y,i}^{(1)}+f_i^2 f_{y,i}^{(2)}\right)\\ & \quad + \frac{h^3}{24}\left(4f_{t,i}^{(3)}+6 f_i ((f_{y,i}^{(2)})^3 f_{t,i}^{(1)}+3 f_{y,i}^{(1)} f_{t,y,i}^{(1,1)}+2(f_{y,i}^{(2)}f_{t,i}^{(1)}+f_{t,y,i}^{(2,1)}))+3 f_{y,i}^{(1)} f_{t,i}^{(2)}+3 f_i^2 \left(5f_{y,i}^{(1)} f_{y,i}^{(2)}+4f_{t,y,i}^{(1,2)}\right)\right. \\ & \quad\ \left.+6 f_{t,i}^{(1)} ((f_{y,i}^{(1)})^2 +2f_{t,y,i}^{(1,1)})+4f_i^3 f_{y,i}^{(3)}\right)+ O(h^4) \end{align*} \]
Calculemos la expresión de \(\frac{h}{6}(k_1+2k_2+2k_3+k_4)\): \[ \begin{align*} \frac{h}{6}(k_1+2k_2+2k_3+k_4) & = h f_i +\frac{h^2}{2}\left(f_{t,i}^{(1)}+f_i f_{y,i}^{(1)}\right)+\frac{h^3}{6}\left(f_{t,i}^{(2)}+2 f_{t,y,i}^{(1,1)}f_i+f_{y,i}^{(2)}f_i^2+f_{y,i}^{(1)}f_{t,i}^{(1)}+\left(f_{y,i}^{(1)}\right)^2 f_i\right) \\ & +\frac{h^4}{24} \left(f_{y,i}^{(3)} f_i^3+\left(4 f_{y,i}^{(1)} f_{y,i}^{(2)} +3 f_{t,y,i}^{(1,2)}\right)f_i^2 +\left((f_{y,i}^{(1)})^3+5 f_{t,y,i}^{(1,1)} f_{y,i}^{(1)}+3\left(f_{y,i}^{(2)} f_{t,i}^{(1)} + f_{t,y,i}^{(2,1)}\right)\right) f_i\right.\\ & \quad \left. +f_{t,i}^{(1)}\left((f_{y,i}^{(1)})^2+3 f_{t,y,i}^{(1,1)}\right)+f_{y,i}^{(1)} f_{t,i}^{(2)}+f_{t,i}^{(3)}\right)+O(h^5). \end{align*} \] Observamos que los coeficientes de \(h\), \(h^2\), \(h^3\) y \(h^4\) coinciden con el desarrollo de Taylor de la función \(y_{i+1}=y(t_i+h)\). Por tanto, \[ h\tau_{i+1}(h)=y_{i+1} - y_i -\frac{h}{6}(k_1+2k_2+2k_3+k_4)=O(h^5), \] tal como queríamos ver.
INPUT valores inicial y final
\(a\), \(b\), entero
\(n\), condición inicial
\(y_0\) y función
\(f(t,y)\)Set
\(h=\frac{b-a}{n}\).Set
\(t=a\).Set
\(\mathbf{\hat{y}}=\mathbf{0}\). (Definimos inicialmente el vector de aproximaciones como
\(0\))Set
\(\hat{y}_1=y_0\). (Definimos la primera componente del vector de aproximaciones como la condición inicial
)For i=1,...,n
Set
\(k_1=f(t,\hat{y}_{i})\) (definimos los
\(k_i, i=1,2,3,4\))Set
\(k_2=f\left(t+\frac{h}{2},\hat{y}_{i}+\frac{hk_1}{2}\right)\)Set
\(k_3=f\left(t+\frac{h}{2},\hat{y}_{i}+\frac{hk_2}{2}\right)\)Set
\(k_4=f\left(t+h,\hat{y}_{i}+h k_3\right)\)Set
\(\hat{y}_{i+1} =\hat{y}_{i}+\frac{h}{6}(k_1+2k_2+2k_3+k_4)\) (Hallamos el valor \(\hat{y}(t_i)=\hat{y}(a+ih)\))Set
\(t=t+h\). (actualizamos el tiempo
\(t\))Print
\(\mathbf{\hat{y}}\) (Damos el vector de aproximaciones
).Recordemos que se trataba de aproximar la solución del siguiente problema de valores iniciales: \[ y'=f(t,y)=\frac{1+t}{1+y},\ 1\leq t\leq 3,\ y(1)=2, \] de solución exacta \(y(t)=\sqrt{t^2+2t+6}-1\).
Vamos a aplicarle el método de Runge-Kutta 4 para hallar una solución aproximada en el mallado siguiente usando \(h=0.1\).
La ecuación en diferencias a resolver es la siguiente: \(\hat{y}_{i+1} =\hat{y}_i+\frac{h}{6}(k_1+2k_2+2k_3+k_4)\), con: \[ \begin{align*} k_1 & = f(t_i,\hat{y}_i)=\frac{1+t_i}{1+\hat{y}_i},\\ k_2 & = f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{hk_1}{2}\right)=\frac{1+t_i+\frac{h}{2}}{1+\hat{y}_i+\frac{hk_1}{2}},\\ \\ k_3 & = f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{hk_2}{2}\right)=\frac{1+t_i+\frac{h}{2}}{1+\hat{y}_i+\frac{hk_2}{2}},\\ \\ k_4 & = f\left(t_i+h,\hat{y}_i+hk_3\right)=\frac{1+t_i+h}{1+\hat{y}_i+hk_3},\ \hat{y}_0=2. \end{align*} \]
Vamos a aplicarle el método de Runge-Kutta 4 para hallar una solución aproximada en el mallado siguiente usando \(h=0.1\): \[ t_i=1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3. \] * \(\hat{y}(1.1)\):
\[ \begin{align*} k_1 & = f(1,\hat{y}_0)=f(1,2)=\frac{1+1}{1+2}=0.6666667,\\ k_2 & = f\left(1+\frac{h}{2},\hat{y}_0+\frac{hk_1}{2}\right)=f\left(1+\frac{0.1}{2},2+\frac{0.1\cdot 0.6666667}{2}\right)=\frac{1+1+\frac{0.1}{2}}{1+2+\frac{0.1\cdot 0.6666667}{2}}=0.6758242,\\ \\ k_3 & =f\left(1+\frac{h}{2},\hat{y}_0+\frac{hk_2}{2}\right)= f\left(1+\frac{0.1}{2},2+\frac{0.1\cdot 0.6758242}{2}\right)=\frac{1+1+\frac{0.1}{2}}{1+2+\frac{0.1\cdot 0.6758242}{2}}=0.6757222,\\ \\ k_4 & = f(1+h,\hat{y}_0+h k_3)=f\left(1+0.1,2+0.1\cdot 0.6757222\right)=\frac{1+1+0.1}{1+2+0.1\cdot 0.6757222}=0.6845805,\\ \hat{y}(1.1) & =\hat{y}(1)+\frac{h}{6}(k_1+2k_2+2k_3+k_4)=2+\frac{0.1}{6}(0.6666667+2\cdot 0.6758242+2\cdot0.6757222+0.6845805)\\ & =2.0675723. \end{align*} \]
Y así sucesivamente.
La siguiente tabla muestra los valores de las soluciones aproximada y exacta en los puntos del mallado:
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
1 | 2 | 2 | 0 |
1.1 | 2.0675723 | 2.0675723 | \(5\cdot 10^{-10}\) |
1.2 | 2.1368774 | 2.1368774 | \(9.2\cdot 10^{-10}\) |
1.3 | 2.207803 | 2.207803 | \(1.3\cdot 10^{-9}\) |
1.4 | 2.2802439 | 2.2802439 | \(1.6\cdot 10^{-9}\) |
1.5 | 2.354102 | 2.354102 | \(1.8\cdot 10^{-9}\) |
1.6 | 2.4292856 | 2.4292856 | \(2\cdot 10^{-9}\) |
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
1.7 | 2.5057096 | 2.5057096 | \(2.1\cdot 10^{-9}\) |
1.8 | 2.5832946 | 2.5832946 | \(2.3\cdot 10^{-9}\) |
1.9 | 2.6619667 | 2.6619667 | \(2.3\cdot 10^{-9}\) |
2 | 2.7416574 | 2.7416574 | \(2.4\cdot 10^{-9}\) |
2.1 | 2.822303 | 2.822303 | \(2.5\cdot 10^{-9}\) |
2.2 | 2.9038443 | 2.9038443 | \(2.5\cdot 10^{-9}\) |
2.3 | 2.9862263 | 2.9862263 | \(2.5\cdot 10^{-9}\) |
\(t_i\) | \(\hat{y}_i\) | \(y_{i}\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|
2.4 | 3.069398 | 3.069398 | \(2.5\cdot 10^{-9}\) |
2.5 | 3.1533119 | 3.1533119 | \(2.5\cdot 10^{-9}\) |
2.6 | 3.237924 | 3.237924 | \(2.5\cdot 10^{-9}\) |
2.7 | 3.3231933 | 3.3231933 | \(2.5\cdot 10^{-9}\) |
2.8 | 3.4090815 | 3.4090815 | \(2.5\cdot 10^{-9}\) |
2.9 | 3.4955534 | 3.4955534 | \(2.5\cdot 10^{-9}\) |
3 | 3.5825757 | 3.5825757 | \(2.5\cdot 10^{-9}\) |
Vamos a generalizar el método de Runge Kutta 4 visto anteriormente.
Un método de Runge-Kutta general es un método de un paso donde la expresión de la ecuación en diferencias tiene la expresión siguiente: \(\hat{y}_{i+1}=\hat{y}_i+h\varphi(t_i,\hat{y}_i),\) donde \[ \begin{align*} \varphi(t_i,\hat{y}_i) & =\sum_{j=1}^J c_j k_j,\\ k_j & = f\left(t_i+h a_j,\hat{y}_i+h\sum_{l=1}^J b_{jl} k_l\right),\ j=1,\ldots,J. \end{align*} \] También suponemos que \(\displaystyle\sum_{l=1}^J b_{jl}=a_j\) de cara a simplificar los cálculos a la hora de calcular el orden de consistencia del método.
Analicemos la expresión anterior:
\(a_1\) | \(b_{11}\) | \(b_{12}\) | \(\ldots\) | \(b_{1J}\) |
\(a_2\) | \(b_{21}\) | \(b_{22}\) | \(\ldots\) | \(b_{2J}\) |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) |
\(a_J\) | \(b_{J1}\) | \(b_{J2}\) | \(\ldots\) | \(b_{JJ}\) |
\(c_{1}\) | \(c_{2}\) | \(\ldots\) | \(c_{J}\) |
Vamos a escribir el método de Euler modificado según la notación anterior: \(\hat{y}_{i+1}=\hat{y}_i+h\varphi(t_i,\hat{y}_i),\) con \[ \begin{align*} \varphi(t_i,\hat{y}_i) & =k_2,\\ k_1 & = f(t_i,\hat{y}_i),\\ k_2 & = f\left(t_i+\frac{h}{2},\hat{y}_i+\frac{h}{2}k_1\right). \end{align*} \]
Por tanto, el valor de \(J\) vale \(J=2\) y el tablero de Butcher vale en este caso:
\(0\) | \(0\) | \(0\) |
\(\frac{1}{2}\) | \(\frac{1}{2}\) | \(0\) |
\(0\) | \(1\) |
Como la matriz \(\mathbf{B}\) es triangular inferior con ceros en la diagonal, el método es explícito.
En el caso del método de Runge-Kutta 4, el valor de \(J\) vale \(J=4\) y el tablero de Butcher vale en este caso:
\(0\) | \(0\) | \(0\) | \(0\) | \(0\) |
\(\frac{1}{2}\) | \(\frac{1}{2}\) | \(0\) | \(0\) | \(0\) |
\(\frac{1}{2}\) | \(0\) | \(\frac{1}{2}\) | \(0\) | \(0\) |
\(1\) | \(0\) | \(0\) | \(1\) | \(0\) |
\(\frac{1}{6}\) | \(\frac{1}{3}\) | \(\frac{1}{3}\) | \(\frac{1}{6}\) |
Como la matriz \(\mathbf{B}\) es triangular inferior con ceros en la diagonal, el método es explícito.
Si nos fijamos en los métodos de Euler modificado y de Runge-Kutta 4, la suma de las componentes del vector \(\mathbf{c}\) vale \(1\). La proposición siguiente nos dice que siempre suman \(1\) si queremos que el método sea consistente:
Un método de Runge-Kutta es consistente si, y sólo si, \(\displaystyle\sum_{j=1}^J c_j=1\).
Recordemos que un método numérico \[ \hat{y}_{i+1}=\hat{y}_i +h\varphi(t_i,\hat{y}_i),\ \hat{y}_0=y_0, \] es consistente si \[ \lim_{h\to 0}\tau_{i+1}(h)=\lim_{h\to 0}\frac{\hat{y}_{i+1}-\hat{y}_i}{h}-\varphi(t_i,\hat{y}_i)=0. \] para todo \(i=0,\ldots,n\).
En el caso de un métode de Runge-Kutta, obtenemos: \[ \begin{align*} \lim_{h\to 0}\tau_{i+1}(h) & =\lim_{h\to 0}\frac{y_{i+1}-y_i}{h}-\varphi(t_i,y_i)=\lim_{h\to 0}\frac{y_{i+1}-y_i}{h}-\sum_{j=1}^J c_j k_j\\ & =\lim_{h\to 0}f(\xi_i,y(\xi_i))-\sum_{j=1}^J c_j f\left(t_i+h a_j,\hat{y}_i+h\sum_{l=1}^J b_{jl} k_l\right), \end{align*} \] donde recordemos que \(y_i=y(t_i)\) y \(\xi_i\in (t_i,t_{i+1})\). Por tanto, si \(h\to 0\), \(\xi_i\to t_i\).
Calculando el límite anterior, obtenemos: \[ \lim_{h\to 0}\tau_{i+1}(h)= f(t_i,y_i)-\left(\sum_{j=1}^J c_j\right)f(t_i,y_i)=f(t_i,y_i)\left(1-\sum_{j=1}^J c_j\right). \] Por tanto, el método es consistente, o \(\displaystyle\lim_{h\to 0}\tau_{i+1}(h)=0\) si, y sólo si \(\displaystyle 1-\sum_{j=1}^J c_j=0\), o \(\displaystyle\sum_{j=1}^J c_j=1\), tal como queríamos ver.
En el caso de los métodos de Runge-Kutta, la convergencia y la consistencia son equivalentes:
Si un método de Runge-Kutta es convergente, es consistente.
Si un método de Runge-Kutta es consistente, explícito y además la función \(f\) del problema de valores iniciales \(y'=f(t,y),\ a\leq t\leq b,\ y(a)=y_0\) verifica la condición de Lipschitz respecto la segunda variable con constante de Lipschitz \(L\) para valores de \(h\) suficientemente pequeños, el método es convergente con el mismo orden que el orden de consistencia.
Veamos que si el método es convergente, entonces es consistente.
Si el método de Runge-Kutta es convergente, en particular lo será para el problema de valores inicial trivial: \[ y'=1,\ 0\leq t\leq b,\ y(0)=0, \] cuya solución exacta es \(y(t)=t\).
Si aplicamos un método de Runge-Kutta al problema anterior, la ecuación en diferencias será la siguiente: \[ \hat{y}_{i+1}=\hat{y}_i + h\sum_{j=1}^J c_j, \] ya que \(f(t,y)=1\) para todo valor de \(t\) e \(y\).
Usando que \(\hat{y}_0 =0\), se puede demostrar por inducción de forma facil que \(\displaystyle\hat{y}_i =i h\sum_{j=1}^J c_j = t_i\sum_{j=1}^J c_j\).
Como el método es convergente, \[ \lim_{h\to 0}\hat{y}_i-y_i =\lim_{h\to 0}\hat{y}_i-t_i =\lim_{h\to 0}t_i\sum_{j=1}^J c_j-t_i=\lim_{h\to 0}t_i\left(1-\sum_{j=1}^J c_j\right)=0, \] para todo valor de \(t_i\).
En particular, tiene que ser cierto para \(t_n=b\): \[ \lim_{h\to 0}t_n\left(1-\sum_{j=1}^J c_j\right)=b \lim_{h\to 0}\left(1-\sum_{j=1}^J c_j\right)=0, \] lo que implica que \(\displaystyle 1-\sum_{j=1}^J c_j=0\), o \(\displaystyle\sum_{j=1}^J c_j=1\) y, usando la proposición anterior, tenemos que el método es consistente.
Supongamos que el método es consistente, explícito y que la función \(f\) del problema de valores iniciales \(y'=f(t,y),\ a\leq t\leq b,\ y(a)=y_0\) verifica la condición de Lipschitz respecto la segunda variable con constante de Lipschitz \(L\).
Entonces el método de Runge-Kutta tendrá la forma siguiente: \(\hat{y}_{i+1}=\hat{y}_i+h\varphi(t_i,\hat{y}_i),\) donde \[ \begin{align*} \varphi(t_i,\hat{y}_i) & =\sum_{j=1}^J c_j k_j,\\ k_1 & = f(t,\hat{y}_i),\\ k_j & = f\left(t_i+h a_j,\hat{y}_i+h\sum_{l=1}^{j-1} b_{jl} k_l\right),\ j=2,\ldots,J. \end{align*} \] Veamos que las funciones \(k_j\) verifican la condición de Lipschitz respecto la segunda variable con una constante de Lipschit \(L_j\):
\(j=2\): sean \(y_i,\tilde{y}_i\). Entonces: \[ \begin{align*} |k_2(t_i,y_i)-k_2(t_i,\tilde{y}_i)| & =\left|f\left(t_i+h a_1,y_i+h b_{11} k_1(t_i,y_i)\right)-f\left(t_i+h a_1,\tilde{y}_i+h b_{11} k_1(t_i,\tilde{y}_i\right)\right|\\ & \leq L\left|y_i+h b_{11} k_1(t_i,y_i)-\tilde{y}_i-h b_{11} k_1(t_i,\tilde{y}_i)\right|\\ & \leq L(|y_i-\tilde{y}_i|+h L |b_{11}||y_i-\tilde{y}_i|)=L(1+hL|b_{11}|)|y_i-\tilde{y}_i|. \end{align*} \] Por tanto, \(k_2\) verifica la condición de Lipschitz respecto la segunda variable con constante de Lipschitz \(L_2=L(1+hL|b_{11}|)\).
\(j\). Supongamos, siguiendo un proceso inductivo, que las funciones \(k_l\) verifican la condición de Lipschitz respecto la segunda variable con constante de Lipschitz \(L_l\), \(l=1,\ldots,j-1\). Entonces: \[ \begin{align*} |k_j(t_i,y_i)-k_j(t_i,\tilde{y}_i)| & =\left|f\left(t_i+h a_j,y_i+h\sum_{l=1}^{j-1} b_{jl} k_l(t_i,y_i)\right)-f\left(t_i+h a_j,\tilde{y}_i+h\sum_{l=1}^{j-1} b_{jl} k_l(t_i,\tilde{y}_i)\right)\right|\\ & \leq L\left|y_i+h\sum_{l=1}^{j-1} b_{jl} k_l(t_i,y_i)-\tilde{y}_i-h\sum_{l=1}^{j-1} b_{jl} k_l(t_i,\tilde{y}_i)\right| \\ & \leq L |y_i-\tilde{y}_i| \left(1+h\sum_{l=1}^{j-1} |b_{jl}| L_l\right), \end{align*} \] es decir la función \(k_j\) verifica la condición de Lipschitz respecto la segunda variable con constante de Lipschitz \(\displaystyle L_j= L\left(1+h\sum_{l=1}^{j-1} |b_{jl}| L_l\right)\).
Veamos por último que la función \(\varphi(t_i,y_i)\) verifica la condición de Lipschitz respecto la segunda variable: \[ |\varphi(t_i,y_i)-\varphi(t_i,\tilde{y}_i)|=\left|\sum_{j=1}^{J} c_j k_j(t_i,y_i)-\sum_{j=1}^{J} c_j k_j(t_i,\tilde{y}_i)\right|\leq \left(\sum_{j=1}^J |c_j| L_j\right) |y_i-\tilde{y}_i|. \] La constante de Lipschitz de la función \(\varphi\) vale \(\displaystyle\sum_{j=1}^J |c_j| L_j\).
Usando el Teorema que nos daba la relación entre la consistencia y la convergencia de un método de un paso, podemos afirmar que, tomando un valor de \(h\) suficientemente pequeño, el valor \(\displaystyle h\sum_{j=1}^J |c_j| L_j<1\), y por tanto, como el método de Runge-Kutta es consistente, será convergente y además del mismo orden que el orden de consistencia.
Hemos visto que un método de Runge-Kutta es consistente si, y sólo si, \(\displaystyle\sum_{j=1}^J c_j=1\).
Veamos qué condiciones aparecen si queremos consistencia de un determinado orden. Concretamente, veamos el resultado siguiente:
Consideremos un método de Runge-Kutta \(\hat{y}_{i+1}=\hat{y}_i+h\varphi(t_i,\hat{y}_i),\) donde \[ \begin{align*} \varphi(t_i,\hat{y}_i) & =\sum_{j=1}^J c_j k_j,\\ k_j & = f\left(t_i+h a_j,\hat{y}_i+h\sum_{l=1}^{J} b_{jl} k_l\right),\ j=1,\ldots,J, \end{align*} \] con \(\displaystyle a_j=\sum_{l=1}^J b_{jl}\) para resolver el problema de valores iniciales \[ y'=f(t,y),\ a\leq t\leq b,\ y(a)=y_0. \]
Entonces,
La condición 1. ya está demostrada en una proposición anterior.
Supongamos ahora que el método de Runge-Kutta tiene un orden de convergencia \(k\), con \(k\geq 2\).
Entonces: \[ \tau_{i+1}=\frac{y_{i+1}-y_i}{h}-\sum_{j=1}^J c_j k_j = O(h^k), \] donde recordemos que \(y_i=y(t_i)\) siendo \(y(t)\) la solución exacta del problema de valores iniciales.
Si desarrollamos por Taylor la función \(y_{i+1}=y(t_{i+1})=y(t_i+h)\) alrededor de \(t=t_i\) obtenemos lo siguiente (ver la demostración de que el método de Runge-Kutta 4 tiene orden \(4\):) \[ \begin{align*} y_{i+1} & = y_i +h f_i +\frac{h^2}{2} (f_{t,i}^{(1)}+f_{y,i}^{(1)}f_i)\\ & \quad +\frac{h^3}{6} \left(f_{t,i}^{(2)}+2 f_{t,y,i}^{(1,1)}f_i+f_{y,i}^{(2)}f_i^2+f_{y,i}^{(1)}f_{t,i}^{(1)}+\left(f_{y,i}^{(1)}\right)^2 f_i\right)+O(h^4) \end{align*} \]
Entonces: \[ \frac{y_{i+1}-y_i}{h} =f_i +\frac{h}{2} (f_{t,i}^{(1)}+f_{y,i}^{(1)}f_i) +\frac{h^2}{6} \left(f_{t,i}^{(2)}+2 f_{t,y,i}^{(1,1)}f_i+f_{y,i}^{(2)}f_i^2+f_{y,i}^{(1)}f_{t,i}^{(1)}+\left(f_{y,i}^{(1)}\right)^2 f_i\right)+O(h^3) \]
Si desarrollamos por Taylor la función de dos variables \(\displaystyle\sum_{j=1}^J c_j k_j\) alrededor del punto \((t_i,y_i)\) obtenemos: \[ \begin{align*} \sum_{j=1}^J c_j k_j & = \sum_{j=1}^J c_j f\left(t_i+h a_j,y_i+h\sum_{l=1}^{J} b_{jl} k_l\right)=\sum_{j=1}^J c_j \left(f_i+f_{t,i}^{(1)} h a_j+f_{y,i}^{(1)} h \sum_{l=1}^J b_{jl} k_l\right.\\ & \left. +\frac{1}{2} h^2 f_{t,i}^{(2)} a_j^2+h^2 f_{t,y,i}^{(1,1)} a_j\sum_{l=1}^J b_{jl}k_l+\frac{1}{2}h^2 f_{y,i}^{(2)}\left(\sum_{l=1}^J b_{jl}k_l\right)^2 \right)+O(h^3) \\ & =\sum_{j=1}^J c_j \left(f_i+f_{t,i}^{(1)} h a_j+f_{y,i}^{(1)} h \sum_{l=1}^J b_{jl} \left(f_i+f_{t,i}^{(1)} h a_l+f_{y,i}^{(1)} h\sum_{s=1}^J b_{ls} k_s\right) \right.\\ &\left.+\frac{1}{2} h^2 f_{t,i}^{(2)} a_j^2+h^2 f_{t,y,i}^{(1,1)} a_j\sum_{l=1}^J b_{jl}f_i+\frac{1}{2}h^2f_{y,i}^{(2)}\left(\sum_{l=1}^J b_{jl}f_i\right)^2 \right)+O(h^3)\\ & =\left(\sum_{j=1}^J c_j\right) f_i+f_{t,i}^{(1)} h \sum_{j=1}^J a_j c_j+f_{y,i}^{(1)} h f_i \sum_{j=1}^J a_j c_j +f_{t,i}^{(1)} f_{y,i}^{(1)} h^2 \sum_{j,l=1}^J b_{jl}a_l c_j +(f_{y,i}^{(1)})^2 f_i h^2\sum_{j,l=1}^J b_{jl} a_l c_j \\ &+\frac{1}{2} h^2 f_{t,i}^{(2)} \sum_{j=1}^J a_j^2 c_j +h^2 f_{t,y,i}^{(1,1)} f_i\sum_{j=1}^J a_j^2 c_j +\frac{1}{2}h^2f_{y,i}^{(2)}f_i^2\sum_{j=1}^J a_j^2 c_j+O(h^3) \end{align*} \]
Igualamos los términos de \(h^k\), para \(k=0,1,2\):
Consistencia de orden \(1\): el coeficiente de \(h^0\) se debe anular: \(\displaystyle\sum_{j=1}^J c_j =1\), condición que ya conocíamos.
Consistencia de orden \(k=2\): el coeficiente de \(h\) se debe anular:
La demostración anterior nos da un algoritmo para verificar órdenes de consistencia mayores. Sin embargo, la complejidad va aumentando a medida que el órden a verificar es mayor.
La condición de orden de consistencia \(2\), \(\displaystyle \sum_{j=1}^J a_j c_j=\frac{1}{2}\), puede escribirse matricialmente \(\mathbf{c}^\top\mathbf{a}=\frac{1}{2}\), donde \(\mathbf{a}\) sería la primera columna del tablero de Butcher y \(\mathbf{c}\), la última fila de dicho tablero.
Apliquemos la proposición anterior al método de Runge-Kutta 4 para verificar que dicho método tiene órden de convergencia como mínimo \(3\).
Recordemos el tablero de Butcher de dicho método:\(0\) | \(0\) | \(0\) | \(0\) | \(0\) |
\(\frac{1}{2}\) | \(\frac{1}{2}\) | \(0\) | \(0\) | \(0\) |
\(\frac{1}{2}\) | \(0\) | \(\frac{1}{2}\) | \(0\) | \(0\) |
\(1\) | \(0\) | \(0\) | \(1\) | \(0\) |
\(\frac{1}{6}\) | \(\frac{1}{3}\) | \(\frac{1}{3}\) | \(\frac{1}{6}\) |
\[ \begin{align*} \sum_{j=1}^4 a_j^2 c_j & = \mathbf{c}^\top\mathbf{a}^2=\frac{1}{6}\cdot 0^2+ \frac{1}{3}\cdot \left(\frac{1}{2}\right)^2+\frac{1}{3}\cdot \left(\frac{1}{2}\right)^2+\frac{1}{6}\cdot 1^2=\frac{1}{12}+\frac{1}{12}+\frac{1}{6}=\frac{1}{3},\\ \sum_{j,l=1}^J b_{jl}a_l c_j & = \mathbf{c}^T\mathbf{B}\mathbf{a}=\begin{bmatrix}\frac{1}{6}&\frac{1}{3}&\frac{1}{3}&\frac{1}{6} \\\end{bmatrix}\cdot\begin{bmatrix}0&0&0&0 \\\frac{1}{2}&0&0&0 \\0&\frac{1}{2}&0&0 \\0&0&1&0 \\\end{bmatrix}\cdot\begin{bmatrix}0 \\\frac{1}{2} \\\frac{1}{2} \\1 \\\end{bmatrix}=\begin{bmatrix}\frac{1}{6}&\frac{1}{3}&\frac{1}{3}&\frac{1}{6} \\\end{bmatrix}\cdot\begin{bmatrix}0 \\0 \\\frac{1}{4} \\\frac{1}{2} \\\end{bmatrix}\\ & =\frac{1}{6}\cdot 0+\frac{1}{3}\cdot 0+\frac{1}{3}\cdot \frac{1}{4}+\frac{1}{6}\cdot \frac{1}{2}=\frac{1}{12}+\frac{1}{12}=\frac{1}{6}. \end{align*} \]
Todos los métodos numéricos para resolver el problema de valores iniciales \(y'=f(t,y),\ a\leq t\leq b,\ y(a)=y_0\) vistos hasta ahora se basan en introducir una ecuación en diferencias \(\hat{y}_{i+1}=\hat{y}_i +h\varphi(t,\hat{y}_i)\) con \(\hat{y}_0=y_0\) y hallar las aproximaciones \(\hat{y}_i =\hat{y}(t_i)=\hat{y}(a+h i)\), donde \(h\) es el paso definido por \(h=\frac{b-a}{n}\), siendo \(n\) el número de aproximaciones a realizar.
Dicho paso es fijo para todas las aproximaciones \(\hat{y}_i\), \(i=0,\ldots,n\).
En esta nueva sección vamos a considerar que el paso \(h\) puede cambiar para cada tiempo \(t_i\) dependiendo del comportamiento que tenga la solución aproximada \(\hat{y}(t_i)\) en dicho valor del tiempo \(t_i\).
La idea intuitiva es que si, fijado un paso \(h\), el error local de truncamiento en el tiempo \(t_i\), \(\tau_{i+1}(h)\), es grande, significa que hemos de avanzar con “pies de plomo” con pasos \(h\) pequeños; sin embargo, si el error local de truncamiento en el tiempo \(t_i\), \(\tau_{i+1}(h)\), es pequeño, podemos avanzar con pasos \(h\) relativamente grandes ya que tenemos margen para considerar dichos pasos.
Los algoritmos numéricos que tienen en cuenta el error local de truncamiento para calcular el paso \(h\) en cada tiempo \(t_i\) se denominan adaptativos y son los que introduciremos en esta sección.
Por tanto, no sabremos a priori los tiempos \(t_i\) donde vamos a calcular las aproximaciones \(\hat{y}_i\) sino que éstos se irán obteniendo dependiendo de los errores locales de truncamiento \(\tau_{i+1}(h)\) en el tiempo actual \(t_i\) calculando los pasos \(h\) “óptimos” en cada tiempo \(t_i\).
Concretamente, el algoritmo para calcular la aproximación final \(\hat{y}(b)\) en el tiempo final \(t=b\) sería el siguiente:
Como podemos observar en el algoritmo anterior, el punto clave es estimar el error local de truncamiento \(|\tau_t(qh)|\) y ver si éste es o no menor que la tolerancia permitida \(\epsilon\).
Para estimar dicho error local de truncamiento consideramos dos métodos numéricos, \[ \begin{align*} \hat{y}_{i+1} & =\hat{y}_i +h\varphi(t_i,\hat{y}_i),\\ \tilde{y}_{i+1} & = \tilde{y}_i +h\tilde{\varphi}(t_i,\tilde{y}_i), \end{align*} \] el primero \(\hat{y}_i\), con un orden de consistencia \(k\) y el segundo, \(\tilde{y}_i\), con un orden de consistencia \(k+1\).
Por tanto, si \(y(t)\) es la solución exacta del problema de valores iniciales, podemos escribir: \[ \begin{align*} y(t_i+h) & =y(t_i)+h \varphi(t_i,y(t_i))+ O(h^{k+1}),\\ y(t_i+h) & =y(t_i)+h \tilde{\varphi}(t_i,y(t_i))+ O(h^{k+2}). \end{align*} \]
Entonces, si \(\tau_{i+1}(h)\) es el error local de truncamiento del primer método y considerando que \(y(t_i)\approx \hat{y}_i\), \[ \begin{align*} \tau_{i+1}(h) & =\frac{y(t_i+h)-y(t_i)}{h}-\varphi(t_i,y(t_i))=\frac{y(t_i+h)-\hat{y}_i}{h}-\varphi(t_i,\hat{y}_i)\\ & = \frac{y(t_{i+1})-(\hat{y}_i +h\varphi(t_i,\hat{y}_i))}{h}=\frac{1}{h}(y(t_{i+1})-\hat{y}_{i+1}). \end{align*} \] De la misma manera, si \(\tilde{\tau}_{i+1}(h)\) es el error local de truncamiento del segundo método y considerando que \(y(t_i)\approx \tilde{y}_i\), \[ \tilde{\tau}_{i+1}(h)=\frac{1}{h}(y(t_{i+1})-\tilde{y}_{i+1}) \]
Como consecuencia, \[ \begin{align*} \tau_{i+1}(h) & = \frac{1}{h}(y(t_{i+1})-\hat{y}_{i+1})=\frac{1}{h}((y(t_{i+1})-\tilde{y}_{i+1})+(\tilde{y}_{i+1}-\hat{y}_{i+1}))\\ & = \tilde{\tau}_{i+1}(h)+\frac{1}{h}(\tilde{y}_{i+1}-\hat{y}_{i+1}). \end{align*} \] Ahora bien, como \(\tau_{i+1}(h)=O(h^{k})\) y \(\tilde{\tau}_{i+1}(h)=O(h^{k+1})\) la “parte dominante” de la expresión anterior de \(\tau_{i+1}(h)\) viene de \(\frac{1}{h}(\tilde{y}_{i+1}-\hat{y}_{i+1})\) ya que el otro sumando tiene orden superior \(O(h^{k+1})\): \[ \tau_{i+1}(h)\approx \frac{1}{h}(\tilde{y}_{i+1}-\hat{y}_{i+1}). \] Fijémonos que la expresión anterior nos permite estimar el valor del error local de truncamiento del primer método ya que la parte de la derecha es computable a partir de los dos métodos considerados.
Como \(\tau_{i+1}(h)=O(h^k)\), existe una constante \(C\) tal que \(\tau_{i+1}(h)\approx C h^k\).
A continuación consideramos el paso \(qh\). Aplicando la expresión anterior que nos da el error local de truncamiento pero ahora para \(qh\), obtenemos: \[ \tau_{i+1}(qh)\approx C (qh)^k = q^k C h^k \approx q^k\tau_{i+1}(h)\approx \frac{q^k}{h}(\tilde{y}_{i+1}-\hat{y}_{i+1}). \] Recordemos que queremos calcular \(q\) tal que \(|\tau_{i+1}(qh)|\leq \epsilon\), siendo \(\epsilon\) la tolerancia permitida: \[ |\tau_{i+1}(qh)|\leq \epsilon,\ \Rightarrow \frac{q^k}{h}|\tilde{y}_{i+1}-\hat{y}_{i+1}|\leq \epsilon,\ \Rightarrow q\leq\left(\frac{\epsilon h} {|\tilde{y}_{i+1}-\hat{y}_{i+1}|}\right)^{\frac{1}{k}}. \]
La expresión anterior nos dice que
Para aplicar el método descrito anteriormente, tenemos que elegir dos métodos numéricos para resolver el problema de valores iniciales \(y'=f(t,y),\ a\leq t\leq b,\ y(a)=y_0\).
Si los métodos elegidos son un método de Runge-Kutta de orden de consistencia \(4\), \(O(h^4)\) y un método de Runge-Kutta con orden de consistencia \(5\), \(O(h^5)\), el método se denomina método de Runge-Kutta-Fehlberg.
Concretamente, las ecuaciones en diferencias de los métodos numéricos considerados son las siguientes: \[ \begin{align*} \hat{y}_{i+1} & = \hat{y}_i +h\left(\frac{25}{216}k_1+\frac{1408}{2565}k_3+\frac{2197}{4104}k_4-\frac{1}{5}k_5\right),\\ \tilde{y}_{i+1} & = \hat{y}_i +h\left(\frac{16}{135}k_1+\frac{6656}{12825}k_3+\frac{28561}{56430}k_4-\frac{9}{50}k_5+\frac{2}{55}k_6\right), \end{align*} \]
con \[ \begin{align*} k_1 & = f(t_i,\hat{y}_i),\\ k_2 & = f\left(t_i+\frac{h}{4},\hat{y}_i +\frac{h}{4}k_1\right),\\ k_3 & = f\left(t_i+\frac{3h}{8},\hat{y}_i + h\left(\frac{3}{32}k_1+\frac{9}{32}k_2\right)\right),\\ k_4 & = f\left(t_i +\frac{12h}{13},\hat{y}_i+h\left(\frac{1932}{2197}k_1-\frac{7200}{2197}k_2+\frac{7296}{2197}k_3\right)\right),\\ k_5 & = f\left(t_i+h,\hat{y}_i +h\left( \frac{439}{216}k_1-8k_2+\frac{3680}{513}k_3-\frac{845}{4104}k_4\right)\right),\\ k_6 & = f\left(t_i+\frac{h}{2},\hat{y}_i+h\left( -\frac{8}{27}k_1+2k_2-\frac{3544}{2565}k_3+\frac{1859}{4104}k_4-\frac{11}{40}k_5\right)\right). \end{align*} \]
Ejercicio
Demostrar que se puede obtener la siguiente expresión del valor absoluto de la estimación del error local de truncamiento que llamaremos \(R\): \[ |\tau_{i+1}(h)|\approx R=\left|\frac{1}{360}k_1-\frac{128}{4275}k_3-\frac{2197}{75240}k_4+\frac{1}{50}k_5+\frac{2}{55}k_6\right|. \]
Indicación: considerar las expresiones de \(\hat{y}_{i+1}\) y \(\tilde{y}_{i+1}\) en función de los \(k_j\), \(j=1,2,3,4,5,6\) y realizar la operación siguiente: \[ R= \frac{1}{h}|\tilde{y}_{i+1}-\hat{y}_{i+1}|. \] Como \(\hat{y}_i\) se simplifica, os quedará una combinación lineal de las \(k_j\), \(j=1,2,3,4,5,6\).
Debido a que, para deducir el algoritmo, hemos hecho las aproximaciones \(y(t_i)\approx \hat{y}_i\) y \(y(t_i)\approx \tilde{y}_i\), se considera la siguiente expresión “ajustada y conservadora” del valor de \(q\): \[ q = \left(\frac{\epsilon h} {2|\tilde{y}_{i+1}-\hat{y}_{i+1}|}\right)^{\frac{1}{4}}\approx 0.84\left(\frac{\epsilon h} {|\tilde{y}_{i+1}-\hat{y}_{i+1}|}\right)^{\frac{1}{4}}= 0.84\left(\frac{\epsilon}{R}\right)^{\frac{1}{4}}. \]
INPUT valores inicial y final
\(a\), \(b\), paso mínimo
\(h_\min\), paso máximo
\(h_\max\), tolerancia permitida
\(TOL\) condición inicial
\(y_0\) y función
\(f(t,y)\)Set
\(t=a\). (Definimos el valor de \(t\) como el tiempo inicial \(a\))Set
\(\hat{y}=y_0\). (Definimos el valor aproximado en el tiempo inicial como \(y_0\))Set
\(h=h_\max\). (Consideramos el valor de \(h\) como el \(h\) máximo y lo iremos ajustando)While
\(t\leq b\) (mientras el tiempo actual \(t\) no sobrepase el tiempo final, vamos avanzando)
Set
\(k_1=f(t,\hat{y})\) (definimos los
\(k_i, i=1,2,3,4,5,6\))Set
\(k_2=f\left(t+\frac{h}{4},\hat{y}+\frac{h}{4}k_1\right)\)Set
\(k_3=f\left(t+\frac{3h}{8},\hat{y}+ h\left(\frac{3}{32}k_1+\frac{9}{32}k_2\right)\right)\)Set
\(k_4=f\left(t +\frac{12h}{13},\hat{y}+h\left(\frac{1932}{2197}k_1-\frac{7200}{2197}k_2+\frac{7296}{2197}k_3\right)\right)\)Set
\(k_5=f\left(t+h,\hat{y}+h\left( \frac{439}{216}k_1-8k_2+\frac{3680}{513}k_3-\frac{845}{4104}k_4\right)\right)\)Set
\(k_6=f\left(t+\frac{h}{2},\hat{y}+h\left( -\frac{8}{27}k_1+2k_2-\frac{3544}{2565}k_3+\frac{1859}{4104}k_4-\frac{11}{40}k_5\right)\right)\)Set
\(R=\left|\frac{1}{360}k_1-\frac{128}{4275}k_3-\frac{2197}{75240}k_4+\frac{1}{50}k_5+\frac{2}{55}k_6\right|\) (Calculamos la estimación de \(|\tau_{i+1}(h)|\))If
\(R\leq TOL\) (si la estimación de \(|\tau_{i+1}(h)|\) es menor que la tolerancia, aceptamos la aproximación y avanzamos)
Set
\(t=t+h\).Set
\(\hat{y}= \hat{y}+h\left(\frac{25}{216}k_1+\frac{1408}{2565}k_3+\frac{2197}{4104}k_4-\frac{1}{5}k_5\right)\).Set
\(q=0.84\cdot (TOL/R)^{\frac{1}{4}}\) (Vamos a ajustar el paso \(h\))If
\(q\leq 0.1\) (si \(q\) es muy pequeño, consideramos el paso \(h\) como \(0.1\cdot h\))
Set
\(h=0.1\cdot h\).Else
If
\(q\geq 4\) (si \(q\) es muy grande, consideramos como \(h\), \(4h\) sin superar \(h_\max\))
Set
\(h=\min\{4\cdot h,h_\max\}\).Else
Set
\(h=\min\{q\cdot h,h_\max\}\).If
\(t+h > b\) (Comprobamos si el “próximo” tiempo supera el tiempo final \(t=b\))
Set
\(h=b-t\) (Si es el caso, ajustamos el paso \(h\) para llegar exactamente a \(t=b\))Else
(si el “próximo” tiempo no supera el tiempo final \(t=b\), miramos si es porque el paso \(h\) es demasiado pequeño)
If
\(h<h_\min\)
Print
Paso
\(h\) demasiado pequeño. El algoritmo no funciona
.End
(Acabamos).If
\(t=b\) (Comprobamos si hemos llegado al tiempo final \(t=b\))
Print
\(\hat{y}\) (si es el caso damos el valor \(\hat{y}(b)\))Consideremos el siguiente problema de valores iniciales: \[ y'=f(t,y)=t\mathrm{e}^{3t}-2y,\ 0\leq t\leq 1,\ y(0)=0, \] de solución exacta \(y(t)=\frac{1}{5}t\mathrm{e}^{3t}-\frac{1}{25}\mathrm{e}^{3t}+\frac{1}{25}\mathrm{e}^{-2t}\).
Vamos a aplicar el método de Runge-Kutta-Fehlberg para calcular la solución aproximada \(\hat{y}(1)\) considerando \(h_\min =0.01\), \(h_\max=0.25\) y una tolerancia \(\epsilon =0.00001\).
Paso 1. Hacemos \(t=0\), \(h=0.25\) y \(\hat{y}= 0\).
Paso 2. Calculamos los valores \(k_i\): \[ \begin{align*} k_1 & = f(t,\hat{y})=0\cdot \mathrm{e}^{3\cdot0}-2\cdot 0=0,\\ k_2 & =f\left(t+\frac{h}{4},\hat{y}+\frac{h}{4} k_1\right)=\left(0+\frac{0.25}{4}\right)\cdot \mathrm{e}^{3\cdot\left(0+\frac{0.25}{4}\right)}-2\cdot \left(0 +\frac{0.25}{4}\cdot 0\right)=0.0753894,\\ k_3 & =f\left(t+\frac{3h}{8},\hat{y}+ h\left(\frac{3}{32}k_1+\frac{9}{32}k_2\right)\right)\\ & =\left(0+\frac{3\cdot0.25}{8}\right)\cdot \mathrm{e}^{3\cdot\left(0+\frac{3\cdot 0.25}{8}\right)}-2\cdot\left(0+0.25\cdot\left(\frac{3\cdot0}{32}+\frac{9\cdot0.0753894}{32}\right)\right)=0.1135969, \end{align*} \]
Paso 5. Vamos a calcular el nuevo paso \(h\). En primer lugar, calculamos \(q\): \[ q=0.84\cdot\left(\frac{\epsilon}{R}\right)^{\frac{1}{4}}=0.84\cdot\left(\frac{0.00001}{0.0001012}\right)^{\frac{1}{4}}=0.4709946. \] Como \(q\) no es demasiado pequeño \(q\not\leq 0.1\), ni demasiado grande \(q\not\geq 4\), el nuevo paso \(h\) será \(q\cdot h =0.4709946\cdot 0.25=0.1177486.\)
Paso 6. Miramos si \(t+h>b\), supera el tiempo final \(b=1\): \[ 0+0.1177486=0.1177486 \not > 1, \] vemos que no. Entonces volvemos al paso 1 con el nuevo \(h\) y volvemos a empezar.
Paso 1. Hacemos \(t=0\), \(h=0.1177486\) y \(\hat{y}= 0\).
Paso 2. Calculamos los valores \(k_i\): \[ \begin{align*} k_1 & = f(t,\hat{y})=0\cdot \mathrm{e}^{3\cdot0}-2\cdot 0=0,\\ k_2 & =f\left(t+\frac{h}{4},\hat{y}+\frac{h}{4} k_1\right)=\left(0+\frac{0.1177486}{4}\right)\cdot \mathrm{e}^{3\cdot\left(0+\frac{0.1177486}{4}\right)}-2\cdot \left(0 +\frac{0.1177486}{4}\cdot 0\right)=0.032155,\\ k_3 & =f\left(t+\frac{3h}{8},\hat{y}+ h\left(\frac{3}{32}k_1+\frac{9}{32}k_2\right)\right)\\ & =\left(0+\frac{3\cdot0.1177486}{8}\right)\cdot \mathrm{e}^{3\cdot\left(0+\frac{3\cdot 0.1177486}{8}\right)}-2\cdot\left(0+0.1177486\cdot\left(\frac{3\cdot0}{32}+\frac{9\cdot0.032155}{32}\right)\right)=0.0482803,\\ k_4 & =f\left(t +\frac{12h}{13},\hat{y}+h\left(\frac{1932}{2197}k_1-\frac{7200}{2197}k_2+\frac{7296}{2197}k_3\right)\right)\\ & = \left(0+\frac{12\cdot0.1177486}{13}\right)\cdot \mathrm{e}^{3\cdot\left(0+\frac{12\cdot 0.1177486}{13}\right)}\\ & \quad -2\cdot\left(0+0.1177486\cdot\left(\frac{1932\cdot0}{2197}-\frac{7200\cdot0.032155}{2197}+\frac{7296\cdot0.0482803}{2197}\right)\right)=0.1376515, \end{align*} \]
\[ \begin{align*} k_5 & = f\left(t+h,\hat{y}+h\left( \frac{439}{216}k_1-8k_2+\frac{3680}{513}k_3-\frac{845}{4104}k_4\right)\right)\\ & =(0+0.1177486)\cdot \mathrm{e}^{3\cdot\left(0+0.1177486\right)}\\ & \quad -2\cdot \left(0+0.1177486\cdot\left(\frac{439\cdot0}{216}-8\cdot 0.032155+\frac{3680\cdot0.0482803}{513}-\frac{845\cdot0.1376515}{4104}\right)\right)\\ & =0.1533287,\\ k_6 & = f\left(t+\frac{h}{2},\hat{y}+h\left( -\frac{8}{27}k_1+2k_2-\frac{3544}{2565}k_3+\frac{1859}{4104}k_4-\frac{11}{40}k_5\right)\right) \\ & = \left(0+\frac{0.1177486}{2}\right)\cdot\mathrm{e}^{3\cdot\left(0+\frac{0.1177486}{2}\right)}-2\cdot\left(0+0.1177486\cdot\left( -\frac{8\cdot0}{27}+2\cdot0.032155\right.\right.\\ &\quad \left.\left.-\frac{3544\cdot0.0482803}{2565}+\frac{1859\cdot0.1376515}{4104} -\frac{11\cdot 0.1533287}{40}\right)\right)=0.0660584. \end{align*} \]
Paso 4. Miramos si \(R>\epsilon =0.00001\). Vemos que no. En este caso aumentamos el tiempo \(t\) en \(h\), considerando \(t=t+h=`0+0.1177486=0.1177486\) y calculamos la aproximación \(\hat{y}\) en el nuevo tiempo \(t=0.1177486\): \[ \begin{align*} \hat{y}& = \hat{y}+h\left(\frac{25}{216}k_1+\frac{1408}{2565}k_3+\frac{2197}{4104}k_4-\frac{1}{5}k_5\right)\\ & = 0+0.1177486\left(\frac{25\cdot0}{216}+\frac{1408\cdot0.0482803}{2565}+\frac{2197\cdot 0.1376515}{4104}-\frac{0.1533287}{5}\right)=0.0081866. \end{align*} \]
Paso 5. Vamos a calcular el nuevo paso \(h\). En primer lugar, calculamos \(q\): \[ q=0.84\cdot\left(\frac{\epsilon}{R}\right)^{\frac{1}{4}}=0.84\cdot\left(\frac{0.00001}{0.0000037}\right)^{\frac{1}{4}}=1.0767246. \] Como \(q\) no es demasiado pequeño \(q\not\leq 0.1\), ni demasiado grande \(q\not\geq 4\), el nuevo paso \(h\) será \(q\cdot h =1.0767246\cdot 0.1177486=0.1267829.\)
Paso 6. Miramos si \(t+h>b\), supera el tiempo final \(b=1\): \[ 0.1177486+0.1267829=0.2445315 \not > 1, \] vemos que no. Entonces volvemos al paso 1 con el nuevo \(h=0.1267829\), el nuevo tiempo \(t=0.1177486\), la aproximación hallada \(0.0081866\) y volvemos a empezar.
La tabla siguiente nos muestra los resultados obtenidos en este ejemplo dando los valores de los tiempos \(t_i\) hallados, las aproximaciones \(\hat{y}_i\) obtenidas, los pasos \(h_i\) obtenidos, el valorde la solución exacta en los tiempos \(t_i\), \(y_i\) y el error cometido entre las aproximaciones y la solución exacta:
\(t_i\) | \(\hat{y}_i\) | \(h_{i}\) | \(y_i\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|---|
0 | 0 | 0.1177486 | 0 | 0 |
0.1177486 | 0.0081866 | 0.1267829 | 0.0081872 | 0.0000006 |
0.2445315 | 0.043074 | 0.1123177 | 0.0430759 | 0.0000019 |
0.3568492 | 0.1110956 | 0.099804 | 0.1110983 | 0.0000027 |
0.4566533 | 0.2180406 | 0.0899486 | 0.2180438 | 0.0000032 |
0.5466019 | 0.3706911 | 0.0820549 | 0.3706946 | 0.0000035 |
\(t_i\) | \(\hat{y}_i\) | \(h_{i}\) | \(y_i\) | \(|y_i-\hat{y}_i|\) |
---|---|---|---|---|
0.6286568 | 0.5765784 | 0.0755793 | 0.576582 | 0.0000037 |
0.7042361 | 0.843845 | 0.0701557 | 0.8438488 | 0.0000038 |
0.7743918 | 1.1811792 | 0.0655348 | 1.181183 | 0.0000038 |
0.8399266 | 1.59778 | 0.0615418 | 1.5977839 | 0.0000039 |
0.9014684 | 2.1033372 | 0.0580504 | 2.103341 | 0.0000039 |
0.9595188 | 2.7080175 | 0.0404812 | 2.7080214 | 0.0000039 |
1 | 3.2190957 | 3.2190993 | 0.0000036 |