From 057aae72bd609414f44440bfeac958432b683851 Mon Sep 17 00:00:00 2001 From: ehubler Date: Wed, 17 Dec 2014 11:37:35 -0500 Subject: [PATCH] Elizabeth Hubler Final Project --- .../4th Order Runge-Kutta.ipynb | 384 ++++++++++++++++++ .../HublerFinalProject/numericalmoocstyle.css | 141 +++++++ 2 files changed, 525 insertions(+) create mode 100644 Final projects/HublerFinalProject/4th Order Runge-Kutta.ipynb create mode 100755 Final projects/HublerFinalProject/numericalmoocstyle.css diff --git a/Final projects/HublerFinalProject/4th Order Runge-Kutta.ipynb b/Final projects/HublerFinalProject/4th Order Runge-Kutta.ipynb new file mode 100644 index 0000000..41359df --- /dev/null +++ b/Final projects/HublerFinalProject/4th Order Runge-Kutta.ipynb @@ -0,0 +1,384 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:bb01489c8e0d1a1415475fe5fd36d6f9f52cafa819ca770d1ba89860ac828f81" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Content under Creative Commons Attribution license CC-BY 4.0, Elizabeth Hubler for Professor L.A. Barba's MAE 6286 course at The George Washington University. Some adaptations from numericalmooc which is also under CC-BY." + ] + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Runge-Kutta Methods" + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Welcome back!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In our last module, we showed a screencast which used a Taylor series expansion to show that Euler's method incurs a first order truncation error. \n", + "\n", + "Now, we are going to take this a step further and explore another important family of iterative methods which are used to discretize ordinary differential equations: the Runge-Kutta Methods. \n", + "\n", + "Runge-Kutta methods look similar to Euler's method, in fact we computed the motion of a flider using a second-order Runge-Kutta.\n", + "\n", + "In this bonus notebook, we will dig deeper into a fourth-oder Runge-Kutta method which is often preferred for computer applications since it yields higher accuracy with less computational effort." + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Let's get started! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we will look at the math behind a fourth-order Runge-Kutta. \n", + "\n", + "Let \\frac{dy}{dx}=f(x,y)\n", + "\n", + "with initial conditions y(0)=y_{0}\n", + "\n", + "We want to find the dependent variable y as a function of x numerically. \n", + "\n", + "A fourth-oder Runge-Kutta is based on the first five terms of the Taylor series expansion: \n", + "\n", + "{y_{i+1}} = {y_{i}} + \\frac{\\mathrm{d} }{\\mathrm{d} x}|_{x_{i}y_{i}}(x_{i+1}-x_{i})+\\frac{1}{2!}\\frac{d^{2}y}{dx^{2}}|_{x_{i}y_{i}}(x_{i+1}-x_{i})^{2}+\\frac{1}{3!}\\frac{d^{3}y}{dx^{3}}|_{x_{i}y_{i}}(x_{i+1}-x_{i})^{3}+\\frac{1}{4!}\\frac{d^{4}y}{dx^{4}}|_{x_{i}y_{i}}(x_{i+1}-x_{i})^{4}+0(x_{i+1}-x_{i})^{5}\n", + "\n", + "Since we stated earlier that \\frac{dy}{dx}=f(x,y), we can substitute this value of f in for \\frac{dy}{dx}:\n", + "y_{i+1}=y_{i}+f(x_{i},y_{i})h+\\frac{1}{2!}f'(x_{i},y_{i})h^{2}+\\frac{1}{3!}f''(x_{i},y_{i})h^{3}+\\frac{1}{4!}f'''(x_{i},y{i})h^{4}\n", + "\n", + "From here, Runge-Kutta assumed a formula to be of the following form: \n", + "y_{i+1}=y_{i}+(a_{1}k_{1}+a_{2}k_{2}+a_{3}k_{3}+a_{4}k_{4})h\n", + "\n", + "Comparing these last two equations, Runge-Kutta developed something known as the RK4 Method which is commonly used and accepted today: \n", + "y_{i+1}=y_{i}+\\frac{1}{6}(k_{1}+2k_{2}+2k_{3}+k_{4})h\n", + "where, \n", + "k_{1}=f(x_{i},y_{i})\n", + "k_{2}=f(x_{i}+\\frac{1}{2}h,y_{i}+\\frac{1}{2}k_{1}h)\n", + "k_{3}=f(x_{i}+\\frac{1}{2}h,y_{i}+\\frac{1}{2}k_{2}h)\n", + "k_{4}=f(x_{i}+h,y_{i}+k_{3}h)\n", + "\n", + "Although there are an infinite number of possible Runge-Kutta methods depending on what values are chosen, the RK4 Method is what this bonus notebook will focus on. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Do you feel comfortable with how we got to the RK4 Method? \n", + "\n", + "If so, great, let's look at a problem and start figuring out how to actually use the RK4 Method. " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "The Problem: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will look at a damped pendulum oscillating according to the following equation using a fourth-order Runge-Kutta method." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equation of Motion: \\theta_{dot} = -\\mu*\\omega+mgl\\sin\\theta + \\frac{u}{ml^{2}}" + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "The Approach: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we must remember to load in our libraries and modules that we will use. Recall that rcParams are some of the automatic plotting formats that we have access to. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import math \n", + "import numpy as np\n", + "from numpy import *\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we set up the problem by listing the model parameters. In this case, we will look at the pendulum for 40 seconds at dt=0.05. The pendulum has a mass of 1.0g, and length of 1.0m, a coefficient of friction of 0.1, 0 torque, and we will consider the acceleration due to gravity to be 9.81 \\frac{m}{s^{2}}." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# model parameters \n", + "\n", + "dt = 0.05 # dt \n", + "t = 40. # time \n", + "n = int(t/dt) # number of time-steps\n", + "\n", + "m = 1.0 # mass [g]\n", + "g = 9.8 # acceleration due to gravity [m/s^2]\n", + "l = 1.0 # length of pendulum [m]\n", + "mu = 0.1 # coefficient of friction\n", + "u = 0 # torque" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need to start with empty arrays for our theta and omega values to fill into. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "X = (pi/4., 0)\n", + "theta = np.empty(n)\n", + "theta[0] = pi/4\n", + "omega = np.empty(n)\n", + "omega[0] = 0 # frequency of oscillation" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our equation of motion or EOM is definined next as a function. It is important to define the EOM as a function so each value can be called through the EOM at each time-step. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def EOM(t, X):\n", + " \n", + " theta = X[0]\n", + " omega = X[1]\n", + " \n", + " omega_dot = -mu*omega+m*g*l*sin(theta)+u/(m*(l**2.))\n", + " \n", + " Xdot = np.empty(2)\n", + "\n", + " Xdot[0] = omega\n", + " Xdot[1] = omega_dot\n", + " \n", + " return (Xdot)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function will return Xdot which are arrays of omega values and omega_dot values which we will use in just a bit! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now comes the slightly tricky part of a fourth-order method, what do you do with all those extra k values we mentioned earler??\n", + "\n", + "Luckily for us, Python lets us have as many variables as we want, but the point of coding is to simplify problems not create more things for our brains to keep track of, so how can we update only the variables we want through each time-step....? \n", + "\n", + "Did you guess a 'for' loop? If you did, you're absolutely correct! 'For' loops are our best friends for simplyfing and iterating through tricky changing equations. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for i in range(n-1):\n", + " \n", + " t = dt*i\n", + " k0 = dt*EOM(t,X)\n", + " k1 = dt*EOM(t + dt/2., X + k0/2.)\n", + " k2 = dt*EOM(t + dt/2., X + k1/2.)\n", + " k3 = dt*EOM(t + dt, X + k2)\n", + " \n", + " X = X + (k0 + 2.*k1 + 2.*k2 + k3)/6.\n", + " theta[i+1] = X[0]\n", + " omega[i+1] = X[1]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that our first k value is listed as k0 in our code. This is because Python starts indexing at 0! \n", + "\n", + "This 'for' loop really demonstrates how amazing being able to code really is - can you imaging doing fourth-order Runge-Kutta iterations by hand?! Our seemingly short and small 'for' loop is more powerful than any of us with a pencil and notebook because our Python 'for' loop will run through what would take us a long time in just seconds. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will now plot the fourth-order Runge-Kutta approximation results for theta and omega values. We anticipate the results to look like a sine wave that has been damped (meaning the amplitude decreases as the systems oscillations reduce and the system tries to go back to equilibrium) since it is a damped pendulum. " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Let's see if the results look like something we would expect!" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "# Plotting Pendulum RK4 Results\n", + "subplot(211),plot(theta), xlabel('Angle'),ylabel('')\n", + "subplot(212),plot(omega,'r'),ylabel('')\n", + "show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n0PUAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "They do, congratulations! \n", + "\n", + "Now, play around with the model parameters to see how the pendulum motion is affected. " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Refrences" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Barba, Lorena A., et al. \"MAE 6286 Practical Numerical Methods with Python,\" GW Open edX, The George Washington University, 2014. http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about. \n", + "2. Campbell, S. A., et al. \"Friction and the Inverted Pendulum Stabilization Problem,\" http://www.math.uwaterloo.ca/~kmorris/Preprints/ipfric.pdf.\n", + "Martin, R. \"The Damped Pendulum,\" PHY 380.03, Fall 2013. http://www2.phy.ilstu.edu/~rfm/380s13/chapters/CH2.4_Pendulum.pdf.\n", + "3. Canale, R. and Chapra, S. Numerical Methods for Engineers, 6th edition, McGraw-Hill, 2009. \n", + "4. Conte, S.D. and Boor, C., Elementary Numerical Analysis, 2nd edition, McGraw-Hill, 1972. \n", + "5. \"Runge Kutta 4th Order Method: Formulas.\" YouTube. YouTube - Numericalmethodsguy, 1 April 2009, https://www.youtube.com/watch?v=hGN54bkE8Ac.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from IPython.core.display import HTML\n", + "css_file = 'C:/Users/ehubler/numerical-mooc/styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read()) " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "IOError", + "evalue": "[Errno 2] No such file or directory: 'C:/Users/ehubler/numerical-mooc/styles/numericalmoocstyle.css'", + "output_type": "pyerr", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mIOError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mIPython\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdisplay\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mHTML\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mcss_file\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'C:/Users/ehubler/numerical-mooc/styles/numericalmoocstyle.css'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mHTML\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcss_file\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"r\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mIOError\u001b[0m: [Errno 2] No such file or directory: 'C:/Users/ehubler/numerical-mooc/styles/numericalmoocstyle.css'" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/Final projects/HublerFinalProject/numericalmoocstyle.css b/Final projects/HublerFinalProject/numericalmoocstyle.css new file mode 100755 index 0000000..4c084c4 --- /dev/null +++ b/Final projects/HublerFinalProject/numericalmoocstyle.css @@ -0,0 +1,141 @@ + + + + + + +