{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"\n",
"# The Runge-Kutta Method\n",
"\n",
"### Modules - Ordinary Differential Equations\n",
"\n",
"By Magnus H-S Dahle, Henning G. Hugdal, Håkon W. Ånes and Peter Berg\n",
"\n",
"Last edited: February 7th 2018 \n",
"___"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In other notebooks we've studied Euler's method for solving ordinary differential equations (ODEs). This method is perhaps the most simple to understand and implement and thus is very popular as teaching material. However, for scientific purposes, Euler's method is inaccurate compared to more complex methods using the same step size, and are also conditionally unstable as discussed the previous modules."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here, we'll consider the Runge-Kutta Method, which is one of the most applied numerical methods for solving ODEs. It is deemed reasonably efficient considering computation time and its fourth order approximation offers decent accuracy, that is, good enough for most problems not demanding solutions of very high precision. Do note that we present the method in its simplest form: You may encounter its implementation somewhat different elsewhere. In general, newer (and smarter) implementations of the method can provide significantly boosts to its efficiency."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Revisiting Euler's Method"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Consider the the same (non-linear) ODE as discussed in the previous modules,\n",
"\n",
"$$\n",
"\\dot{x}(t) = \\cos(x(t)) + \\sin(t), \\qquad \\dot{x}\\equiv\\frac{\\textrm{d}x(t)}{\\textrm{d}t}\n",
"$$\n",
"\n",
"with initial condition $x(t_0) = 0, t_0 = 0$. The (Explicit) Euler method solves this problem by discretizing the variables such that \n",
"\n",
"\\begin{align*}\n",
"t & \\rightarrow t_n \\qquad\\equiv t_0 + n\\cdot\\Delta t,\\\\[1.0em]\n",
"x(t) & \\rightarrow x(t_n) \\quad\\equiv x_n ,\\\\[1.0em]\n",
"n & = 0,1,\\ldots,N; \n",
"\\end{align*}\n",
"\n",
"Then, the function value $x_{n+1}$ may be approximated by the preceding value plus the change (derivative) in that point multiplied with the distance in time $\\Delta t$ between $x_n$ and $x_{n+1}$. That is,\n",
"\n",
"$$\n",
"x_{n+1} = x_n + (\\Delta t) \\cdot \\dot{x}_n, \\qquad \\Delta t = \\frac{t_N - t_0}{N} \\equiv h\n",
"$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For this particular problem, we are given $\\dot{x}_n(t_n)$, such that this can be inserted directly into the Euler formula giving,\n",
"\n",
"$$\n",
"x_{n+1} = x_n + h [\\cdot \\cos(x_n) + \\sin(t_n)]\n",
"$$\n",
"\n",
"Which is about everything needed to solve the current problem. For a more thorough and detailed explaination of the Euler method, take a look at the modules 4.1 (explicit) and 4.3 (implicit)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np # Numerical Python\n",
"import matplotlib.pyplot as plt # Graph and Plot handling\n",
"import time # Time Measure"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmgAAAF6CAYAAACtGaREAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XeYVEXWx/HvITOAoCCIATCv4ppAkRUDRozo6qqIukZcFUV0SeKaFhCzBBVxzYxpDWtO+wpmUTGgggFdQBBUUJAMA/X+UdPe7mGA6aG763b37/M8/VB1u2f66IWZ0/dWnWPOOUREREQkPmqEDkBEREREUilBExEREYkZJWgiIiIiMaMETURERCRmlKCJiIiIxIwSNBEREZGYUYImIiIiEjNK0ERERERiRgmaiIiISMzkLEEzsy3MbKyZTTKzL8ysVyWv2d/M5pvZJ+WPK3IVn4iIiEhc1Mrhe5UBlzrnPjKzRsAEM3vVOTepwuvedM4dWdVv2qxZM9emTZtMxlmpRYsW0aBBg6y/j1Sdzkn86JzEk85L/OicxFMuzsuECRPmOOc2XtfrcpagOedmAbPKxwvMbDKwGVAxQUtLmzZt+PDDDzMQ4dqNGzeO/fffP+vvI1WncxI/OifxpPMSPzon8ZSL82Jm06ryuiBr0MysDbAbML6Spzua2adm9qKZtc1pYCIiIiIxYM653L6hWUPgdWCwc+7JCs9tAKxyzi00s8OBYc65bSv5Hj2AHgAtWrRo98gjj2Q97oULF9KwYcOsv49Unc5J/OicxJPOS/zonMRTLs5L586dJzjn2q/rdTlN0MysNvAc8LJz7uYqvH4q0N45N2dNr2nfvr3TLc7ipHMSPzon8aTzEj86J/GUo1ucVUrQcrmL04C7gclrSs7MbJPy12Fme5bHNzdXMYqIiIjEQS53ce4NnAp8ZmaflB+7DGgF4JwbBRwPnGdmZcAS4CSX63uwIiIiIoHlchfnW4Ct4zUjgZG5iUhEREQkntRJQERERCRmlKCJiIiIxIwSNBEREZGYUYImIiIiuVVaCm3aQI0a/s/S0tARxU4ud3GKiIhIsSsthR49YPFiP582zc8BuncPF1fMKEETyabSUhg4EKZPh1atYPBg/QASkdxan59DzvlEatEiWLiw6n+u7bnZs/33TbZ4sY9RPx9/pwRNJFv0KVFEQqvs59AZZ8BDD/lkbV3J1qJFqydT2TJ9em7eJ08oQRPJlssui34oJuhToojk0sCBq/8cWrECXnghTDxr06pV6AhiRQmaSKY553/4renToD4likiuZOLnTf360KABNGy45j/X9lzFP194AS6+ODVxNPMfauV3StBEMmXVKnjqKb++4+OP1/y6khL/2hraRC0iWVZS4m9TVtSkif9Zta6kq6QEatbMbEznnOO/b79+MHOmP+YcvPyyf87W2nSoaChBE1lfZWXwyCMwZAhMnrzu1y9aBH/7G4wapSRNRLLnnnsqT85KSmDkyLBLLbp394+nn4ZjjvHHnnwS7rzT/3wU1UETqbZly+Cuu2D77eHUU1OTs/r1/SX8ESOgdWv/ibBBg+j5u+6CCy/M3eJbESkuH38MF1wQzUtK/M+h1q1h9Oj4rIPt2jU1zt694fPPw8UTI0rQRNK1eDEMHw5bb+13R333XfRco0YwYABMnQq33AI9e/rxqlUwf75P5BJuv93/MFKSJiKZNG8eHH88LF3q523bwk8/+Z9DU6fGJzlLuPFG2HlnP166FE48cfWNDUVICZpIVf32G1x3na963atXtHYCYKON4Oqr/Rb2IUOgefPVv75mTbj3XujWLTo2bBj07askTUQyY9UqOO206INjo0bwxBOpV/Djpl49v0ykpMTPJ03yH16LnBI0kXX55Re46iqfmPXvDz//HD3XogXccIP/VHrFFbDhhmv/XjVrwgMP+E+3CTfeCJdfriRNRNbf9dfDs89G83vu8csw4m6HHfydiYTRo+Hf/w4XTwwoQRNZkx9/9LuMWrf2V8d+/TV6bost/CLb//0P/v53/ym1qmrV8kUiu3aNjg0ZAtdck7nYRaT4jB3r654l9O6d+mEw7s4809/eTDjnHP/ht0gpQROp6Pvv4aKL/BWz66/3FbUTttkG/vUvmDLFL2ytX79671G7Njz6KBxxRHTsqqt8oiYikq6ZM+Gkk/wtToC99/ZLMvKJmd/FueWWfj5/vl8SsmJF2LgCUYImkvDtt/4T29Zb+92XiQW24BfZPvSQ36l51llQp876v1/duvD443DoodGxgQP9LVMRkapascJfefrpJz9v3hwee8x/EMw3jRvDww/7Ow0A770HV14ZNqZAlKCJTJoEp5wC223nr44lf1pr184Xn5040X+S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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"# A quick implementation of Euler's Method for solving\n",
"# the above Initial Value Problem\n",
"\n",
"# Try adjusting 'N' to see how the numerical solution converges\n",
"\n",
"t0 = 0.0\n",
"tN = 10.0\n",
"N = 15\n",
"t = np.linspace(t0,tN,N)\n",
"x_Eu = np.zeros(N) ## Euler\n",
"h = (tN-t0)/N\n",
"\n",
"# Initial condition:\n",
"x_Eu[0] = 0\n",
"\n",
"for n in range(0,N-1):\n",
" x_Eu[n+1] = x_Eu[n] + h * (np.cos(x_Eu[n]) + np.sin(t[n]))\n",
"\n",
"plt.figure(figsize=(10,6))\n",
"plt.plot(t,x_Eu,'-ro',linewidth=3.0, label=r'Euler')\n",
"plt.ylabel(r'Dimensionless position, $x(t)$')\n",
"plt.xlabel(r'Dimensionless time, $t$')\n",
"plt.legend(loc=4) # 'loc' sets the location of the legend-text in the plot \n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A quick error analysis shows that the local truncation error emitted in each and every step of Euler's method is proportional to the step size squared $h^2 = (\\Delta t)^2$, by Taylor expanding the function about $t+h$\n",
"\n",
"\\begin{align*}\n",
"\\text{Exact:} & \\qquad x(t + h) = x(t) + h\\dot{x} + \\frac{h^2}{2}\\ddot{x} + \\frac{h^3}{6}\\dddot{x} + \\ldots \\\\[1.2em]\n",
"\\text{Euler:} & \\qquad x(t + h) \\approx x(t) + h\\dot{x}\\\\[1.2em]\n",
"\\text{Error:} & \\qquad e = \\frac{h^2}{2}\\ddot{x} + \\frac{h^3}{6}\\dddot{x} + \\ldots\n",
"\\end{align*}\n",
"\n",
"Now, if we iterate the system a total of $N=\\frac{t_N - t_0}{h}\\propto h^{-1}$ times, then the total, global error is $E = N\\cdot e \\propto h$. That is, the Euler is a first order method, as concluded in the previous modules which also gives a more in-depth error analysis of the Euler method. The question now is: Can we obtain a better approximated solution of same step size?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Improving Euler's Method"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The underlying concept of the Runge-Kutta method we wish to show, is built on the same basic concepts as from Euler's method. Consider now that we apply Euler's method again, however this time we will not use the derivative at $x_{n+1}$, but rather at the middle point $x_{m}=\\frac{x_{n+1}+x_n}{2}$, refered to as a test-point. One can then compute a more accurate $x_{n+1}$ using the information of the derivative at this midpoint ($\\dot{x}_m$) of the interval $h$ between $x_n$ and $x_{n+1}$. That is,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\\begin{align*}\n",
"x_{n+1} &= x_n + h\\cdot \\dot{x}_m \\\\[1.2em]\n",
" &= x_n + h\\cdot [\\cos(x_m) + \\sin(t_m)] \\\\[0.8em]\n",
" &= x_n + h\\cdot \\left[\\cos\\left(x_n + \\frac{h \\dot{x}_n}{2}\\right) + \\sin\\left(t_n+\\frac{h}{2} \\right)\\right] \\\\[1.0em]\n",
" &= x_n + h\\cdot \\left[\\cos\\left(x_n + \\frac{h}{2}[\\cos(x_n)+\\sin(t_n)]\\right) + \\sin\\left(t_n+\\frac{h}{2} \\right)\\right]\n",
"\\end{align*}\n",
"\n",
"Now, let us plot it against the original Euler-approach and study the difference."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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rbeSkpJCjx496NSpE6tXrwa8lqqrr76abt260bZtWz788EMAXn75ZQYPHsypp55Kv379cM5x880307FjRzp16lQwoe3w4cP56CP/wLy9LWJ5eXncfPPNdO/enWOOOYbnn38e8BKjMWPG0K5dO/r378+WLVsC+rnGjx/PQw89VLDesWNH1q1bt89xDz74YMG977rrLgDWrVtHu3btuPTSS+nYsSMbNmwI6N4HEsqJansAq5xzawDMbAowBFha6JghwHjf8tvAU2ZmzpWxUFg5jVszkdxirZs7o73tyTwTjpBERKQaG586nrv/d3epj9+Zs5NxM8eR3Mmbt3P09NG88NMLBfvvOvkuxvcdX+rr/fzzzyxbtox69erRqlUrrrzySubMmcPjjz/Ok08+yWOPPQZ4icucOXNYvXo1p5xyCqtWrQLgp59+YuHChdSrV4933nmHBQsW8PPPP/PHH3/QvXt3TjrpJC688ELefPNNzjrrLPbs2cPMmTN59tlnefHFF0lMTGTu3LlkZ2fTu3dvBgwYwPz581m+fDlLly7l999/p3379lxxxRUlxn/zzTfz73//G4AOHTqQklK65PWzzz5j5cqVzJkzB+ccgwcP5uuvv6Z58+asXLmSV155hZ49e5b691gaoUzQjgAKp5YbgeP3d4xzLtfM0oH6wB+FDzKz0cBogMaNG5OamhqUgNPqlFzeIq1OXtDuKaWXmZmp5xBh9Ewik55L5CntM0lMTCQjI6NgPTs7O+B7paWnFVwjJyenyL7s7Owi19+fjIwMdu7cSdeuXYmPj2fPnj20aNGCPn36kJGRQevWrfn888/JyMggJyeHwYMHk5WVxWGHHUZSUhLz5s1j9+7d9O3bl+joaDIyMvjyyy8ZOnQoO3fuJC4ujhNOOIGvv/6aU089leuvv54//viDL774gl69epGbm8uMGTNYvHgxb775JgA7duzg559/5osvvii4TkJCAieddBK7du3a5+fKycnhX//6F+ecc06Rnys7O7sgpry8PPLz88nMzCw4PyMjgw8//JBPP/2Uzr4+6JmZmSxatIh69erRvHlzOnToUOLvcffu3WX+t1cpSz055yYCEwG6devm+vbtG5T7NP8oivXx+yZpzbOiCNY9pfRSU1P1HCKMnklk0nOJPKV9JsuWLSMhIaFgvXbt2gHfq3li84JrREdHF9lX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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x_imp = np.zeros(N) \n",
"\n",
"for n in range(0,N-1):\n",
" x_imp[n+1] = x_imp[n] + h * ( np.cos(x_imp[n]+(h/2.0)*(np.cos(x_imp[n]) + np.sin(t[n]))) + np.sin(t[n]+h/2.0) )\n",
"\n",
"plt.figure(figsize=(10,6))\n",
"plt.plot(t,x_Eu ,'-ro' ,linewidth=3.0,label=r'Euler')\n",
"plt.plot(t,x_imp,'--go',linewidth=3.0,label=r'Improved Euler')\n",
"plt.ylabel(r'Dimensionless position, $x(t)$')\n",
"plt.xlabel(r'Dimensionless time, $t$')\n",
"plt.title(r'Stepsize, $N$ = %i' % N)\n",
"plt.legend(loc=4) # 'loc' sets the location of the legend-text in the plot \n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The new approximation is significantly different from the solution provided by the original Euler-approach (using $N=15$). What we have implemented here, is often referred to as The Improved Euler Method or The Midpoint Method for ODEs. However, a dear child has many names, and we will refer to it as The Second Order Runge-Kutta Method. If we assume our improved method to be more accurate, one sees that the original approach over-shoots, which is a known issue for the Euler method. \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us in a short manner compare the errors of the two approaches, by first estimating the error of our improved scheme in a similar fashion as above, by Taylor expanding about $(t+h/2)$. The improved scheme applies the approximation\n",
"\n",
"$$\n",
"x(t+h) \\approx x(t) + h\\dot{x}(t+h/2)\n",
"$$\n",
"\n",
"where we expand $\\dot{x}(t+h/2)$ resulting in\n",
"\n",
"$$\n",
"\\dot{x}(t+h/2) = \\dot{x}(t) + (h/2)\\ddot{x} + \\frac{(h/2)^2}{2}\\dddot{x} + \\mathcal{O}(h^3)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In a similar fashion as for the Euler method, we compare our improved scheme with the exact Taylor expansion,\n",
"\n",
"\\begin{align*}\n",
"\\text{Exact:} & \\qquad x(t + h) = x(t) + h\\dot{x} + \\frac{h^2}{2}\\ddot{x} + \\frac{h^3}{6}\\dddot{x} + \\ldots \\\\[1.2em]\n",
"\\text{Impr. E.:} & \\qquad x(t + h) \\approx x(t) + h[\\dot{x}(t) + (h/2)\\ddot{x}]\\\\[1.2em]\n",
"\\text{Error:} & \\qquad e = \\frac{h^3}{6}\\dddot{x} + \\mathcal{O}(h^4)\n",
"\\end{align*}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This implies a global error $E=N\\cdot e \\propto h^2$, which effectivley gives a method of second order accuracy in $h$, not so surprising considering the name of the method. Let us ask ourselfs again: can we do it even better?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The General (Fourth Order) Runge-Kutta Method"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"What Euler did was estimating $x_{n+1}$ by using $x_n$ and $\\dot{x}_n$. What we just did, was estimating $x_{n+1}$ by using $x_n$ and the derivative of the point in-between, namely the mid-test-point, $x_m$. Now, here's an interesting idea: Would it be possible to use a similar test-point, to calculate the derivative to the actual test-point? Take some time to think about what this question implies before you read on."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"The perhaps not so ground breaking answer to the above question is yes. In fact, we can do even better: We can make a test-point, for the test-point's test point, and so on! As it happens to be, The Fourth Order Runge-Kutta Method uses three such test-points and is the most widely used Runge-Kutta Method. You might ask why we don't use five, ten or even more test-points, and the answer is quite simple: It is not computationally free to calculate all these test-points, and the gain in accuracy rapidly decreases beyond the fourth order of the method. That is, if high precision is of such importance that you would require a tenth-order Runge-Kutta, then you're better off reducing the step size $h$, than increasing the order of the method. \n",
"\n",
"Also, there exists other more sophisticated methods which can be both faster and more accurate for equivalent choices of $h$, but obviously, may be a lot more complicated to implement. See for instance Richardson Extrapolation, the Bulirsch-Stoer method, Multistep methods, Multivalue methods and Predictor-Corrector methods."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"Nevertheless, we now show a general expression for the arbitrarily-ordered Runge-Kutta Method, before we apply the fourth order method on the problem given above. Again, consider an ODE written on the form\n",
"\n",
"$$\n",
"\\dot{x}(t) = g(x(t),t)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then, for the general $q$-ordered Runge-Kutta method, one has\n",
"\n",
"\\begin{align*}\n",
"k_1 &= h\\cdot g(x_n, t_n) \\\\[1.0em]\n",
"k_2 &= h\\cdot g(x_n + a_{2,1}k_1 , t+c_2 h ) \\\\[1.0em]\n",
"k_3 &= h\\cdot g(x_n + a_{3,1}k_1 + a_{3,2}k_2 , t+c_3 h ) \\\\[1.0em]\n",
"k_4 &= h\\cdot g(x_n + a_{4,1}k_1 + a_{4,2}k_2 + a_{4,3}k_3 , t+c_4 h ) \\\\[1.0em]\n",
" &\\qquad \\vdots \\\\[1.0em]\n",
"k_q &= h\\cdot g(x_n + [a_{q,1} k_1 + a_{q,2}k_2+\\ldots+a_{q,q-1}k_{q-1}], t_n + c_q h )\n",
"\\end{align*}\n",
"\n",
"Such that,\n",
"\n",
"\\begin{equation*}\n",
"x_{n+1} = x_n + \\sum_{i=1}^{q} b_i k_i\n",
"\\end{equation*}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The scheme as introduced now in its general form, has some undefined coefficients: $a_{i,j}$, $b_{i}$ and $c_{i}$. The elements $a_{i,j}$ are denoted as the Runge-Kutta Matrix, while $b_i$ are weights and $c_i$ are nodes. Deriving these (and coefficients for other similar methods) can be a tedious task of complicated algebra. Hence, such coefficients are usually obtained from tables in litterature. The Runge-Kutta methods' coefficients can be found using the (John C.) Butcher tableau,\n",
"\n",
"\\begin{array}{ c|c c c }\n",
" 0 & && &&& \\\\\n",
" c_2 & a_{2,1} && &&& \\\\\n",
" c_3 & a_{3,1} && a_{3,2} &&& \\\\\n",
" \\vdots & &\\ddots& &&& \\\\\n",
" c_q & a_{q,1} && a_{q,2} & \\ldots & a_{q,q-1}&& \\\\\n",
" \\hline\n",
" & b_1 && b_2 & \\ldots & b_{q-1} && b_q\n",
"\\end{array}\n",
"\n",
"The coefficients are then determined by demanding the method to be consistent. Consistancy of a numerical (finite difference) approximation referes to the fact that the approximated problem (equation) approaches the exact problem in the limit of the step size going towards zero. For the Runge-Kutta method, this happens to be the case when\n",
"\n",
"\\begin{equation*}\n",
"\\sum_{j=1}^{l-1} a_{i,j} = c_i, \\text{ for } l\\in 2,3,\\ldots,q;\n",
"\\end{equation*}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There may exist multiple choices for the coefficients for an aribrary order $q$, but we will not go any further into the details of their derivation. Instead, we give the perhaps most widely applied choice for the fourth order method $(q=4)$, for which the Butcher tableau is\n",
"\n",
"\\begin{array}{ c|c c c }\n",
" 0 & & & & \\\\\n",
" 1/2 & 1/2 & & & \\\\\n",
" 1/2 & 0 & 1/2 & & \\\\\n",
" 1 & 0 & 0 & 1 & \\\\\n",
" \\hline\n",
" & 1/6 & 1/3 & 1/3 & 1/6 \\\\\n",
"\\end{array}\n",
"\n",
"The above tableau enables the calculations of $k_1$, $k_2$, $k_3$ and $k_4$ such that we may now apply the fourth order Runge-Kutta method to problem at hand."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x_4RK = np.zeros(N) ## Runge-Kutta\n",
"\n",
"def g(x_,t_):\n",
" return np.cos(x_) + np.sin(t_)\n",
"\n",
"for n in range(0,N-1):\n",
" k1 = h*g( x_4RK[n] , t[n] )\n",
" k2 = h*g( x_4RK[n] + k1/2, t[n] + (h/2) ) \n",
" k3 = h*g( x_4RK[n] + k2/2, t[n] + (h/2) ) \n",
" k4 = h*g( x_4RK[n] + k3 , t[n] + h )\n",
" \n",
" x_4RK[n+1] = x_4RK[n] + k1/6 + k2/3 + k3/3 + k4/6\n",
" \n",
"plt.figure(figsize=(10,6))\n",
"plt.plot(t,x_Eu, '-ro' , linewidth=3.0,label=r'Euler')\n",
"plt.plot(t,x_imp,'--go', linewidth=3.0,label=r'2nd order Runge-Kutta')\n",
"plt.plot(t,x_4RK,':bo' , linewidth=3.0,label=r'4th order Runge-Kutta')\n",
"plt.ylabel(r'Dimensionless position, $x(t)$')\n",
"plt.xlabel(r'Dimensionless time, $t$')\n",
"plt.title(r'Stepsize, $N$ = %i' % N)\n",
"plt.legend(loc=4) \n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One sees that there is a marginal difference between the fourth and second order implementations of Runge-Kutta, while Euler's method has a significant error. We recommend that you adjust the total number of points $N$, to see how the different methods approaches each other (and the exact solution) as $h \\overset{N \\to \\infty}{\\longrightarrow} 0$."
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### Higher Order Derivatives and Sets of 1st order ODEs"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"So far, we've restricted ourselfs to consider ODEs containing first (and zeroth) ordered derivatives only, however, this is in fact all one has to master. Be careful not to confuse the (derivative) order of the equation, and the (accuracy) order of the numerical method. A $q$-ordered ODE can always be reduced to a set of two $(q-1)$-ordered ODEs. Consider the general, linear, second order ODE with constant coefficients and some arbitrary initial conditions\n",
"\n",
"$$\n",
"a\\ddot{x} + b\\dot{x} + cx = g(t), \\qquad x = x(t)\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Introduce then a new variable, $\\nu(t) \\equiv \\dot{x}(t)$ such that the above problem can be expressed by\n",
"\n",
"\\begin{align*}\n",
"\\dot{x} &= \\nu &\\equiv F(x,\\nu,t)\\\\[1.0em]\n",
"\\dot{\\nu} &= \\frac{1}{a} ( g(t) - b\\nu - cx ) &\\equiv G(x,\\nu,t)\n",
"\\end{align*}\n",
"\n",
"Where we have introduced $F,G$ only for generality. The method would in fact also be applicable for the more general case where $a,b,c$ are functions of $x,\\nu,t$.\n",
"\n",
"Nevertheless, this set of two dependent, first order ODEs can be solved using a Runge-Kutta method! As a matter of fact, we can solve any set of $M$ first order ODEs, however, keep in mind that in this particular example the test-points for $x$ will depend on those for $\\nu$ and vice versa such that the two equations will have to be solved simultaneously. That also goes for an arbitrary sized set of ODEs."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the fourth order Runge-Kutta method, one gets for time-step $n$\n",
"\n",
"\\begin{align*}\n",
"k_{x1} &= h \\cdot F\\left(x_n ,\\nu_n ,t_n \\right), & k_{\\nu1} &= h \\cdot G\\left(x_n ,\\nu_n ,t_n \\right) \\\\[1.0em]\n",
"k_{x2} &= h \\cdot F\\left(x_n + \\frac{k_{x1}}{2},\\nu_n + \\frac{k_{\\nu1}}{2},t_n+\\frac{h}{2} \\right), & k_{\\nu2} &= h \\cdot G\\left(x_n + \\frac{k_{x1}}{2},\\nu_n + \\frac{k_{\\nu1}}{2},t_n+\\frac{h}{2} \\right) \\\\[1.0em]\n",
"k_{x3} &= h \\cdot F\\left(x_n + \\frac{k_{x2}}{2},\\nu_n + \\frac{k_{\\nu2}}{2},t_n+\\frac{h}{2} \\right), & k_{\\nu3} &= h \\cdot G\\left(x_n + \\frac{k_{x2}}{2},\\nu_n + \\frac{k_{\\nu2}}{2},t_n+\\frac{h}{2} \\right) \\\\[1.0em]\n",
"k_{x4} &= h \\cdot F\\left(x_n + k_{x3} ,\\nu_n + k_{\\nu3} ,t_n+h \\right), & k_{\\nu3} &= h \\cdot G\\left(x_n + k_{x3} ,\\nu_n + k_{\\nu3} ,t_n+h \\right)\n",
"\\end{align*}\n",
"\n",
"Such that,\n",
"\n",
"\\begin{align*}\n",
" x_{n+1} &= x_n + k_{x1}/6 + k_{x2}/3 + k_{x3}/3 + k_{x4}/6 \\\\[1.0em]\n",
" \\nu_{n+1} &= \\nu_n + k_{\\nu 1}/6 + k_{\\nu 2}/3 + k_{\\nu 3}/3 + k_{\\nu 4}/6 \n",
"\\end{align*}\n",
"\n",
"\n",
"For $n=1,\\ldots,N-1;$ while $x_0$, $\\nu_0$ should be known as initial conditions. Do note that the step size $h$ can be withdrawn from inside of $k$, and left to the calculation of $x_{n+1}$ instead, which will somewhat reduce the total number of calculations/operations in each loop. You should also notice that $k_{xi}$ depends on $k_{\\nu (i-1)}$ and $k_{\\nu i}$ depends on $k_{x(i-1)}$. Thus, the $k$-values need to be calculated in an orderly fashion!"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"We conclude that for a system of $M$ first order equations, the total number of $k$-values for a $q$-ordered Runge-Kutta method will be $M \\cdot q$. That is, large sets of differential equations with derivatives of higher orders will result in an even larger set of first order ODEs yielding a huge amount of $k$-variables. If this is the case, you might want to reconsider if the Runge-Kutta method really is the best approach for your problem.\n",
"\n",
"However, the Runge-Kutta method is rather easy and straight forward to implement, and provide what we will call a quite decent precision while is still reasonably fast and efficient. It is, by all means, a powerful tool for any numerical scientist!"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.4"
}
},
"nbformat": 4,
"nbformat_minor": 1
}