{ "cells": [ { "cell_type": "markdown", "id": "tired-deadline", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Lecture topic 5: \n", "\n", "## Ordinary and partial differential equations" ] }, { "cell_type": "code", "execution_count": 9, "id": "interesting-librarian", "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from lecture_utils import *" ] }, { "cell_type": "markdown", "id": "creative-exhibit", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "_This is the first part of the lecture material and should enable you to solve exercises 5.1, 5.2 and 5.3._" ] }, { "cell_type": "markdown", "id": "collect-television", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### What are differential equations?\n", "\n", "A differential equation is an equation that contains next to variables and functions of these variables also derivates of these functions.\n", "\n", "- Example\n", "\n", "$$\n", "\\frac{\\mathrm{d}^2x(t)}{\\mathrm{d}t^2}-\\mu(1-x(t)^2)\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} +\\omega^2x(t) = 0\n", "$$\n", "\n", "The solution to this differential equation is the function $x(t)$ that satisfies the differential equation when $x(t)$ and its derivatives are substituted into the equation.\n" ] }, { "cell_type": "markdown", "id": "potential-ecology", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Types of differential equation\n", "\n", "#### Ordinary differential equations \n", "\n", "An ordinary differential equation (ODE) has only one independent variable, let's call it $t$. The ODE has only derivatives with respect to $t$.\n", "\n", " - Example\n", " \n", "$$\n", " tx^5\\frac{\\mathrm{d}x}{\\mathrm{d}t} = \\sin(t)\n", "$$\n", "\n", "For the ODEs, we will stick with $t$ as the independent variable because the time $t$ is for many problems indeed the independent variable.\n", "\n", "#### Partial differential equations\n", "\n", "Partial differential equations have several independent variables and contain partial derivatives with respect to these variables.\n", "\n", "- Example\n", "\n", "$$\n", " \\frac{\\partial^2z}{\\partial x \\partial y} = xyz\\frac{\\partial z}{\\partial x}\\frac{\\partial z}{\\partial y}\n", "$$\n" ] }, { "cell_type": "markdown", "id": "previous-virus", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Order of ordinary differential equations\n", "\n", "The order $n$ of an ODE is defined by the highest order derivative $\\frac{\\mathrm{d}^n x}{\\mathrm{d}t^n}$. \n", "\n", "#### First-order differential equations\n", "\n", "The general form of a first-order ODE with one variable is\n", "\n", "$$\n", "\\frac{\\mathrm{d}x}{\\mathrm{d}t} = f(x,t)\n", "$$\n", "\n", "#### Second-order differential equations\n", "\n", "The general form of a second-order ODE with one variable is \n", "\n", "$$\n", "\\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} = f\\left(x,\\frac{\\mathrm{d}x}{\\mathrm{d}t},t\\right)\n", "$$" ] }, { "cell_type": "markdown", "id": "conventional-joseph", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Examples for ordinary differential equations in chemistry and physics:\n", "\n", "- chemical reaction kinetics\n", " \n", " $$\n", " A + B \\rightarrow \\mathrm{Products} \\qquad e.g. \\qquad CH_3CH_2Br + OH^- \\rightarrow CH_3CH_2OH + Br^-\n", " $$\n", " \n", " with the rate equation\n", " \n", " $$\n", " -\\frac{\\mathrm{d}c_A}{\\mathrm{d}t} = - \\frac{\\mathrm{d}c_B}{\\mathrm{d}t} = k c_A c_B\n", " $$\n", "\n", "- Harmonic oscillator\n", " $$\n", " \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} = -\\omega^2 x\n", " $$\n" ] }, { "cell_type": "markdown", "id": "third-toolbox", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- Lorenz equations\n", "\n", " $$\n", "{\\mathrm{d} x\\over\\mathrm{d} t} = \\sigma(y-x),\\qquad\n", "{\\mathrm{d} y\\over\\mathrm{d} t} = rx - y - xz,\\qquad\n", "{\\mathrm{d} z\\over\\mathrm{d} t} = xy - bz,\n", "$$\n", "\n", " where where $\\sigma$, $r$ and $b$ are constants \n", "\n", "- Newton's equation of motion\n", " $$\n", " \\frac{\\mathrm{d}^2\\mathbf{r}_i}{\\mathrm{d}t^2} = \\frac{\\mathbf{F}_i}{m_i}\n", " $$\n", " \n", " where $\\mathbf{r}_i = (x,y,z)$, $m_i$, and $\\mathbf{F}_i$ are the position, mass and force acting on particle $i$.\n", " " ] }, { "cell_type": "markdown", "id": "promotional-appreciation", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ " Chemical reaction kinetics :\n", " Chemical kinetics or reaction kinetics investigates the speed of a chemical reaction, i.e., how fast the concentration of a reactant changes with time. The reactions are due to collisions of the the reactant species. The frequency with which the molecules or ions collide depends -next to theromodynamic variables such as the temperature- on their concentrations. $c_A$ and $c_B$ are here the concentrations of the reactants $A$ and $B$. Above you see a second-order reactions, i.e., the reaction rate depends on the concentration $c_A$ and $c_B$ of reactants $A$ and $B$. The reaction happens in one step. The order of an reaction is not defined by the stoichiometry of the reaction. The reaction could happen in several steps and intermediate products could form and the rate-determining step could have a different order. Studying the reaction rates is therefore important to identify the reaction mechanism. A typical example for a second-order reaction are so-called S$_N$2 reactions shown above. In the exercise you will solve the rate equation for a first-order reaction.\n", " \n", "Lorenz equations: \n", " These equations were first studied by Edward Lorenz in 1963, who\n", "derived them from a simplified model of weather patterns. The\n", "reason for their fame is that they were one of the first incontrovertible\n", "examples of \"deterministic chaos\", the occurrence of apparently\n", "random motion even though there is no randomness built into the equations.\n", "\n", " Equation of motion :\n", "These equations are solved, e.g., in astrophysics to calculate the orbits of planets etc. They are also relevant in statistical physics for molecular dynamics simulations." ] }, { "cell_type": "markdown", "id": "american-probe", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for equations of motions: molecular dynamics\n", "\n", "- Realm of statistical physics: generation of trajectories to analyze the movement of atoms and molecules \n", "- Applied for systems, where sampling of phase space is necessary, e.g., liquids\n", "- Trajectories are obtained by numerically solving Newton's equations of motion \n", "- Example: water film on top of Pt(111) surface" ] }, { "cell_type": "code", "execution_count": 10, "id": "celtic-postcard", "metadata": { "scrolled": true, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "play_H2O_on_Pt()" ] }, { "cell_type": "markdown", "id": "dependent-wales", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Molecular dynamics is a computer simulation method for analyzing the physical movements of atoms and molecules.\n", "The simulations are run for a certain amount of time, in the example above, for a few pico seconds. You can then display the \"evolution\" of the system. From molecular dynamics, we can study the structure of the molecular systems, but also obtain properties such as diffusion coefficients etc. With more advanced techniques, we can also study reactions, e.g., dissociation reactions.\n", "\n", "The system above shows a liquid water film (oxygen atoms in red, hydrogen atoms in white) on top of a platinum surface (Pt atoms in brown). The purpose of this simulation was to study the structure of the water on Pt(111). One can observe that a very dense first adsorption layer forms. " ] }, { "cell_type": "markdown", "id": "rapid-transcript", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for partial differential equations:\n", " \n", " - Laplace equation\n", " - Poisson equation\n", " - Maxwell's equation\n", " - Schrödinger equation\n", " - ..." ] }, { "cell_type": "markdown", "id": "exempt-interstate", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Solving ordinary differential equations analytically\n", "\n", "ODEs can be solved analytically if the variables can be separated. An example for such an equation is the following linear ODE\n", "\n", "$$\n", " \\frac{\\mathrm{d}x}{\\mathrm{d}t} = \\frac{2x}{t}\n", "$$\n", "\n", " - Separation of variables:\n", " $$\n", " \\frac{\\mathrm{d}x}{x} = 2 \\frac{\\mathrm{d}t}{t}\n", " $$\n", " \n", " - Integration of both sides\n", " $$\n", " \\int \\frac{\\mathrm{d}x}{x} = \\int2 \\frac{\\mathrm{d}t}{t} \\Rightarrow \\ln x = 2 \\ln t + c\n", " $$\n", " \n", " - Setting the integration constant to c = ln k \n", "$$\n", " \\ln x = \\ln(t^2) + ln k\n", "$$\n", "\n", " - After rasing each side to $\\exp$, the solution is then\n", "$$\n", " x(t) = kt^2\n", "$$\n", "\n", " -If we have an initial condition fixing $x$ at time $t$, we can also determine $k$. \n", " " ] }, { "cell_type": "markdown", "id": "engaging-foster", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Numerical solution of ordinary differential equations\n", "\n", "Let's assume we have instead\n", "\n", "$$\n", " \\frac{\\mathrm{d}x}{\\mathrm{d}t} = \\frac{2x}{t} + \\frac{3x^2}{t^3}\n", "$$\n", "\n", "\n", "- no longer separable\n", "- nonlinear equation, i.e., powers or other non-linear functions of the dependent variable $x$ appear\n", "- nonlinear equations can be rarely solved analytically $\\rightarrow$ solve it numerically " ] }, { "cell_type": "markdown", "id": "direct-exposure", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ " Comment :\n", "\n", "The definition of a linear first-oder ODE is\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} + f(t) x(t)= g(t)\n", "$$\n", "\n", "The definition of a linear $n$-th order ODE is\n", "\n", "$$\n", "\\frac{\\mathrm{d}^nx(t)}{\\mathrm{d}t^n} + a_{n-1}(t)\\frac{\\mathrm{d}^{n-1}x(t)}{\\mathrm{d}t^{n-1}} \\cdots + a_2(t)\\frac{\\mathrm{d}^2x(t)}{\\mathrm{d}t^2} + a_1(t)\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} + a_0(t) x(t) = b(t)\n", "$$\n", "\n" ] }, { "cell_type": "markdown", "id": "funny-stupid", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Methods for numerical solutions of ODEs\n", "\n", "Methods covered in this lecture\n", "\n", "- Euler method\n", "- Runge-Kutta methods\n", "- Leapfrog\n", "- Verlet" ] }, { "cell_type": "markdown", "id": "colonial-profile", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Euler's method\n", "\n", "If we start from the general form of the first-order ODE\n", "\n", "$$\n", "\\frac{\\mathrm{d}x}{\\mathrm{d}t} = f(x,t)\n", "$$\n", "\n", "and have an initial condition that fixes the value of $x$ for some $t$, then we can write the value of $x$ a short interval $h$ later using a Taylor expansion:\n", "\n", "$$\n", "\\begin{align}\n", " x(t+h) &= x(t) + h\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\frac{1}{2}h^2\\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} +\\cdots\\\\\n", " &= x(t) + h\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\mathcal{O}(h^2)\n", "\\end{align}\n", "$$\n", "\n", "with $\\mathcal{O}(h^2)$ denotes all terms that go $h^2$ and higher" ] }, { "cell_type": "markdown", "id": "completed-clothing", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "If $h$ is small, then $h^2$ is very small, so we can neglect the terms in $h^2$ and get\n", "\n", "$$\n", " x(t+h) = x(t) + hf(x,t)\n", "$$\n", "\n", " Procedure: :\n", "\n", "- start at time $t$, where value $x$ is known\n", "- calculate $x$ at short time later, i.e. at $t+h$\n", "- repeat and calculate $x$ at $t+2h$\n", "- continue until $t=t_{\\mathrm{end}}$" ] }, { "cell_type": "markdown", "id": "banner-trauma", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "If you are given a differential equation for $x$ and an initial condition $t=a$ and asked to make a graph of $x(t)$ for values $t$ from $t_a$ to $t_b$, divide the interval from $a$ to $b$ into steps of size $h$ and use $x(t+h) = x(t) + hf(x,t)$ repeatedly and then plot the results.This method is called after its inventor, Leonhard Euler." ] }, { "cell_type": "markdown", "id": "swiss-insider", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for Euler's method\n", "\n", "Let's use Euler's method to solve the differential equation\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} = (\\cos t) x(t)\n", "$$\n", "\n", "with the initial condition $x=1$ at $t=0$ and we want to perform the calculation from $t=0$ to $t=10$. This is a first-order linear equation, which can be also solved analytically. With the given initial condition, the analytic solution is\n", "$$\n", "x(t) = e^{\\sin(t)}\n", "$$" ] }, { "cell_type": "code", "execution_count": 3, "id": "cardiac-massage", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step size 0.01\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import cos, sin, exp,arange\n", "from matplotlib import pyplot as plt\n", "\n", "\"\"\" Define function \"\"\"\n", "def f(x,t):\n", " return cos(t) * x\n", "\n", "\"\"\"Initial values and parameters\"\"\"\n", "a = 0.0 # Start of the interval\n", "b = 10.0 # End of the interval\n", "N = 1000 # Number of steps\n", "h = (b-a)/N # Step size\n", "print ('Step size', h)\n", "x = 1.0 # Initial condition\n", "\n", "tpoints = arange(a,b,h)\n", "xpoints_euler =[]\n", "xpoints_analytic =[]\n", "\n", "\"\"\" Solve with Euler \"\"\"\n", "for t in tpoints:\n", " xpoints_analytic.append(exp(sin(t)))\n", " xpoints_euler.append(x)\n", " x += h*f(x,t)\n", "\n", "\"\"\" Plot results \"\"\"\n", "plt.rc('font', size=16)\n", "plt.plot(tpoints,xpoints_euler,label='Euler',linewidth=3.0)\n", "plt.plot(tpoints,xpoints_analytic,label='Analytic',)\n", "plt.xlabel('t')\n", "plt.ylabel('x')\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "narrow-shanghai", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Since we can solve this ODE analytic, we can compare the accuracy of the Euler method to the exact solution. Play with the step size $h$ (i.e. with $N$) to see when the Euler solution converges to the exact one. You will find that the error decreases when decreasing the step size." ] }, { "cell_type": "markdown", "id": "characteristic-acrobat", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Error for Euler's method\n", "\n", "- neglection of $h^2$ and higher-order terms $\\rightarrow$ error of single step is $\\mathcal{O}(h^2)$\n", "- with Euler we don't take one step, but many. \n", "- total number of steps $N = (b- a)/h$, where solution is calculated from $t = a$ to $t =b$\n", "- accumulative error:\n", " $$\n", " \\begin{align}\n", " \\sum_{k=0}^{N-1}\\frac{1}{2}h^2\\left(\\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2}\\right)_{t=t_k} &= \\frac{1}{2}h \\sum_{k=0}^{N-1}h\\left(\\frac{\\mathrm{d}f}{\\mathrm{d}t}\\right)_{t=t_k}\\\\\n", " &\\approx \\frac{1}{2}h \\int_a^b \\left(\\frac{\\mathrm{d}f}{\\mathrm{d}t}\\right) = \\frac{1}{2}h \\left[f(x(b),b)-f(x(a),a)\\right]\n", " \\end{align}\n", " $$\n", " \n", " Total error is $\\mathcal{O}(h)$ !!" ] }, { "cell_type": "markdown", "id": "classical-karaoke", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "The accumulative error is linear in $h$, which means the total error goes down by a factor of two when we make $h$ half as large. To make the calculation more accurate, it will take proportionally longer. This might not be a problem for our example, but for the simulation of the water film on top of a platinum slab shown above (where the interactions are described at the quantum mechanics level) this would add weeks of additional computation time. " ] }, { "cell_type": "markdown", "id": "careful-taxation", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Impact of error propagation" ] }, { "cell_type": "markdown", "id": "seasonal-mention", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ " Example: Earth (blue) + moon (gray) orbiting around sun (yellow)\n", "\n", "- Equations of motion solved by Euler method (= \"Lazy man\" method)\n", "- yields qualitively wrong results\n", "- Video by Miguel Caro (Advanced Statistical Physics course at Aalto), see also https://youtu.be/nHAZGkKn1-g " ] }, { "cell_type": "code", "execution_count": 11, "id": "outdoor-fundamentals", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/html": [ "\n", " \n", "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "play_lazy_man()" ] }, { "cell_type": "markdown", "id": "backed-charity", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "In the video you see a comparison between approximate and \"exact\" trajectories (where \"exact results\" are obtained with a better method and very small time step $h$. We see in this simulation that the Euler method performs terribly. The accumulated error leads to completely nonsensical behavior. Our Moon-like object shots away into an unstable orbit. " ] }, { "cell_type": "markdown", "id": "geographic-underground", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Can we improve Euler's method?\n", "\n", " Idea : We could keep the order $h^2$ in the Taylor expansion. The $h^2$ term is\n", "\n", "$$\n", "\\frac{1}{2}h^2\\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} = \\frac{1}{2}h^2 \\frac{\\mathrm{d}f}{\\mathrm{d}t}\n", "$$\n", "\n", "- would yield more accurate expression\n", "- problem: we need an explicit expression of $f$ to calculate $\\mathrm{d}f/\\mathrm{d}t$ $\\rightarrow$ not always the case\n", "\n", "Conclusion: don't use Euler, there are better methods, e.g., Runge-Kutta\n", "\n" ] }, { "cell_type": "markdown", "id": "simple-thumb", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Side note: Euler's method is not completely useless, it will become relevant again for partial differential equations. " ] }, { "cell_type": "markdown", "id": "former-leader", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Runge Kutta method\n", "\n", "- actually set of methods\n", "- second-order and fourth-order Runga method\n", "- technically, Euler is a first-order Runge Kutta\n", "- increasing accuracy with increasing order\n", "\n" ] }, { "cell_type": "markdown", "id": "entitled-arbitration", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Second-order Runge Kutta (RK2) method\n", "\n", "\n", "(Figure from \"Computational Physics\" by Marc Newman.)\n", "\n", "Euler's method and the RK2 method: Euler's method is equivalent to taking the slope $\\mathrm{d}x/\\mathrm{d}t$ at time $t$ and extrapolating it into the future to time $t+h$. A better approximation is to perform the extrapolation using the slope at time $t + \\frac{1}{2}h$. This is the idea of the RK2 method. " ] }, { "cell_type": "markdown", "id": "polish-seeker", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Rational: The curve represent the true form of $x(t)$, which we are trying to calculate. From $\\mathrm{d}x/\\mathrm{d}t = f(x,t)$ we know that the slope of the solution is equal to the function $f(x,t)$. Given the value of $x$ at time $t$ we can calculate the slope at that point, as shown in the figure. Then we extrapolate that slope to time $t+h$ $\\rightarrow$ we get $x(t+h)$ (Euler's method). This would work perfectly, if the curve was a straight line, but not if it is curved. Better: calculate slope at $t+\\frac{1}{2}h$. This is what we do in RK2, which is the reason why it is also called \"midpoint method\". " ] }, { "cell_type": "markdown", "id": "adjusted-danish", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Derivation of the RK2 equations\n", "\n", "- First step: Taylor expansion around $t+\\frac{1}{2}h$ to get value of $x(t+h)$. \n", "\n", "$$\n", " x(t+h) = x\\left(t+\\frac{1}{2}h\\right) + \\frac{1}{2}h\\left(\\frac{\\mathrm{d}x}{\\mathrm{d}t}\\right)_{t+\\frac{1}{2}h} + \\frac{1}{8}h^2\\left(\\frac{\\mathrm{d}x}{\\mathrm{d}t}\\right)_{t+\\frac{1}{2}h} + \\mathcal{O}(h^3)\n", "$$\n", "\n", "- Second step: Taylor expansion around $t+\\frac{1}{2}h$ to get value of $x(t)$. \n", "\n", "$$\n", " x(t) = x\\left(t+\\frac{1}{2}h\\right) - \\frac{1}{2}h\\left(\\frac{\\mathrm{d}x}{\\mathrm{d}t}\\right)_{t+\\frac{1}{2}h} + \\frac{1}{8}h^2\\left(\\frac{\\mathrm{d}x}{\\mathrm{d}t}\\right)_{t+\\frac{1}{2}h} + \\mathcal{O}(h^3)\n", "$$\n", "\n", "- Third step: Subtract the second from the first expression\n", "\n", "$$\n", "\\begin{align}\n", "x(t+h) &= x(t) + h\\left(\\frac{\\mathrm{d}x}{\\mathrm{d}t}\\right)_{t+\\frac{1}{2}h} + \\mathcal{O}(h^3)\\\\\n", " &= x(t) + hf\\left(x\\left(t+\\frac{1}{2}h\\right),t+\\frac{1}{2}h\\right) + \\mathcal{O}(h^3)\n", "\\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "streaming-minneapolis", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The error term is now $\\mathcal{O}(h^3)$! This is nice because our method will be more accurate. Problem: we don't have $x\\left(t+\\frac{1}{2}h\\right)$, only $x(t)$ 🤔" ] }, { "cell_type": "markdown", "id": "collected-exercise", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "- Fourth step: use Euler to approximate $x\\left(t+\\frac{1}{2}h\\right)$\n", "\n", " $$\n", " x\\left(t+\\frac{1}{2}h\\right) = x(t) + \\frac{1}{2}h f(x,t)\n", " $$\n", " \n", " and then substitute it into the equation above\n", " " ] }, { "cell_type": "markdown", "id": "offshore-lender", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Working equations for RK2\n", "\n", "$$\n", " \\begin{align}\n", " k_1 &= h f(x,t) \\\\\n", " k_2 &= hf\\left(x+\\frac{1}{2}k_1,t+\\frac{1}{2}h\\right)\\\\\n", " x(t+h) &= x(t) + k_2\n", " \\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "foreign-spine", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for RK2 method \n", "\n", "We want to solve again\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} = (\\cos t) x(t)\n", "$$\n", "\n", "with the initial condition $x=1$ at $t=0$." ] }, { "cell_type": "code", "execution_count": 5, "id": "fallen-framing", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step size 0.2\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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mnRsoljtglFZpxrQswt7e0+kXtk4jxxWlHj2rH+rzZ07FxFxSYHEN954AxGhvLz8rPZbtmwZjzzyCKb5/c7j8vJyRIQ33nij/YI8CzuqqulRmUOgVLNckpgYFeLS84sI8aNTKDAHM8e2Wo/SaqSTiJtbsHEPs22ZlJoDiIwd69KmrCZpcRFkmiO4wMhhYaHuF2mrmpoaPvzwQwDeeecdGhoaLI6oecuWLePRRx/9QRLp168fGRkZlhV3XLJpP9ONtdQpHxzhkwjwdX3pvzmj+vOFI41Eo4yiwg1Un3DP36Er6STixpqaspJlE/Mdqcxy0aisU00f0YeF5hgijd1s3ZRHvR7e2CaffvopR44cYebMmezfv59vvvnG6pDOip+fH6mpqVhVPmhR4V6mG7msMuOYGDPYkhiG9+3OxqDpAEw1M8jccsCSONyJTiJuLKe8iuSalRiiWO0/od3LvrdWbP9A8ruNB2Bc/RqyturhjW3x5ptvEhQUxBtvvEGXLl146623vvf8I488gohQWlrKrFmz6NatG4MHD+YPf/jD9+4Kamtruffee4mLi6Nbt2707duXiy++mE2bNp32/LNnzyYxMfEH27du3YphGLz00ks88sgjPProowD4+PggIt9VrW2pOWv58uWcf/759OjRg65duzJq1Chee+21tvwTtehYXQMHtm5gkFHBYjORqS4a2nsqESEuJpYicyCTjA26XwT3KAWvteDr/L3Msq1hkzmQ6FFjsdusyfkiwsiYWDbmhnO+LZf5hfsYH+na9mi+/jXsPZcKOe2g70iY8ec27bp7924WLVrE7bffTmhoKJdeeimffPIJBw8eJCgo6Huvveyyy7jlllu49957+fLLL3n44YcZOHAgt9zirFNaV1fH0aNH+d3vfke/fv2oqqri+eefJzU1lU2bNtG3b/MdznfffTezZs0iKyuL5OTk77a//PLLdO3aleuvv57Dhw+zc+dOXnvtNVatWoXNdvqaVJ9//jlXXHEF48eP56WXXiIkJISCggK2bdvWpn+nlqwqrWBy4yz17SETGdCzS7se/2xMjAphxep4brb9lydKdgCxlsXiDnQScWO5xVv5f1LMPx2XclGca0einGp6TB8WZiXxS/vHPFJQjLo4Rq+rcBbmzZuHaZrceOONANx000289957fPDBB9x5553fe+3999//XcKY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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import cos, sin, exp,arange\n", "from matplotlib import pyplot as plt\n", "\n", "\"\"\" Define function \"\"\"\n", "def f(x,t):\n", " return cos(t) * x\n", "\n", "\"\"\"Initial values and parameters\"\"\"\n", "a = 0.0 # Start of the interval\n", "b = 10.0 # End of the interval\n", "N = 50 # Number of steps\n", "h = (b-a)/N # Step size\n", "print ('Step size', h)\n", "x = 1.0 # Initial condition\n", "\n", "tpoints = arange(a,b,h)\n", "xpoints_rk2 =[]\n", "xpoints_analytic =[]\n", "\n", "\"\"\" Solve with RK2 \"\"\"\n", "for t in tpoints:\n", " xpoints_analytic.append(exp(sin(t)))\n", " xpoints_rk2.append(x)\n", " k1 = h*f(x,t)\n", " k2 = h*f(x+0.5*k1,t+0.5*h)\n", " x += k2\n", "\n", "\"\"\" Plot results \"\"\"\n", "plt.rc('font', size=16)\n", "plt.plot(tpoints,xpoints_rk2,label='RKS',linewidth=3.0)\n", "plt.plot(tpoints,xpoints_analytic,label='Analytic',)\n", "plt.xlabel('t')\n", "plt.ylabel('x')\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "becoming-davis", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Play with the variable $N$, which controls the step size $h$. Try $N = 10, 20, 50, 100$. How does the result compare to Euler's method? You should find that you can use much larger step sizes with RK2 than with Euler's method." ] }, { "cell_type": "markdown", "id": "dedicated-breast", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Error of the RK2 method\n", "\n", "- Does approximating $x(t+0.5h)$ by Euler's method increase the scaling of the error? \n", " $\\rightarrow$ No! Check by expanding $f(x+0.5k_1,t+0.5h)$ in its first argument around $x(t+0.5h)$\n", "\n", "- RK2 has an error of order $\\mathcal{O}(h^3)$ for a single step\n", "\n", "- accumulative error is of order $\\mathcal{O}(h^2)$" ] }, { "cell_type": "markdown", "id": "african-ceramic", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "You can also \"measure\" the accumulative error by computing the error between analytic and numerical method at time $t=b$ for different steps sizes $h$. A power-law fit yields then the order of the error. You will do this in exercise 5.1 for the fourth-order Runge-Kutta method. If you are motivated, you can also test it for RK2. " ] }, { "cell_type": "markdown", "id": "interracial-segment", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Fourth-order Runge Kutta (RK4) method\n", "\n", "We can perform similar Taylor expansions around various points and then taking linear combinations of them. We can then again arrange for terms in $h^3$ and $h^4$ etc. In this way, we can get increasingly accurate solvers. \n", "\n", "- equations get more complicated with higher order\n", "- very common: fourth-order rule\n", "- RK4 considered good balance between high accuracy and complexity of equation" ] }, { "cell_type": "markdown", "id": "interesting-armstrong", "metadata": {}, "source": [ "### Working equations for RK4\n", "\n", "$$\n", " \\begin{align}\n", " k_1 &= h f(x,t) \\\\\n", " k_2 &= hf\\left(x+\\frac{1}{2}k_1,t+\\frac{1}{2}h\\right)\\\\\n", " k_3 &= hf\\left(x+\\frac{1}{2}k_2,t+\\frac{1}{2}h\\right)\\\\\n", " k_4 &= hf\\left(x+k_3,t+h\\right)\\\\\n", " x(t+h) &= x(t) + \\frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4)\n", " \\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "freelance-canon", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for RK4 method \n", "\n", "We want to solve again\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} = (\\cos t) x(t)\n", "$$\n", "\n", "with the initial condition $x=1$ at $t=0$." ] }, { "cell_type": "code", "execution_count": 6, "id": "upset-final", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Step size 0.2\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import cos, sin, exp,arange\n", "from matplotlib import pyplot as plt\n", "\n", "\"\"\" Define function \"\"\"\n", "def f(x,t):\n", " return cos(t) * x\n", "\n", "\"\"\"Initial values and parameters\"\"\"\n", "a = 0.0 # Start of the interval\n", "b = 10.0 # End of the interval\n", "N = 50 # Number of steps\n", "h = (b-a)/N # Step size\n", "print ('Step size', h)\n", "x = 1.0 # Initial condition\n", "\n", "tpoints = arange(a,b,h)\n", "xpoints_rk4 =[]\n", "xpoints_analytic =[]\n", "\n", "\"\"\" Solve with RK4 \"\"\"\n", "for t in tpoints:\n", " xpoints_analytic.append(exp(sin(t)))\n", " xpoints_rk4.append(x)\n", " k1 = h*f(x,t)\n", " k2 = h*f(x+0.5*k1,t+0.5*h)\n", " k3 = h*f(x+0.5*k2,t+0.5*h)\n", " k4 = h*f(x+k3,t+h)\n", " x += (k1+2*k2+2*k3+k4)/6\n", " \n", "\"\"\" Plot results \"\"\"\n", "plt.rc('font', size=16)\n", "plt.plot(tpoints,xpoints_rk4,label='RK4',linewidth=3.0)\n", "plt.plot(tpoints,xpoints_analytic,label='Analytic',)\n", "plt.xlabel('t')\n", "plt.ylabel('x')\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "breathing-display", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Play again with the variable $N$, which controls the step size $h$. What do you find?" ] }, { "cell_type": "markdown", "id": "sophisticated-imagination", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Error of the RK4 method\n", "\n", "- RK4 has an error of order $\\mathcal{O}(h^5)$ for a single step\n", "\n", "- accumulative error is of order $\\mathcal{O}(h^4)$\n", "\n", "\n", "- RK4 is often method of choice for many problems\n", "- there are exceptions, where other solvers are better suited. We will discuss them later" ] }, { "cell_type": "markdown", "id": "statutory-graduate", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "So far we only applied the Euler and RK methods to 1st-order ODEs with one dependent variable. \n", "Before discussing other numerical solvers for ODEs, we learn how to\n", "\n", "- use these solvers for ODEs with more than one variable\n", "- second-order ODEs" ] }, { "cell_type": "markdown", "id": "humanitarian-integral", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Simultaneous differential equations\n", "\n", "- So far we only looked at ODEs with one dependent variable $x$. \n", "- We have often more than one $\\rightarrow$ simultaneous differential equations\n", "\n", "- Example:\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} = x(t)y(t) -x(t), \\qquad \\frac{\\mathrm{d}y(t)}{\\mathrm{d}t} = y(t) -x(t)y(t) + sin^2(\\omega t) \n", "$$\n", "\n", "- there is still only one(!) independet variable $t$" ] }, { "cell_type": "markdown", "id": "failing-museum", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "These equations are still ODEs, not partial differential equations. " ] }, { "cell_type": "markdown", "id": "virtual-opera", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The general form for two simultaneous ODEs is\n", "\n", "$$\n", "\\frac{\\mathrm{d}x(t)}{\\mathrm{d}t} = f_x(x,y,t), \\qquad \\frac{\\mathrm{d}y(t)}{\\mathrm{d}t} = f_y(x,y,t) \n", "$$\n", "\n", "where $f_x$ and $f_y$ are general, possibly nonlinear functions of $x$, $y$ and $t$. This can be also written in vector form for an arbitrary number of variables \n", "\n", "\n", "$$\n", "\\frac{\\mathrm{d}\\mathbf{r}}{\\mathrm{d}t} = \\mathbf{f}(\\mathbf{r},t)\n", "$$\n", "\n", "where $\\mathbf{r} = (x,y,...)$ and $\\mathbf{f}$ is a vector of functions $\\mathbf{f}(\\mathbf{r},t) = (f_x(\\mathbf{r},t),f_y(\\mathbf{r},t)...)$\n" ] }, { "cell_type": "markdown", "id": "electric-prince", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Numerical solution of simultaneous differential equations\n", "\n", "The working equations for, e.g., Euler's method and the RK4 method can be straigthforwardly expanded to the multi-variable case\n", "\n", "- Euler's method\n", " $$\n", " \\mathbf{r}(t+h) = \\mathbf{r}(t) + h\\mathbf{f}(\\mathbf{r},t)\n", " $$\n", " \n", "- RK4 method\n", " \n", " $$\n", " \\begin{align}\n", " \\mathbf{k}_1 &= h \\mathbf{f}(\\mathbf{r},t) \\\\\n", " \\mathbf{k_2} &= h\\mathbf{f}\\left(\\mathbf{r}+\\frac{1}{2}\\mathbf{k}_1,t+\\frac{1}{2}h\\right)\\\\\n", " \\mathbf{k_3} &= h\\mathbf{f}\\left(\\mathbf{r}+\\frac{1}{2}\\mathbf{k}_2,t+\\frac{1}{2}h\\right)\\\\\n", " \\mathbf{k_4} &= h\\mathbf{f}\\left(\\mathbf{r}+\\mathbf{k}_3,t+h\\right)\\\\\n", " \\mathbf{r}(t+h) &= \\mathbf{r}(t) + \\frac{1}{6}(\\mathbf{k}_1 + 2\\mathbf{k}_2 + 2\\mathbf{k}_3 + \\mathbf{k}_4)\n", " \\end{align}\n", "$$\n", " " ] }, { "cell_type": "markdown", "id": "arbitrary-midnight", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example for simultaneous ODEs\n", "\n", "Let's try to find the solution with RK4 for \n", "\n", "$$\n", "\\frac{\\mathrm{d}x}{\\mathrm{d}t} = xy -x, \\qquad \\frac{\\mathrm{d}y}{\\mathrm{d}t} = y -xy + sin^2(\\omega t) \n", "$$\n", "\n", "for $t=0$ to $t = 10$ and $\\omega = 1$ with initial conditions $x=y=1$ at $t=0$ \n" ] }, { "cell_type": "code", "execution_count": 7, "id": "surface-leave", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import sin, array, arange\n", "from matplotlib import pyplot as plt\n", "\n", "\"\"\"Initial values and parameters\"\"\"\n", "a = 0.0 # Start of the interval\n", "b = 10.0 # End of the interval\n", "N = 100 # Number of steps\n", "h = (b-a)/N # Step size\n", "r = array([1.0,1.0]) # Initial condition: r[0] = x = 1 and r[1] = y = 1\n", "\n", "\n", "\"\"\" Define function \"\"\"\n", "def f(r,t):\n", " x = r[0]\n", " y = r[1]\n", " fx = x*y - x\n", " fy = y - x*y + sin(t)**2\n", " return array([fx,fy],float)\n", "\n", "\n", "tpoints = arange(a,b,h)\n", "xpoints = []\n", "ypoints = []\n", "\n", "\"\"\" Solve with RK4 \"\"\"\n", "for t in tpoints:\n", " xpoints.append(r[0])\n", " ypoints.append(r[1])\n", " k1 = h*f(r,t)\n", " k2 = h*f(r+0.5*k1,t+0.5*h)\n", " k3 = h*f(r+0.5*k2,t+0.5*h)\n", " k4 = h*f(r+k3,t+h)\n", " r += (k1+2*k2+2*k3+k4)/6\n", " \n", "\"\"\" Plot results \"\"\"\n", "plt.rc('font', size=16)\n", "plt.plot(tpoints,xpoints,label='x',linewidth=3.0)\n", "plt.plot(tpoints,ypoints,label='y',linewidth=3.0)\n", "plt.xlabel('t')\n", "plt.ylabel('x')\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "appointed-motion", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Note that the program is almost identical to the RK4 program, except for the definition of the function $\\mathbf{f}(\\mathbf{r},t)$ which is slightly more diffcult." ] }, { "cell_type": "markdown", "id": "legal-vegetarian", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Solving second-order ODEs numerically\n", "\n", "Second-order ODEs have the general form of\n", "\n", "$$\n", " \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} = f\\left(x,\\frac{\\mathrm{d}x}{\\mathrm{d}t},t \\right)\n", "$$\n", "\n", "Solving these equations numerically is actually quite simple due to the following trick. We can define a new quantity $y$ and rewrite the 2nd-order ODE\n", "\n", "$$\n", " \\frac{\\mathrm{d}x}{\\mathrm{d}t} = y, \\qquad \\frac{\\mathrm{d}y}{\\mathrm{d}t} = f(x,y,t)\n", "$$" ] }, { "cell_type": "markdown", "id": "incoming-wales", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ " Comment: First-order equation are quite rare in physics. Many ODEs are second-order and higher. For higher orders we can do a similar trick. For example, for a third-order equation we would define two additional variables and obtain three simultaneous first-order equations. " ] }, { "cell_type": "markdown", "id": "recreational-beauty", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example 1:\n", "\n", "We have\n", "\n", "$$\n", " \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} = 2 \\frac{\\mathrm{d}x}{\\mathrm{d}t} - x^3\\mathrm{e}^{4t}\n", "$$\n", "\n", "Now we apply our trick\n", "\n", "$$\n", " \\frac{\\mathrm{d}x}{\\mathrm{d}t} = y, \\qquad \\frac{\\mathrm{d}y}{\\mathrm{d}t} = 2 y - x^3\\mathrm{e}^{4t}\n", "$$\n", "\n", "We have now two simultaneous first-order ODEs, that we can solved as described above" ] }, { "cell_type": "markdown", "id": "stupid-evaluation", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Example 2: Nonlinear pendulum\n", "\n", "Consider a pendulum with an arm of length $l$ holding a bob of mass $m$:\n", "\n", "\n", "\n", "We ignore friction and assume the arm is massless. The differential equation for the pendulum has the form:\n", "\n", "$$\n", "\\frac{\\mathrm{d}^2\\theta}{\\mathrm{d}t^2} = - \\frac{g}{l}\\sin(\\theta)\n", "$$\n", "\n", "Transform into two first-order equations\n", "\n", "$$\n", "\\begin{align}\n", " \\frac{\\mathrm{d}\\theta}{\\mathrm{d}t} & = \\omega \\\\\n", " \\frac{\\mathrm{d}\\omega}{\\mathrm{d}t} &= - \\frac{g}{l}\\sin(\\theta)\n", "\\end{align}\n", "$$\n" ] }, { "cell_type": "markdown", "id": "transsexual-eligibility", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "The second-order ODE is not easily solved analytically (small angle approximation are possible though). However, solving it numerically on the computer is straightforward." ] }, { "cell_type": "code", "execution_count": 8, "id": "manufactured-cheat", "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from numpy import sin\n", "g = 9.81\n", "l = 0.1 # Lenght of arm is 10 cm\n", "\n", "def f(r,t):\n", " theta = r[0]\n", " omega = r[1]\n", " ftheta = omega\n", " fomega = -(g/l)*sin(theta)\n", " return array([ftheta,fomega],float)\n" ] }, { "cell_type": "markdown", "id": "american-promotion", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Solving simultaneous second-order ODEs \n", "\n", "The trick works also for simultaneous second-order ODEs, e.g., Newton's equation of motion. The general form\n", " is\n", " \n", "$$\n", " \\frac{\\mathrm{d}^2\\mathbf{r}}{\\mathrm{d}t^2} = \\mathbf{f}\\left(\\mathbf{r},\\frac{\\mathrm{d}\\mathbf{r}}{\\mathrm{d}t},t\\right) \n", "$$\n", "\n", "which can be transformed to \n", "\n", "$$\n", " \\frac{\\mathrm{d}\\mathbf{r}}{\\mathrm{d}t} = \\mathbf{s}, \\qquad \\frac{\\mathrm{d}\\mathbf{s}}{\\mathrm{d}t} = \\mathbf{f}\\left(\\mathbf{r},\\mathbf{s},t\\right) \n", "$$\n", "\n" ] }, { "cell_type": "markdown", "id": "silver-generic", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Let's say we start with three simultaneous equations, e.g., Newton's equations of motion, where we have $\\mathbf{r} = (x,y,z)$, after applying our trick we end up with six simultaneous first-order equations." ] }, { "cell_type": "markdown", "id": "tested-newfoundland", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Other integrators\n", "\n", "- Leapfrog\n", "- Verlet\n", "- (Bulirsch-Stoer)\n", "\n", "$\\rightarrow$ less widely used than Runge-Kutta methods, but popluar to solve Newton's equation of motion\n" ] }, { "cell_type": "markdown", "id": "massive-destiny", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Runge-Kutta methods, in particular RK4, are widely used, but other integrators are more suitable for certain problems. For example, Runge-Kutta methods are rarely used for molecular dynamics. Leapfrog and Verlet are much more common for these calculations. The reasons will be explored in the next lecture." ] }, { "cell_type": "markdown", "id": "beneficial-jenny", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Leapfrog method\n", "\n", "\n", "Scheme comparing RK2 and leapfrog (Figure adapted from \"Computational Physics\" by Marc Newman)\n", "\n", "\n", "\n", "- RK2: \n", "$$\n", " \\begin {align}\n", " x(t+h) &= x(t) + hf\\left(x\\left(t+\\frac{1}{2}h\\right),t+\\frac{1}{2}h\\right)\\\\\n", " x\\left(t+\\frac{1}{2}h\\right) &= x(t) + \\frac{1}{2}hf(x,t)\n", " \\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "reduced-insurance", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- Leapfrog (for step > 1):\n", " $$\n", " \\begin {align}\n", " x\\left(t+\\frac{3}{2}h\\right) &= x\\left(t+\\frac{1}{2}h\\right) + hf(x(t+h),t+h)\\\\\n", " x\\left(t+2h\\right) &= x(t+h) + hf\\left(x\\left(t+\\frac{3}{2}h\\right),t+\\frac{3}{2}h\\right)\n", " \\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "verbal-polyester", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "The figure above shows a graphical representation of the RK2 method. At each step we calculate the solution at the midpoint and then use this solution to calculate $x(t+h)$. \n", "The leapfrog method is a variant of RK2. We start as with RK2 and make a half step followed by a full step, as depicted in the figure. The difference comes in the next step. Rather than calculating the next midpoint, $x\\left(t+\\frac{3}{2}h\\right)$, from $x(t+h)$, we calculate it from the previous midpoint, which is $x\\left(t+\\frac{1}{2}h\\right)$. Graphically, each step is \"leaping\" (like a frog) over the previous one. That is where the name is coming from. " ] }, { "cell_type": "markdown", "id": "cardiac-kernel", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Working equations for Leapfrog method\n", "\n", "$$\n", "\\begin{align}\n", " x\\left(t+h\\right) &= x(t) + hf\\left(x\\left(t+\\frac{1}{2}h\\right),t+\\frac{1}{2}h\\right)\\\\\n", " x\\left(t+\\frac{3}{2}h\\right) &= x\\left(t+\\frac{1}{2}h\\right) + hf(x(t+h),t+h)\\\\\n", "\\end{align}\n", "$$" ] }, { "cell_type": "markdown", "id": "animated-roommate", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ " Comment Your task in exercise 5.3 is to figure out how to implement the Leapfrog method in a computer program. A few hints: Set the initial value for $x(t)$ given by the initial conditions. Then calculate the value for the second point (i.e. the first midpoint, which is $x(t+0.5h)$) as in RK2. You can then use it to calculate $x(t+h)$, which you can then again use to calculate $x(t+1.5h)$. Iterate until $t_{\\mathrm{end}}$." ] }, { "cell_type": "markdown", "id": "catholic-sound", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Working equations for Leapfrog method for simultaneous ODEs\n", "\n", "The extension of the formalism is, as for Euler's and RK methods, straightforward\n", "\n", "$$\n", "\\begin{align}\n", " \\mathbf{r}\\left(t+h\\right) &= \\mathbf{r}(t) + h\\mathbf{f}\\left(\\mathbf{r}\\left(t+\\frac{1}{2}h\\right),t+\\frac{1}{2}h\\right)\\\\\n", " \\mathbf{r}\\left(t+\\frac{3}{2}h\\right) &= \\mathbf{r}\\left(t+\\frac{1}{2}h\\right) + h\\mathbf{f}(\\mathbf{r}(t+h),t+h)\\\\\n", "\\end{align}\n", "$$" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "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.6.13" } }, "nbformat": 4, "nbformat_minor": 5 }