diff --git a/01_phugoid/.gitignore b/01_phugoid/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/01_phugoid/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb b/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb new file mode 100644 index 0000000..902854f --- /dev/null +++ b/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, C. Cooper, G.F. Forsyth, A. Krishnan." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Motion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome to [**\"Practical Numerical Methods with Python!\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) This course is a collaborative, online, open education project, where we aim to give a foundation in scientific computing. The focus is on numerical solution of problems modeled by ordinary and partial differential equations.\n", + "\n", + "This IPython Notebook introduces the problem we'll be studying in the **first module** of the course: the _phugoid model of glider flight_. We'll start with some background, explaining the physics, and working out the mathematical model. \n", + "\n", + "First, we'll look at an idealized motion where there is no drag, resulting in a simple harmonic motion. We can plot some interesting trajectories that will pique your imagination. In the next notebook, you'll learn to numerically integrate the differential equation using Euler's method. But hang on ... first things first. \n", + "\n", + "The term \"phugoid\" is used in aeronautics to refer to a motion pattern where an aircraft oscillates up and down —nose-up and climb, then nose-down and descend— around an equilibrium trajectory. The aircraft oscillates in altitude, speed and pitch, with only small (neglected) variations in the angle of attack, as it repeatedly exchanges kinetic and potential energy.\n", + "\n", + "A low-amplitude phugoid motion can be just a nuisance, as the aircraft does not exceed the stall angle of attack and nothing bad happens. But the mode can also be unstable leading to a stall or even a loop!\n", + "\n", + "Look at this video showing a Cessna single-engine airplane in phugoid motion:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAaAAACAwEBAAAAAAAAAAAAAAACAwABBAUG/8QAQBAAAgIBAwEDCAgFBAIDAQEBAQIAAxEE\nEiExE0FRBRQiMmFxgZEjQlJTcpKhsRUzYsHRBkOC4SRjovDxNMIW/8QAGQEBAQEBAQEAAAAAAAAA\nAAAAAAECAwQF/8QAKBEBAAIBBAICAQQDAQAAAAAAAAERAgMSMVETIUFhBCJSgaEyYnEU/9oADAMB\nAAIRAxEAPwBlFdfYp9GnqjuEcKqvu0/KJKax2Nf4R+0PYRPpxEU8coKaj/tp8oa01/dp8oPIlhyI\nqCzeyr+6r/KJfY0/cp+UQFsEMWCZ2ra+yp+7T8oliuof7SflkyDB57o2wWaqUfdp+UQxXQf9tPyi\nZt57xJvPuk2ltfYUn/bT8ok7Cn7pPyiZO1Yd8IXtG0to7CodKk/KJDVWf9tPyiKF5MMOTJtLEtVQ\n/wBqv8olGmvORUn5RJuMm4xULYjXSRg1Jn8IgCmjPNSflEvcZecxUFgfT6furT8ok7Cnb/Lr/KIR\nJlFj4RSWUdPVn+Un5RJ2FQ/20/KIRfxEE2CWi1dnV91X+USdjT92n5RL3r3S+090UWX2NP3SflEr\nsqvu0/KI4FD1/SUwTuYy1BZRqq+6T8ogNp6T/tp+URpU9xEEhx3RUJZLaav7tPyiLOnr+7X5TTk+\nEHM0WzHTp92v5RKFNf3a/lmk+6TEIQKqe+tPkIxaqs/yk+Qh9lmEtWIqF9qFFP3afljFop+7T8ol\npXHKoHSZmlL83p7qk/KJR09XdUn5RNG2Q5EgStNXfWn5RD83p+6T8olk5lB8SUWIU1D/AGk/KIa1\n1fdJ+USltHfGKymSltBVV90n5RC7Kr7pPyiECJczRYOwp+6T8ok83q+6T8ohyRRYOwq+6T8ok7Cn\n7pPyiMzKigs0VfdJ+USjRT90n5RG5lEiKCeyo+6T8oldjV90n5RGnEA++WiwGqr7qv8AKJR09P3a\n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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('ysdU4mnRYdM')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That doesn't look too good! What's happening? \n", + "\n", + "It can get a lot worse when an aircraft enters one of these modes that is unstable. For example, one of [NASA's Helios Solar Powered Aircraft](http://www.nasa.gov/centers/dryden/history/pastprojects/Helios/) prototype broke up in mid air due to extreme phugoid oscillations!\n", + "\n", + "Helios was a proof-of-concept solar electric-powered flying wing that broke the world altitude record for a non-rocket-powered aircraft in August 2001. But in June 26, 2003, it broke something else. The aircraft entered phugoid motion after encountering turbulence near the Hawaiian Island of Kauai. The high speed in the oscillatory movement exceeded the design limits, and it ended up wrecked in the Pacific Ocean. Luckily, the Helios was remotely operated, and nobody got hurt." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The physics of phugoids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The phugoid oscillation has the aircraft pitching up and down, as it decelerates and accelerates. The trajectory might look like a sinusoid, as in the figure below. The assumption is that the forward velocity of the aircraft, $v$, varies in such a way that the angle of attack remains (nearly) constant, which means that we can assume a constant lift coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/oscillatory_trajectory.png)\n", + "#### Figure 1. Trajectory of an aircraft in phugoid motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the descending portion of the trajectory, the aircraft's velocity increases as it proceeds from a peak to the minimum height—gaining kinetic energy at the expense of potential energy. The contrary happens in the upward segment, as its velocity decreases there.\n", + "\n", + "We measure the pitch angle (between the aircraft's longitudinal axis and the horizontal) as positive when the aircraft's nose is pointing up. In the portion of the trajectory below the center-line, where it curves upwards, the pitch angle $\\theta$ is increasing: $\\dot{\\theta}>0$. And where the trajectory curves down, the pitch angle is decreasing: $\\dot{\\theta}<0$, as shown in the figure.\n", + "\n", + "Let's remind ourselves of the forces affecting an aircraft in a downward glide. Look at the figure below: we show the flight path, the forces on the glider (no thrust), and the _glide angle_ or flight path angle, $\\gamma$, between the flight path and the horizontal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces.png)\n", + "#### Figure 2. Forces on a glider." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The force of lift, $L$ —created by the airflow around the wings— is perpendicular to the trajectory, and the force of drag, $D$, is parallel to the trajectory. Both forces are expressed in terms of coefficients of lift and drag, $C_L$ and $C_D$, respectively, that depend on the wing design and _angle of attack_—the angle between the wing chord and the flight path.\n", + "\n", + "If you are not familiar with airplane aerodynamics, you might be getting confused with some terms here ... and all those angles! But be patient and look things up, if you need to. We're giving you a quick summary here.\n", + "\n", + "Lift and drag are proportional to a surface area, $S$, and the dynamic pressure: $1/2 \\rho v^2$, where $\\rho$ is the density of air, and $v$ the forward velocity of the aircraft. The equations for lift and drag are:\n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "If the glider were in equilibrium, the forces would balance each other. We can equate the forces in the directions perpendicular and parallel to the trajectory, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "L = W \\cos \\gamma \\quad \\text{and} \\quad D = W \\sin \\gamma\n", + "\\end{equation}$$\n", + "\n", + "where $W$ repesents the weight of the glider.\n", + "\n", + "In the figure, we've drawn the angle $\\gamma$ as the _glide angle_, formed between the direction of motion and the horizontal. We are not bothered with the _sign_ of the angle, because we draw a free-body diagram and take the direction of the forces into account in writing our balance equations. But later on, we will need to be careful with the sign of the angles. It can cause you a real headache to keep this straight, so be patient!\n", + "\n", + "It looks like we've set this up to do a little bit of mathematics. Are you ready?\n", + "\n", + "But before, a short glimpse of the history." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lanchester's Aerodonetics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Phugoid theory\" was first described by the British engineer Frederick W. Lanchester in _\"Aerodonetics\"_ (1909). This book is so old that it is now in the public domain, so you can actually download [from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&dq=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&pg=PA37#v=onepage&q=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&f=false) a PDF file of a scan, or read it online. \n", + "\n", + "Lanchester defines phugoid theory as the study of longitudinal stability of a flying machine (aerodone). He first considered the simplification where drag and moment of inertia are neglected. Then he included these effects, obtaining an equation of stability. In addition to describing many experiments by himself and others, Lanchester also reports on _\"numerical work ... done by the aid of an ordinary 25-cm slide rule.\"_ Go figure!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ideal case of zero drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section, we follow the derivation given by Milne-Thompson (1966), which we find a little bit easier than that of the original in \"Aerodonetics\"!\n", + "\n", + "An aircraft flying in a steady, straight horizontal flight has a lift equal to its weight. The velocity in this condition is sometimes called _trim velocity_ (\"trim\" is what pilots do to set the controls to just stay in a steady flight). Let's use $v_t$ for the trim velocity, and from $L=W$ deduce that:\n", + "\n", + "$$\\begin{equation}\n", + "W = C_L S \\times\\frac{1}{2} \\rho v_t^2\n", + "\\end{equation}$$\n", + "\n", + "The weight $W$ is constant for the aircraft, but the lift at any other flight condition depends on the flight speed, $v$. We can use the expression for the weight in terms of $v_t$ to obtain the ratio $L/W$ at any other flight velocity, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}= \\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "Imagine that the aircraft experienced a little upset, a wind gust, and it finds itself off the \"trim\" level, in a curved path with an instantaneous angle $\\theta$. In the sketch below, we exaggerate the curved trajectory of flight to help you visualize what we'll do next. The angle $\\theta$ (using the same name as Milne-Thompson) is between the _trajectory_ and the horizontal, positive up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### Figure 3. Curved trajectory of the aircraft going up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can form a free body diagram to determine the balance of forces. \n", + "\n", + "\n", + "\n", + "#### Figure 4. Free body diagram of the aircraft trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the free body diagram, we can see that\n", + "\n", + "\\begin{equation}\n", + "\\vec{L} + \\vec{W} = m\\vec{a} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "where $\\frac{v^2}{R}$ is the centripetal acceleration and $R$ is the radius of curvature of the trajectory.\n", + "If we decompose the lift and weight into their normal and tangential components we get\n", + "\n", + "\\begin{equation}\n", + "L\\hat{n} + W_n\\hat{n} + W_t\\hat{t} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "The component of the weight in the normal direction ($W_n$) is\n", + "\n", + "\\begin{equation}\n", + "W_n = -W \\cos \\theta\n", + "\\end{equation}\n", + "\n", + "If we then consider that all of the components in $\\hat{n}$ must balance out, we arrive at\n", + "\n", + "\\begin{equation}\n", + "L - W \\cos \\theta = \\frac{mv^2}{R}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as\n", + "\n", + "$$\\begin{equation}\n", + "L- W \\cos \\theta = \\frac{W}{g} \\frac{v^2}{R}\n", + "\\end{equation}$$\n", + "\n", + "where $g$ is the acceleration due to gravity. Rearrange this by dividing the equation by the weight, and use the expression we found for $L/W$, above. The following equation results:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{v^2}{v_t^2}-\\cos \\theta = \\frac{v^2}{g R}\n", + "\\end{equation}$$\n", + "\n", + "Recall that we simplified the problem assuming that there is no friction, which means that the total energy is constant (the lift does no work). If $z$ represents the depth below a reference horizontal line, the energy per unit mass is (kinetic plus potential energy):\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{2}v^2-g z = \\text{constant}\n", + "\\end{equation}$$\n", + "\n", + "To get rid of that pesky constant, we can choose the reference horizontal line at the level that makes the constant energy equal to zero, so $v^2 = 2 g z$. That helps us re-write the phugoid equation in terms of $z$ as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z}{z_t}-\\cos \\theta = \\frac{2z}{R}\n", + "\\end{equation}$$\n", + "\n", + "Let $ds$ represent a small arc-length of the trajectory. We can write \n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} \\quad \\text{and}\\quad \\sin\\theta = -\\frac{dz}{ds}\n", + "\\end{equation}$$\n", + "\n", + "Employing the chain rule of calculus,\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} = \\frac{dz}{ds}\\frac{d\\theta}{dz} = -\\sin \\theta\\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "Multiply the phugoid equation by $\\frac{1}{2\\sqrt{z}}$ to get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} - \\frac{\\cos\\theta}{2\\sqrt{z}} = \\frac{\\sqrt{z}}{R}\n", + "\\end{equation}$$\n", + "\n", + "Substituting for $1/R$ on the right hand side and bringing the cosine term over to the right, we get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} = \\frac{\\cos \\theta}{2 \\sqrt{z}} - \\sqrt{z} \\sin \\theta \\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "The right-hand-side is an exact derivative! We can rewrite it as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d}{dz} \\left(\\sqrt{z}\\cos\\theta \\right) = \\frac{\\sqrt{z}}{2z_t}\n", + "\\end{equation}$$\n", + "\n", + "Integrating this equation, we add an arbitrary constant, chosen as $C\\sqrt{z_t}$ which (after dividing through by $\\sqrt{z}$) gives:\n", + "\n", + "$$\\begin{equation}\n", + "\\cos \\theta = \\frac{1}{3}\\frac{z}{z_t} + C\\sqrt{\\frac{z_t}{z}}\n", + "\\end{equation}$$\n", + "\n", + "Taking the derivative of both sides of equation (15) and applying the relations from equation (10) yields:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z_t}{R} = \\frac{1}{3} - \\frac{C}{2}\\sqrt{\\frac{z_t^3}{z^3}}\n", + "\\end{equation}$$\n", + "\n", + "Make sure you have followed the derivation, and perhaps write it out on paper!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Phugoid Curves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equation (15) is non-linear, which usually means we are hard-pressed to write a clean expression for the variable of interest, $z$. In fact, Lanchester himself said that he was unable to _\"reduce this expression to a form suitable for co-ordinate plotting.\"_ If the great polymath couldn't do it, we can't either!\n", + "\n", + "But Lanchester _was_ able to plot a suitable approximation of the phugoid flight path using what he called the \"trammel\" method. If you're interested in seeing how he did it, his explanation begins on page [48 of Aerodonetics](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PA49&lpg=PA48&dq=aerodonetics+the+use+of+the+trammel&source=bl&ots=lB6EVKYQuT&sig=aVE2kiDWZoWftaWczMIrcYftMOs&hl=en&sa=X&ei=gTD_U82fGYjzgwT3moGwCQ&ved=0CCAQ6AEwAA#v=onepage&q=aerodonetics%20the%20use%20of%20the%20trammel&f=false). It's a trip.\n", + "\n", + "Lanchester used Equations (15) and (16) to solve for the constant $C$ and the radius of curvature $R$ and then iteratively plotted small arcs of the phugoid path. By hand.\n", + "\n", + "We wrote a neat little code that duplicates the manual trammel method, but it might be a bit much for you to absorb in the first lesson. If you want to look it over, you are more than welcome to. If you are just starting with Python, skip it for the moment and we'll return to it at the end of this module. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting the flight path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned, we wrote a Python code to reproduce programmatically what Lanchester did graphically. Here's a neat feature of IPython Notebooks: you can run external programs with the magical keyword ... wait for it ... `run`. And the jargon of IPython _is_ to call this \"magic.\" In fact, there are a bunch of [magic functions](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) that you will learn about. They will make you a happy camper.\n", + "\n", + "Let's do it:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%run phugoid.py\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This code cell loaded our simulated-trammel code, `phugoid.py`. The code defined a function for you in the background, called `plot_flight_path`, taking three inputs: $z_t$, $z$ and $\\theta$. \n", + "\n", + "Look again at Equation (15), where we take the positive square root. There are several possibilities, depending on the value that the constant $C$ takes. \n", + "\n", + "* There are no physical solutions for $C>2/3$, because it would result in $\\cos\\theta>1$. \n", + "\n", + "* If $C=2/3$, then the solution is a horizontal straight line, because $\\cos\\theta=1$, $\\theta=0$ and $R=\\infty$.\n", + "\n", + "* Any value of $C$ for which $0 < C < \\frac{2}{3}$ will produce \"trochoidal\"-like paths. What does this look like? Let's use our custom function `plot_flight_path` to find out!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n5MgRihQpQt++fQE4fPgw+fLlo1SpUpw8eTLV19+1axfFihULPC5WrBixsbFZ10G/zPQzNefrf0oy\n2tfBgwczdOhQALZu3UpERESq22amn+mtL7XtixcvniM/0wtR4BMRkWxlluFzxf7JuT/a6bV69WqG\nDx9OxYoVyZcvH506daJHjx5/2q5atWqMGDEiQ6+xf/9+Nm7cyJQpUwBo27Ytbdq0oXr16syYMYP7\n77+fCRMmnHcfR44c4aKLLgo8joyM5Pfff0/T66e1j5C5fqbmfP1PSUb6unfvXr799lu+++471qxZ\nw6RJk3j++edT3T4z/UxvfefbPqM/06ykKV0REfG8Zs2a8dVXX9GoUSMKFChAjx49eP3119m/f3+W\nvUaRIkVo0KBB4HHlypWJjo7m22+/5aqrrkrzPoJD7R9//EGJEiXS9L3J+xgVFcXIkSMZP3483333\nXfo6kwGp9f9826e3r4sWLaJr16488MAD3HXXXezZs4cOHTpkSz/TW19q22fmZ5qVNMInIiLZKqOj\nclnt5ZdfZv/+/bz99tuAbzqwbNmySbYJngIMlpYpwHr16rFs2bLA43z58pGQkMC3337LqVOnmDt3\nLsuXL+f06dPMnj07xf1cccUVrFmzJvD48OHDNGnSJEN9fP3112nfvj1NmjShT58+fPrpp1nSz9Sk\n1v/UZKSvO3fupE6dOoBv5Wvnzp355JNPsqWf6a0vte2LFSuWqZ9plsnMio/cfEMrykREsky4/059\n+eWX3bPPPuucc27jxo1u6dKl7oYbbnArVqzIstc4ffq0a9GiReBxq1at3LZt25JsM3z48CSrdH/6\n6SeXmJgYeHzy5EnXoEGDwOOGDRu6/fv3O+eci42NTbJtcsn7+PDDD7tff/3VOefcDTfckImepWz8\n+PGub9++gcfn63/yfjqXsb6OHTvWjR071jnnXOfOnd2OHTvcI488ki39PF996enP+faTktT+L5HJ\nVbrmwuSTV04zM5dX+y4iktVSu+B7OPjPf/7Db7/9RtGiRRk2bBjXXHMNd911F59//jmDBg3K0tea\nP38+y5cvxzlH7dq1ueOOOwLPTZs2jREjRmBmDB06lJtvvpkmTZowbtw4GjduHNhu0qRJbN++Hecc\n1apVC+yjTp06vPXWW1x//fVp6uO+fft45plnqFChAp07d2bOnDlZ1s933nmHqVOnsnPnTvr27cuT\nTz5JkSJFUu1/Sv3MSF+PHz/O888/T4MGDahfvz4tWrTg4Ycf5tlnn82WfqZWX3r7k1p7SlL7v+Rv\nz/ABsQp8IiKSaeEc+FIyefJkqlSpQuXKlbnssstCXU6aJCYm8s0331zw1C7nvP3227Rt25Y6derQ\nt29fPvvss2yuMOukp6+5uZ8pUeDLYgp8IiJZJ7cFvlmzZhEXF0ezZs3Oe664cDJ16lS6devGxRdf\nnKbtDx8+zMcff0yxYsWoX78+LVu2zOYKs056+pqb+5kSBb4spsAnIpJ1clvgy41OnjzJJZdcEuoy\nckRe6mtyCnxZTIFPRCTrKPCJZI3sCnw6D5+IiIiIxynwiYiIiHicAp+IiIiIxynwiYiIiHicAp+I\niIiIx+lauiIikmlVqlT50/VKRST9suu8kDoti4iIiEiY02lZREREROS8FPhEREREPE6BT0RERMTj\nFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RE\nRMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6B\nT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjwj7wmdk4\nM9tvZhuC2oqbWbSZbTGz+WZWNOi5oWYWa2abzKxDaKoWERERCR9hH/iAfwIdk7UNARY652oBi4Ch\nAGZWF+gF1AFuAN4zM8vBWkVERETCTtgHPufcMuBIsubuwAT//QlAD//9G4Epzrl459x2IBZonhN1\nioiIiISrsA98qSjjnNsP4JzbB5Txt1cEdgZtt9vfJiIiIpJn5dbAl5wLdQEiIiIi4Sp/qAvIoP1m\nVtY5t9/MygEH/O27gcuCtqvkb0vR8OHDA/ejoqKIiorK+kpFRERE0ikmJoaYmJgs2585F/6DY2ZW\nFfjSOdfA/3gk8JtzbqSZDQaKO+eG+BdtfApchW8qdwFQw6XQSTNLqVlEREQk7JgZzrkML0QN+xE+\nM5sMRAElzexXYBjwCjDNzO4FduBbmYtz7kczmwr8CMQBDynViYiISF6XK0b4soNG+ERERCS3yOwI\nn1cWbYiIiIhIKhT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9E\nRETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxO\ngU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERE\nRDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4zwZ+Mysk5ltNrOtZjY41PWIiIiIhJI550JdQ5Yys3zAVuBaYA+wGrjVObc52XbOa30XERERbzIz\nnHOW0e/34ghfcyDWObfDORcHTAG6h7gmERERkZDxYuCrCOwMerzL3yYiIiKSJ3kx8ImIiIhIkPyh\nLiAb7AYqBz2u5G/7k+HDhwfuR0VFERUVlZ11iYiIiKRJTEwMMTExWbY/Ly7aiAC24Fu0sRf4FrjN\nObcp2XZatCEiIiK5QmYXbXhuhM85l2BmjwDR+KasxyUPeyIiIiJ5iedG+NJKI3wiIiKSW+i0LCIi\nIiJyXgp8IiIiIh6nwCciIiLicQp8IiIiIh7nuVW66ZGYmEi+fMq8IuI9Z86c4ddff2Xnzp3s27eP\ns2fPEh8fT6FChShdujTly5enZs2aREZGhrpUEckBeTrwRUREUKJECa644gqqV69O06ZNadWqFU2b\nNtUvQRHJVU6dOsXXX3/N/PnzWbVqFevXrycuLu6835M/f37q1KlDy5Yt6dixI9dccw3FihXLoYpF\nJCfl6dOypPZc4cKF6dy5Mz179qR79+5cfPHFOVmaiEiaJCQksGDBAsaOHctXX33F6dOnA8+ZGZUr\nV6Zy5cpUqFCBiy66iIiICE6ePMmBAwfYtWsX27ZtI/hvQIECBejSpQt33nknN954IwUKFAhFt0Qk\nBZk9LUueDnzx8fEcOnSIn376ic2bN7Ny5UqWLVvGpk3/O09z8eLFufvuu3nwwQepU6dOCCsWEfE5\nfvw477//Pu+++y47d+4MtDdr1oyuXbvStm1bmjZtyqWXXnre/Zw8eZINGzawePFi5s+fz7Jly0hM\nTASgUqVKDBgwgPvvv5+iRYtma39E5MIU+DLofCde/uWXX5g1axaffvopa9asCbR3796d559/nqZN\nm+ZUmSIiAceOHeP111/nzTff5OjRowBUq1aNfv360adPHypWrJip/e/du5fPPvuMsWPHBj74FilS\nhIEDB/LEE09QuHDhTPdBRDJGgS+D0nqljbVr1/LBBx8wceLEwHRJ165defXVVzXiJyI5Ij4+nrFj\nx/K3v/2NgwcPAtC2bVueeeYZOnTokOWLzxITE5k3bx6vvfZa4OLtZcuW5cUXX6Rfv35ERERk6euJ\nyIUp8GVQei+ttm/fPkaPHs17773HqVOniIiI4OGHH2bYsGGUKFEiGysVkbxs8eLFPProo2zcuBHw\nBb2///3vtG3bNkdePyYmhkGDBrF69WoAmjdvzgcffECjRo1y5PVFxEeBL4Myei3dAwcO8PzzzzN2\n7FgSExMpUaIE//jHP7j77rsxy/DPQUQkiaNHjzJo0CA++ugjAC6//HJee+01brrpphz/XeOcY+rU\nqTz55JPs2bOHiIgInnjiCV588UUtahPJIQp8GZTRwHfO+vXreeKJJ1i8eDEAHTt25IMPPqBKlSpZ\nVaKI5FGzZ8+mf//+7Nmzh8jISJ577jkGDhzIRRddFNK6jh8/zvPPP88777xDYmIidevWZdKkSTRu\n3DikdYnkBQp8GZTZwAe+T70TJ07kiSee4MiRIxQuXJhXX32Vv/71rxrtE5F0+/3333n00UcZP348\nAC1atGDcuHHUrVs3tIUls3r1au6++242b95MgQIFePHFFxk4cKCO7RPJRgp8GZQVge+cffv28cgj\njzB9+nQAunXrxscff0ypUqWyZP8i4n1r1qzh9ttvJzY2losuuogRI0bw6KOPhm2IOnXqFIMHD+ad\nd94BICoqis8++4xy5cqFuDIRb1Lgy6CsDHznTJ06lQcffJCjR49Svnx5Jk6cyHXXXZelryEi3pKY\nmMjo0aN59tlniYuLo379+nz22WfUr18/1KWlybx58+jbty/79++nfPnyfP755zm2oEQkL8ls4NOF\nZLNQr169WL9+PW3btmXv3r1cf/31DB48mPj4+FCXJiJh6Pjx49x0000MGjSIuLg4Hn30Ub799ttc\n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\n9dVXqf4eVOBT4Atrq1atcj179nRmluSP++zZs11CQkKoy5MckpiY6ObOnZvkQ4CZuW7durmlS5eG\nujyRTImPj3eTJ092derUCby/K1eu7N566y134sSJUJcnYeTIkSPu73//uytdunTgvVK/fn03c+bM\nC37gVeBT4MsVfvrpJzdgwABXuHDhJFfuGDVqlM5m72GHDx92r7/+epIrYxQqVMg99NBDujqGeE58\nfLybMmWKq1u3buD9Xrx4cffMM8+4PXv2hLo8CaHdu3e7gQMHBhZjAK5p06Zu2rRpaR78UOBT4MtV\njh496kaNGuUqV66cZLr31ltv1ZSeRyQmJrqlS5e6O++8M8m0bYUKFdyIESO0kEc8LyEhwU2fPt21\natUqye+5e+65x/3www+hLk9y0MqVK92dd97pIiMjA++Fa6+91i1YsCDdf+8yG/jC/jx82cXMXF7t\neziIj49nzpw5fPjhh8yZM+dcCKdGjRr069eP22+/ncsuuyzEVUp67NmzhylTpjBu3Dh+/PFHAMyM\nDh068MADD9CtWzcKFCgQ4ipFctZ//vMfRo8ezcyZMwO/59q1a0f//v3p2bMnkZGRIa5QstqZM2f4\n/PPPeeedd1i92ne113z58tGzZ0+GDBnClVdemaH9mhkuE+fhU+CTkPv1118ZN24c48aNC1yqzcxo\n164dd9xxBzfffDPFihULcZWSkuPHjzNjxgw+/fRTvv7668AftHLlynHvvfdy3333cfnll4e4SpHQ\n27ZtG2+88Qbjx4/n5MmTAJQpU4Z+/frxwAMPULVq1dAWKJkWGxvLP//5T8aOHcvBgwcBKFGiBPfd\ndx/9+/fP9M9YgS+DFPjCT3x8PHPnzuWTTz5h9uzZnDlzBoDIyEi6du1K7969ueGGGyhSpEiIK83b\nTp48ybx585g6dSqzZ88OXPYnMjKSLl26cOedd2o0TyQVx48f59NPP+X999/nhx9+AP43Et6nTx+6\nd+9OoUKFQlylpNXvv//OtGnT+Pjjj1m2bFmgvVGjRjz66KPcdtttXHzxxVnyWgp8GaTAF96OHTsW\nGDlatGhRYOQoMjKS6667jp49e9KtWzfKli0b4krzhkOHDvHll1/yxRdfEB0dneTajldffTV33nkn\nN998M8WLFw9hlSK5h3OO//znP4wZM4apU6dy9uxZAIoUKcLNN9/MXXfdRbt27ciXL6SXvJcUJCQk\n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\nKVasGMWKFaNo0aIUK1aMMmXKUL58eSpUqEDx4sU9H+guRIEvgxT4REREJLfIbODTsj0RERERj1Pg\nExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERER\nj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4R\nERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4\nBT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExER\nEfE4BT4RERERjwvbwGdmr5rZJjP73symm9mlQc8NNbNY//MdgtqbmNkGM9tqZm+EpnIRERGR8BK2\ngQ+IBuo55xoBscBQADOrC/QC6gA3AO+Zmfm/532gn3OuJlDTzDrmfNkiIiIi4SVsA59zbqFzLtH/\ncCVQyX//RmCKcy7eObcdXxhsbmblgCLOudX+7SYCPXKyZhEREZFwFLaBL5l7gTn++xWBnUHP7fa3\nVQR2BbXv8reJiIiI5Gn5Q/niZrYAKBvcBDjgWefcl/5tngXinHOfhaBEERERkVwvpIHPOXf9+Z43\ns75AZ+CaoObdwGVBjyv521JrT9Xw4cMD96OiooiKirpw0SIiIiLZLCYmhpiYmCzbnznnsmxnWcnM\nOgGjgaudc4eD2usCnwJX4ZuyXQDUcM45M1sJPAasBr4C3nLOzUtl/y5c+y4iIiISzMxwztmFt0xZ\nSEf4LuBtIBJY4F+Eu9I595Bz7kczmwr8CMQBDwUlt4eB8cBFwJzUwp6IiIhIXhK2I3zZTSN8IiIi\nkltkdoQvt6zSFREREZEMUuATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER\n8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+AT\nERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGP\nU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPC9vAZ2Yvmtl6M1tnZvPMrFzQc0PNLNbMNplZh6D2Jma2wcy2mtkboalcREREJLyYcy7U\nNaTIzAo75373338UqOuc629mdYFPgWZAJWAhUMM558xsFfCIc261mc0B3nTOzU9l/y5c+y4iIiIS\nzMxwzllGvz9sR/jOhT2/S4BE//0bgSnOuXjn3HYgFmjuHwEs4pxb7d9uItAjp+oVERERCVf5Q13A\n+ZjZS8DdwFGgvb+5IrAiaLPd/rZ4YFdQ+y5/u4iIiEieFtIRPjNb4D/m7tztB//XbgDOueecc5Xx\nTeE+GspaRURERHKrkI7wOeeuT+Omk4GvgOH4RvQuC3qukr8ttfZUDR8+PHA/KiqKqKioNJYjIiIi\nkn1iYmKIiYnJsv2F86KN6s65bf77jwJtnXO9ghZtXIVvynYB/1u0sRJ4DFiNLyC+5Zybl8r+tWhD\nREREcoXMLtoI52P4XjGzmvgWa+wA/grgnPvRzKYCPwJxwENBye1hYDxwETAntbAnIiIikpeE7Qhf\ndtMIn4iIiOQWnj0ti4iIiIhkDQU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T\n4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+ERER\nEY9T4BMRERHxOAU+EREREY9T4BMRERHxOAW+PCYmJibUJYSE+p23qN95i/qdt+TVfmeWAl8ek1f/\no6jfeYv6nbeo33lLXu13ZinwiYiIiHicAp+IiIiIx5lzLtQ1hISZ5c2Oi4iISK7knLOMfm+eDXwi\nIiIieYWmdEVEREQ8ToFPRERExOPyXOAzs05mttnMtprZ4FDXk5XMbJyZ7TezDUFtxc0s2sy2mNl8\nMysa9NxQM4s1s01m1iE0VWeemVUys0VmttHMfjCzx/ztnu67mRU0s1Vmts7f72H+dk/3+xwzy2dm\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#zt = 64, z = 16, theta=0\n", + "plot_flight_path(64, 16, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cool! Note that the plot title tells us what the calculated value of $C$ was for our input conditions. We have a value of $C$ between $0$ and $\\frac{2}{3}$ and our path is trochoidal, like we announced it would be.\n", + "\n", + "* For negative values of $C$, the resultant flight path consists of a series of loops. Let's try it out!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUqZMGcLCwrjpppvo0KHDX9arWLEigwYNytZ77Nu3j/Xr1zNlyhQAWrRoQfPmzalcuTKffvop999/\nP2PHjj3nNo4cOUKBAgWSP4+KiiI2NjZT75/ZfYTz28/0nGv/05Kdfd2zZw/Lli1j5cqVrFixggkT\nJvD888+nu34w9nPy5MnMmDGDN998M9vbyOz3Pzs0tSoiInleo0aN+O9//0u9evWIjIykQ4cOvPXW\nW+zbty9o7xEdHU3t2rWTPy9XrhxfffUVy5Yto3HjxpneRsqyGhcXR4kSJTL12tT72LJlS4YMGcKY\nMWOSj0PLSent/7nWz+q+zps3j/bt29OrVy+6du3K7t27adWqVY7uZ6dOnfjggw+46aabsnUbuqx8\n/7NDI3IiIpKjQuXWXa+99hr79u1j2LBhgG9a7pJLLvnTOimn4lLKzFRczZo1+e6775I/DwsLIzEx\nkWXLlnHq1CnmzJnD4sWLOX36NJ9//nma26lUqRIrVqxI/vzQoUM0aNAgW/v41ltvcd1119GgQQO6\nd+/OxIkTg7Kf6Ulv/9OTnX3dtWsX1atXB3xnvLZt25bx48fnyH5+8cUXvPrqqyxevJjo6GguueQS\nPvnkkwzPxE1t6dKlxMXFZer7ny3W2nz58O26iIgEQ6j/m/raa6/Z5557zlpr7fr16+2iRYtsmzZt\n7Pfffx+09zh9+rRt0qRJ8ufNmjWzv/7665/WGThwoH3ppZeSP9+yZYtNSkpK/vzkyZO2du3ayZ/X\nrVvX7tu3z1pr7ebNm/+0bmqp97FPnz52586d1lpr27Rpcx57lrYxY8bYHj16JH9+rv1PvZ/WZm9f\nR48ebUePHm2ttbZt27Z2x44dtm/fvjmyn3PmzEn+eiYlJdmyZcvar776Kt39CUj9dUkp9fc/Len9\nXfIv/0ufMTZEflPKbcYYm1/3PSNnz55l8+bN7Nixg507d7J3715OnDjBmTNnKF26dPJBpiIiAend\n6DsULFmyhMOHD1OsWDFefPFFrr/+erp27crUqVN56qmngvpeX375JYsXL8ZaS7Vq1ejSpUvyc9Om\nTWPQoEEYY+jfvz8dO3akQYMGfPDBB9SvXz95vQkTJrB9+3astVSsWDF5G9WrV+edd97hxhtvzNQ+\n7t27l2effZbLLruMtm3b8sUXXwRtP999910+/vhjdu3aRY8ePejXrx/R0dHp7n9a+5mdfT1+/DjP\nP/88tWvXplatWjRp0oQ+ffrw3HPP5ch+jhw5koSEBHbs2EGVKlV44IEHzrk/6X1dIO3vf1rS+7vk\nX/6XA05V5ITjx4/z7bffMnfuXJYtW8batWuJj49Pc93atWuzdu3aXE4oIqEulItcWiZNmkT58uUp\nV64cZcuWdR0nU5KSkliwYEGmL2ExbNgwWrRoQfXq1enRoweTJ0/O4YTBk5V99fJ+pkVFLpPye5E7\nfvw4M2bMYNKkScybN4+EhIQ/PV+hQgUqVapEuXLlKF26NEWLFuWCCy6gVKlSdOrUyVFqEQlVXity\nn332GWfPnqVRo0bnvNZZKPn444+5+eabKViwYKbWP3ToEB9++CHFixenVq1aNG3aNIcTBk9W9tXL\n+5kWFblMyq9FbsOGDbzzzjuMGzeOuLg4AMLDw2nSpAmtWrWiRYsW1K9fP0euki0ieZfXipwXnTx5\nksKFC7uOkSvy076mpiKXSfmtyK1evZoXXniB2bNnJy9r0aIFXbp0oWPHjiF3+xcR8RYVOZHgyGqR\n0+VH8rjt27fz5JNPJt/CpFChQnTv3p2+fftSo0YNx+lERETkfKjI5VHx8fEMHjyYwYMHc/r0aQoU\nKECfPn146qmnKFWqlOt4IiIiEgQqcnnQmjVr6Nq1K+vWrQOgc+fOvP7665QpU8ZxMhEREQkm3aIr\nD0lMTGTIkCE0atSIdevWUblyZRYsWMDEiRNV4kRERPIgjcjlEYcOHeKuu+7i66+/BuDBBx/kjTfe\nyLdn/YiIiOQHKnJ5wPr167nlllvYunUrpUqVYuzYsdx0002uY4lIPlK+fPm/3M9SRLIuq9c11NSq\nx82ePZsmTZqwdetWGjRowIoVK1TiRCTXBW6z5IXH8OHDk0vnI488wtmzZ51nyu7j+PHjtG/fHoCI\niAjGjx/vPJMe5/fYvn17lv7uqch52Pjx4+nQoQOxsbF06tSJRYsWeeZWMyIiLgwaNIg+ffpgreX1\n11/n7bffJiLCu5NT0dHRzJw5k8cff5yEhAS6devG6NGjXceSXKQi51EjRoygW7duJCYmMmDAACZO\nnEihQoVcxxIRCVmvvfYazz77LMYY/vOf//Dkk0+6jhQU4eHhDB06lNdeew1rLffffz/Dhw93HUty\nie7s4EFDhw5N/gfojTfe4IknnnCcSEQktI0cOZKHHnoIYwwTJkygc+fOriPliLfffpvHHnsM8O1z\n7969HSeSYNEtulLxapH7z3/+Q+/evTHG8N5779GrVy/XkUREQtqkSZO4++67sdby/vvvc//997uO\nlKNSltaPP/6Yjh07uo4kQaAil4oXi9yUKVPo3Lkz1lpGjBjBgw8+6DqSiEhIW7BgAX/7299ISEhg\nyJAhPPXUU64j5YpXX32VAQMGEBUVxZw5c7j++utdR5LzpCKXiteK3Ny5c2nbti0JCQm8+uqrPPvs\ns64jiYiEtG3bttGoUSMOHTrEY489xptvvuk6Uq6x1vLII48wbNgwoqOjWbp0KdWrV3cdS86Dilwq\nXipyv/zyC40bN+bYsWM8/vjjvPHGG7pek4jIOcTGxtKsWTPWrVvHTTfdxOzZswkPD3cdK1clJSVx\n1113MW3aNKpUqcLSpUu58MILXceSbFKRS8UrRe7IkSM0adKETZs2cdttt/HJJ58QFqaTjUVE0mOt\n5a677uLjjz+matWq/PDDDxQvXtx1LCdOnjxJ8+bN+fHHH2ndujX//e9/812hzSvSK3JqBCEsMTGR\nTp06sWnTJurUqcO4ceNU4kREMjB69Gg+/vhjihQpwueff55vSxxA4cKFmTlzJiVLluTLL7/k+eef\ndx1JgkytIIQNGjSIL7/8kosvvpjPP/+cIkWKuI4kIhLSNmzYwCOPPALAe++9R0xMjONE7pUvXz55\nNmfw4MF88803riNJEKnIhahFixbx4osvAjBhwoQs33tNRCS/iY+P56677iIuLo7u3bvTpUsX15FC\nxrXXXssLL7yAtZauXbty4MAB15EkSFTkQtChQ4fo3LkzSUlJPPPMM7Rq1cp1JBGRkPfqq6+ybt06\nKleuzLBhw1zHCTnPPfccLVq0YM+ePdx777144ThxyZhOdghBnTp1YsqUKTRt2pQFCxYQGRnpOpKI\nSEhbs2YNDRs2JCEhgYULF9KiRQvXkULSzp07qVu3LkePHmXcuHF07drVdSTJJJ3s4BGffvopU6ZM\noXDhwkyYMEElTkQkAwkJCdx7770kJCTQp08flbhzKFeuHG+99RYAjzzyCHv37nWcSM6XilwIOXTo\nUPLdGoYMGULFihUdJxIRCX0jRoxg1apVlC9fnkGDBrmOE/K6d+9O69atOXLkCH379nUdR86TplZD\nSPfu3Rk3bhzXXnst8+bN06VGREQycODAAapUqcKxY8f47LPPuOWWW1xH8oQdO3ZQq1YtYmNjmT17\n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\nli5dyh133MG0adNCqiilnFIdNWoU9913n+tIkgs0tZoPXHnllTzxxBNYa+nevbtu3yUikg0RERFM\nmjSJ6Ohopk+fzujRo11HSpZ6SrVnz56uI4ljGpHLY06fPs2VV17Jhg0bPHGwrohIqJo4cSJ33303\nBQsWZOXKlVSvXt11JCZNmkSXLl2Ijo7mp59+oly5cq4jSS5Jb0RORS4PWr16NY0bN+bs2bPMmTOH\nm266yXUkERFP6tatG+PHj6du3br88MMPFChQwFmWnTt3UrduXY4ePaop1XxIU6v5SP369Xn55ZcB\nuPfeezl06JDjRCIi3jR8+HAqVarEmjVreOqpp5zlSExMpFu3bhw9epT27dtrSlWSqcjlUU8++STN\nmzdnz5499O7dW/diFRHJhujoaCZPnkxkZCTDhg3j448/dpLj9ddfZ8GCBVxyySV88MEHIXXyhbil\nqdU8bNu2bdSpU4fY2FjGjBlD9+7dXUcSEfGkYcOG8fDDD1OkSBGWL19OtWrVcu29ly9fTrNmzUhI\nSNDhMvmYplbzoQoVKjBs2DAAHnroIX7++WfHiUREvKlv377cddddxMbG0rFjx1y78HpsbCxdunQh\nISGBRx55RCVO/kIjcnmctZZu3boxYcIEateuzdKlSylYsKDrWCIinhMbG0ujRo34+eef6dKlC+PH\nj8/xKc577rmHMWPGULt2bZYtW+b0ZAtxSyNy+ZQxhhEjRhATE8O6det47LHHXEcSEfGkIkWKMH36\ndAoXLszEiRMZOXJkjr7fRx99xJgxYyhQoACTJk1SiZM0aUQun/jxxx9p0qQJ8fHxTJkyhX/84x+u\nI4mIeNLkyZPp3LkzERERfPPNN1xzzTVBf4+1a9fSuHFjTp8+zYcffsg999wT9PcQb9GIXD5Xr149\n3nrrLQDuv/9+fv31V8eJRES8qVOnTvTr14+EhATuuOMOduzYEdTtHz9+nL///e+cPn2ae+65RyVO\nzkkjcvmItZY777yTTz75hNq1a/P9999TuHBh17FERDwnISGB9u3b8+WXX1KnTh0WL15MkSJFznu7\n1lo6derE1KlTqV27Nj/88AOFChUKQmLxOo3ICcYYPvjgg+Tj5e6//35dX05EJBsiIiKYMmUKMTEx\nrF27lh49epCUlHTe2x0xYgRTp06lSJEiTJs2TSVOMqQil88ULVqUmTNnUqRIESZPnszbb7/tOpKI\niCcVL16czz//nGLFijF9+vTkO+pk18KFC3n00UcBGD16NFWrVg1GTMnjNLWaT3366afccccdhIeH\n8yGE+i0AACAASURBVPXXX9OyZUvXkUREPGnOnDm0a9cOay0TJ06kc+fOWd7Gzp07adiwIQcOHODx\nxx9n6NChOZBUvExTq/Int99+O8888wyJiYnceeed7Nq1y3UkERFPatOmDW+++Sbgu+7bggULsvT6\nU6dO0aFDBw4cOMCNN97I4MGDcyKm5FEakcvHEhMTadOmDXPnzqV+/fosWrRIJz+IiGTTI488wjvv\nvEPx4sVZsmQJ1atXz/A11lq6dOnC5MmTqVixIsuXL6dEiRK5kFa8RiNy8hfh4eFMnjyZypUrs3r1\narp16xaUg3VFRPKjN998kw4dOnD06FHatGnD3r17M3zN0KFDmTx5MkWKFOHzzz9XiZMsU5HL5y66\n6CJmzZpFsWLF+PTTTxkwYIDrSCIinhQeHs7EiRNp3LgxO3bsoF27dsTGxqa7/syZM3n66acBGD9+\nPDVr1sytqJKHqMgJ1apV45NPPiE8PJxBgwYxduxY15FERDypUKFCfP7551SsWJFVq1Zxxx13cObM\nmb+st3z5cjp37oy1lldeeYUOHTo4SCt5gY6Rk2TvvfceDz74IJGRkXzzzTe0aNHCdSQREU/atGkT\nzZs358CBA9x5551MmjSJ8PBwAHbs2EHjxo3Zt28f99xzDx988AHG/OXQJ5E/Se8YORU5+ZPAwbol\nSpRg8eLFVKtWzXUkERFPWrVqFddddx3Hjx+nV69evPfeexw/fpyrr76a9evXc/311zNnzhyioqJc\nRxUPUJFLRUUubQkJCdx2223Mnj2b8uXLs2TJEi677DLXsUREPGnhwoW0bt2a06dP8/jjj7NmzRq+\n/vprqlevzpIlSyhevLjriOIRKnKpqMil7+TJk9xwww0sXbqUunXrsmDBAooVK+Y6loiIJ82ePZtb\nb701+aoApUqVYunSpVxxxRVug4mn6PIjkmmFCxdm9uzZxMTEsGbNGm6//Xbi4+NdxxIR8aR27dpx\n0UUXJX9+0003qcRJ0KjISZpKlizJ//73Py699FLmzZsXtBtCi4jkN4MHD+bAgQPJn48bN46RI0c6\nTCR5iYqcpKtChQrMmTOH6OhopkyZwsMPP4ymo0VEMm/UqFE8++yzGGOYOnUqw4YNA+Chhx7i/fff\n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\nnfuBvr+KXDIqcpLRXL9+nY0bN7J69Wo2btzIkSNH7nm8YMGCNGrUiKeffhofHx9q1qypk9zTIZfL\nxaFDh9zF7bvvvuPcuXP3PKdYsWL4+vri6+tL8+bNdUhdJB2LiooiIiKCyMhI+vbt+8DfR0UuGRU5\nyehOnz7Nt99+y8aNG9m4cSMnT5685/Hs2bNTu3ZtfHx88PHxoW7duhQvXlwzYtPYxYsXCQ8Pd99+\n+OEH9yXd7nrooYdo2LAhDRs2pEmTJjzxxBP6dxLJZFTkklGRk8zEWsvx48cJDQ1l27ZthIWF3XMt\nwruKFClCzZo177mVKVNGpSEFWGs5e/Yse/bsYe/evezdu5ft27ffc57jXcWLF6dBgwY0atSIRo0a\nUalSJf0biGRyKnLJqMhJZnf58mXCw8MJCwsjLCyMnTt3Eh0d/ZvneXt7U6VKFapUqULlypXdH4sV\nK6ZycR9RUVEcPnyYQ4cOsX//fndxu3Tp0m+emydPHmrXrk29evWoV68edevWpWTJkg6kFpH0TEUu\nGRU5kXtZa4mMjGTXrl3u286dO7l48eLvPt/b25uKFSvy2GOP8eijj/LYY4+5b0WLFs3QJc9aS1RU\nFJGRkURGRnL8+HGOHDnCoUOHOHTo0O8WNoACBQpQrVo1qlevTrVq1ahZsyaVK1fW7GIR+UMqcsmo\nyIn8MWst58+fZ//+/Rw4cOCej5cvX77v1+XKlYtSpUpRokQJSpYsSYkSJdz3ixcvTuHChSlcuDD5\n8uVLd4UvNjaW8+fPc+7cud98PH36tLu8xcTE3Pd75M2bl4oVK7pvTz75JNWrV6dkyZLp7r9XRDyD\nilwyKnIiD+5uwTt69Cg///wzP//8M8eOHXPfv98eqeSyZcvmLnWFCxfG29ubvHnzki9fvns+5s2b\nlxw5cpAtWzb3LXv27GTLlo2sWbPicrlwuVzcuXPHfd/lchEbG0tMTAwxMTHcvHnTfT8mJobo6Ggu\nX77M5cuX+fXXX933r1+//qeye3t7U6ZMGcqUKUPp0qUpX748FStWpEKFCpo0IiIpTkUuGRU5kdRz\n9epVTp8+zenTpzlz5gxnzpxx3z979iyXLl0iKiqKGzduOB31N7y8vHj44YcpVqwYxYoVo2jRou77\nxYsXp2zZspQuXRpvb2+no4pIJqIil4yKnIjzbt68yaVLl7h06RIXL17kypUrXL9+nWvXrnHt2jX3\n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\n8zlOaAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,numpy.pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can play around with the input values and see what kind of behavior results. Just note that any value of $C > \\frac{2}{3}$ will result in $\\cos \\theta > 1$, which doesn't exist. Python will probably throw a few errors if you hit that condition, but just try again!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The last case is $C = 0$. Take another look at Equation (16) and plug in $C = 0$, what should happen? It looks like it will just reduce to \n", + "\n", + "$$R = 3z_t$$\n", + "\n", + "It's a constant radius of curvature! In fact, this solution is a series of semi-circles, with a cusp between them. One way to force $C = 0$ that we can figure out from Equation (15), is to make:\n", + "\n", + "\n", + "$$z = 3z_t\\ \\ \\ ,\\ \\ \\ \\theta = 0$$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\npZeYNm0a1atXp1mzZpx11lkVUfZWef/99xk5ciQ33ngjAMOHD+eLL75g7dq1tGjRgpNOOmmz70/7\nsZa2vuL6l+txJv29WeX8nVxRklQ2/H/q/9x3332xT58+sX///t9pP++88+LcuXNjjDG2a9cuzpkz\np8j3r1ixInbs2HHT88MOOywuXbq0/AreBvn5+fH444+Pv/rVr2KMMc6fPz/ec889m14///zz4zff\nfFPs+7flWCdMmBAff/zxeO+998avv/56K49g80pbX3H9S7Of4n6Xsu1FZhqnRCVJKqVrrrmGE088\n8Ttts2fPZuHChbRo0QKAUaNG0bJlyyLf/+abb9KuXbtNzzt06MA///nP8it4GwwbNoxu3bptev7l\nl18yZswY1q9fD0C9evXYbrvtin3/1h7r559/zpNPPsl5551HixYteP7557fhKIpX2vqK61/e59Qp\nUUlSlTNr1iz+/Oc/f2c9rI2PQwgcdthh9OrVq1T7fOONN2jYsCGDBg3i66+/pn79+px77rlF9v3i\niy9o1KjRpueNGjVi5syZW308xdnW41y2bBnVqlVjxx13ZNWqVQAceOCB5Ofn88Mf/pALLriAY445\nhpo1axa7j6091p///OfcdNNNAHz66adUr169XI6ztPUV13+HHXYo13NqYJMklYkQilzvs9Q2/oW7\nNSZNmsSAAQNo3rw51apV4yc/+Qm9e/f+Xr899tiDu+66a1vK/J7Fixczbdo0hgwZAsCRRx7Jj370\nI9q0afO9vl9//TXbb7/9pufbbbcd33zzTYk+p6THCNt+nH//+9/52c9+xlNPPfWd9htvvJGBAwdy\n/fXX87vf/W6z+9iaY/3Pf/7DO++8w7vvvsvkyZMZNGgQt956a7H9t+U4S1vf5vpv7TktCadEJUmV\nxsEHH8yrr77KD37wA2rWrEnv3r154IEHWLx4cbl/dv369TnggAM2PW/RogWjRo0qtm/BYLpmzRoa\nN25cos8pfIxdu3blt7/9LU8++STvvvvuth1EAe+88w6HHnro99pnzpzJuHHjGDVqFC+//DK33347\nb7/9drH72ZpjfeONNzjhhBO44IILOOuss1i4cCHHHHNMuRxnaesrrv+2nNOScIRNklQmtmVkrCzd\neeedLF68mIcffhjITKc1bdr0O30KTqEVtC1Tou3atWP8+PGbnlerVo28vLwi++65555Mnjx50/Nl\ny5bRsWPHEn9WwWN84IEH6NatGx07duScc87hmWee2dRvW47z3//+N2vWrOEf//gHEyZM4Ntvv+Xl\nl19m5syZnHrqqQB0796dp556ivHjx9OpU6cyO9b58+ez7777Apk7L3v06MHTTz9dLsdZ2vqK69+o\nUaNtOqdbVNzdCJVhwzuaJKnM5ML/U++88854yy23xBhjnDZtWnzrrbficccdF99+++0y/6wnn3wy\nnnvuuZuef/vtt/Gwww7b9Pzwww+Pn332WYwxxs8//zzm5+dvem3VqlXxgAMO2PS8Q4cOcfHixTHG\nGGfOnPmdvoUVPsZLL700zps3L8YY43HHHVcGR/Z9AwYM2HSX6LBhw+LgwYM3vTZixIg4bty4GOP3\njzPGrTvWxx57LD722GMxxhh79OgR586dGy+77LJyOc7N1Vea49ncfgor7neJzdwl6pe/S5JKJO1f\n/j5x4kS++uorGjZsyG233cZRRx3FWWedxXPPPccNN9xQpp/1yCOPMHToUObPn8+5557LNddcQ/36\n9Rk5ciQTJkwgxkjbtm0544wzAOjYsSOPP/44Bx544KZ9DBo0iDlz5hBjZI899tjUd9999+Whhx7i\n6KOPLtExLlq0iJtvvplmzZrRo0cPRowYUabH+re//Y277rqLEAI33XQTp5xyCg8++CCrV6+mbt26\nNGrUiLPPPrvY49yaY125ciW33norBxxwAPvvvz+HHXYYl156Kbfccku5HGdx9ZX2eIprL2xrvvzd\nwCZJKpG0B7aiDB48mJYtW9KiRQt23333pMspkfz8fMaNG/edpTQ25+GHH+bII49k33335dxzz+XZ\nZ58t5wrLTmmONZePszADWyEGNkkqO7kY2F566SXWr1/PwQcfXOyaaGkzdOhQevbsSe3atUvUf9my\nZfzlL3+hUaNG7L///sVeS5ZGpTnWXD7OwgxshRjYJKns5GJgy0WrVq2ibt26SZdRIarSsRZkYCvE\nwCZJZcfAJpWNrQlsrsMmSZKUcgY2SZKklDOwSZIkpZyBTZIkKeUMbJIkSSnnd4lKkkqkZcuW3/uu\nRkmltzVrArqshyRJUgq4rIckSVIOM7BJkiSlnIFNkiQp5QxskiRJKWdgkyRJSjkDmyRJUsoZ2CRJ\nklLOwCZJkpRyBjZJkqSUM7BJkiSlnIFNkiQp5QxskiRJKWdgkyRJSjkDmyRJUsoZ2CRJklLOwCZJ\nkpRyBjZJkqSUM7BJkiSlnIFNkiQp5XI6sIUQfhJCmBFC+DSE8POk65EkVW6TJ0/m6quvZtCgQUmX\noiomZwNbCKEa8AhwLNAO6BdCaJtsVZKkymzGjBn87ne/47XXXku6FFUxORvYgEOAmTHGuTHG9cAQ\n4MSEa5IkVQExxqRLUBWTy4GtOTC/wPMvsm2SJJWLEAJgYFPFy+XAJklShdoY2KSKViPpArbBAqBF\ngee7Zdu+Y8CAAZsed+3ala5du5Z3XZKkSs4RNpWFsWPHMnbs2BL1Dbn6hy6EUB34BPgx8B/gHaBf\njHF6gT4xV49PkpQ+zz77LD/96U85/fTTefbZZ5MuR5VMCIEYY5HDuDk7whZjzAshXAaMIjO1+3jB\nsCZJUlnLz88HnBpVxcvZwAYQY3wN2CfpOiRJVcP69esBqFmzZsKVqKrxpgNJkkrIwKakGNgkSSoh\nA5uSYmCTJKmEDGxKioFNkqQS2hjYatTI6UvAlYMMbJIkldCaNWsAqFOnTsKVqKoxsEmSVEKrV68G\nDGyqeAY2SZJKaGNgq1u3bsKVqKoxsEmSVEKOsCkpBjZJkkrIwKakGNgkSSqh//73v4BToqp4BjZJ\nkkpoxYoVADRq1CjhSlTVGNgkSSqh5cuXA9CwYcOEK1FVY2CTJKmEHGFTUgxskiSVkCNsSkqIMSZd\nQ7kJIcTKfHySpIqTn59PjRo1iDGyfv16v55KZS6EQIwxFPWaI2ySJJXA119/TYyRhg0bGtZU4Qxs\nkiSVwJdffgnATjvtlHAlqooMbJIklYCBTUkysEmSVAJLly4FDGxKhoFNkqQS2DjCtuOOOyZciaoi\nA5skSSWwZMkSAHbeeeeEK1FVZGCTJKkEFi5cCECzZs0SrkRVkYFNkqQSWLBgAQDNmzdPuBJVRQY2\nSZJKwBE2JcnAJklSCRjYlCS/mkqSpC3Iy8tju+22Iz8/n3Xr1lGzZs2kS1Il5FdTSZK0DRYsWEB+\nfj677rqrYU2JMLBJkrQFc+fOBaBly5YJV6KqysAmSdIWzJkzB4BWrVolWoeqLgObJElbsDGwOcKm\npBjYJEnago1Too6wKSkGNkmStmDWrFmAI2xKjoFNkqQtmDlzJgB77bVXwpWoqnIdNkmSNmP16tXU\nrVuXGjVqsGbNGmrUqJF0SaqkXIdNkqSt9PnnnwPQunVrw5oSY2CTJGkzNk6H7r333glXoqrMwCZJ\n0mZ4/ZrSwMAmSdJmTJ8+HYB99tkn4UpUlRnYJEnajI8//hiAdu3aJVyJqjLvEpUkqRj5+fk0aNCA\nVatWsXTpUpo0aZJ0SarEvEtUkqStMH/+fFatWsXOO+9sWFOiDGySJBVj2rRpgNOhSp6BTZKkYnz0\n0UcA7LfffglXoqrOwCZJUjE+/PBDAH7wgx8kXImqOgObJEnF+OCDDwADm5LnXaKSJBVhzZo11KtX\njxAC//3vf6ldu3bSJamS8y5RSZJK6aOPPiI/P5+2bdsa1pS41Aa2EMIpIYSPQgh5IYSOhV67KYQw\nM4QwPYRwTFI1SpIqr/fffx9wOlTpUCPpAjZjKtAH+FPBxhDCvkBfYF9gN2BMCGEv5z4lSWVp8uTJ\nAHTs2HELPaXyl9oRthjjJzHGmUDhudwTgSExxg0xxjnATOCQiq5PklS5TZo0CYBDDvGvGCUvtYFt\nM5oD8ws8X5BtkySpTKxevZqpU6dSrVo1DjzwwKTLkZKdEg0hjAaaFmwCInBLjHF4MlVJkqq6Dz74\ngLy8PNq3b0/dunWTLkdKNrDFGI/eirctAHYv8Hy3bFuRBgwYsOlx165d6dq161Z8pCSpKnnnnXcA\nOPjggxOuRJXZ2LFjGTt2bIn6pn4dthDCP4HrYozvZp/vBzwDHEpmKnQ0UORNB67DJknaGv369WPI\nkCH86U9/4oILLki6HFURObkOWwihdwhhPnAY8EoI4R8AMcaPgaHAx8AI4BJTmSSpLI0fPx6Aww8/\nPOFKpIzUj7BtC0fYJEmlNW/ePFq2bEmjRo1YtmwZ1aqldmxDlUxOjrBJkpSECRMmAJnRNcOa0sI/\niZIkFbAxsB1xxBEJVyL9j4FNkqQCNl6/ZmBTmngNmyRJWV999RU77rgjNWvWZPny5X7puyqU17BJ\nklQC48aNI8ZIp06dDGtKFQObJElZ//znPwFcZF2pY2CTJClr46rz3bp1S7YQqRCvYZMkCVi6dCk7\n7bQT22+/PcuXL6dWrVpJl6QqxmvYJEnagtdffx3IrL9mWFPaGNgkSQJGjRoFwLHHHptwJdL3Gdgk\nSVVejJGRI0cCcMwxxyRcjfR9BjZJUpU3ffp0FixYQNOmTWnfvn3S5UjfY2CTJFV5G0fXjj76aL8/\nVKnkn0pJUpX32muvAV6/pvRyWQ9JUpX2zTff0KRJE9avX8/ixYvZaaedki5JVZTLekiSVIzRo0ez\nbt06OnXqZFhTahnYJElV2iuvvALACSeckHAlUvGcEpUkVVn5+fk0a9aMxYsXM2XKFA444ICkS1IV\n5pSoJElFmDx5MosXL6ZFixbsv//+SZcjFcvAJkmqsl544QUAevbsSQhFDmxIqWBgkyRVSTFGhg0b\nBsDJJ5+ccDXS5nkNmySpSpo2bRr7778/TZo0YdGiRdSoUSPpklTFeQ2bJEmF/P3vfwfgxBNPNKwp\n9QxskqQqaWNgczpUucApUUlSlfPpp5+yzz77UL9+fb788ktq1aqVdEmSU6KSJBX03HPPAdCnTx/D\nmnKCgU2SVOVsDGynn356wpVIJeOUqCSpSvnoo4844IADaNy4MYsWLaJmzZpJlyQBTolKkrTJkCFD\nADjllFMMa8oZBjZJUpURY+TZZ58F4LTTTku4GqnkDGySpCpjwoQJzJo1i912240uXbokXY5UYgY2\nSVKV8de//hWAM888k+rVqydcjVRy3nQgSaoS1qxZw6677sqKFSuYNm0a++23X9IlSd/hTQeSpCrv\n5ZdfZsWKFfzwhz80rCnnGNgkSVXCU089BcDZZ5+dcCVS6TklKkmq9ObPn0+rVq2oXr06CxcuZMcd\nd0y6JOl7nBKVJFVpTzzxBPn5+fTp08ewppxkYJMkVWp5eXk8/vjjAPzsZz9LuBpp6xjYJEmV2uuv\nv868efNo1aoVRx11VNLlSFvFwCZJqtT+/Oc/A3D++edTrZp/7Sk3edOBJKnSWrhwIS1btiTGyNy5\nc2nevHnSJUnF8qYDSVKV9Nhjj7FhwwZ69+5tWFNOc4RNklQprV+/nlatWrFw4UJef/11r19T6jnC\nJkmqcl5++WUWLlxI27Zt6datW9LlSNvEwCZJqpQeffRRAC655BJCKHLQQsoZTolKkiqdKVOm0KFD\nB+rWrcuCBQto2LBh0iVJW+SUqCSpSnnwwQcB6N+/v2FNlUJqR9hCCHcDPYG1wOdA/xjjyuxrNwHn\nARuAK2OMo4rZhyNsklTFLFmyhBYtWrBu3To++eQT9tprr6RLkkqkTEfYQggdt72kEhkFtIsx/gCY\nCdyU/fz9gL7AvsBxwO+DFydIkrL+8Ic/sHbtWk444QTDmiqNrZkSbRdCuKpgQwjhrhDCiWVUEwAx\nxjExxvzs038Bu2Uf9wKGxBg3xBjnkAlzh5TlZ0uSctPatWv5/e9/D8DVV1+dcDVS2Sl1YIsxPg0c\nEkK4uUDbTcCFIYSflmVxBZwHjMg+bg7ML/DagmybJKmKe/rpp1myZAkdOnSga9euSZcjlZkapX1D\nCOFSYA4wMoRwRYzxoexLg4B7gMGl2NdooGnBJiACt8QYh2f73AKsjzE+W9paAQYMGLDpcdeuXf0F\nlqRKKi8vj3vuuQeA66+/3qU8lHpjx45l7NixJepb6psOQggrgHNjjC+EEI4GmsYYB4UQLgIujjF2\nKG3Bm/msc4GfAUfFGNdm224EYozxt9nnrwG3xRj/XcT7velAkqqIv//975x88sm0atWKmTNnUqNG\nqcckpESV9bIeo4HWADHG0UBeCKEnsDfQe6urLCSE8BPgeqDXxrCW9TJweghhuxBCa6AN8E5Zfa4k\nKffEGBk4cCAA1157rWFNlc7WBLazgYYhhEYA2anKxkCrGOPsMqztYaAeMDqE8F4I4ffZz/sYGAp8\nTOa6tkscRpOkqm3s2LFMmjSJHXfckfPOOy/pcqQyV2brsIUQ+gD7xBgHlskOy4BTopJUNXTv3p3X\nX3+dX/3qV/zyl79Muhxpq2xuSrRMF84NITSNMS4usx1uIwObJFV+EydO5IgjjqBBgwbMmTOHHXbY\nIemSpK1SYV9NlaawJkmqGn7zm98AcPnllxvWVGml9qupyoIjbJJUub3zzjsceuih1K1bl7lz59Kk\nSZOkS5K2ml/+LkmqlG6//XYALrvsMsOaKjVH2CRJOWnSpEkccsgh1KlTh9mzZ7PzzjsnXZK0TRxh\nkyRVOrfeeiuQuXbNsKbKzhE2SVLOeeutt+jcuTMNGjRg1qxZToeqUnCETZJUacQYueWWWwC45ppr\nDGuqEhxhkyTllNGjR3PMMcfQuHFjZs2aRcOGDZMuSSoTjrBJkiqF/Px8brzxRgBuuOEGw5qqDEfY\nJEk5Y/DgwZxxxhk0b96cTz/9lDp16iRdklRmHGGTJOW8tWvXbrp27de//rVhTVWKgU2SlBP+8Ic/\nMGfOHNq1a8c555yTdDlShXJKVJKUesuXL6dNmzYsW7aM4cOHc8IJJyRdklTmnBKVJOW022+/nWXL\nltGlSxeOP/74pMuRKpwjbJKkVJs5cybt2rVjw4YNTJ48mY4dOyZdklQuHGGTJOWs6667jvXr19O/\nf3/DmqosR9gkSak1ZswYjj76aOrVq8fMmTPZZZddki5JKjeOsEmScs6GDRu4+uqrAbjlllsMa6rS\nDGySpFR69NFH+eijj2jdujVXXXVV0uVIiXJKVJKUOosWLWKfffZh5cqVvPTSS/Tq1SvpkqRy55So\nJCmn/PyIV2MJAAAZ1ElEQVTnP2flypUcf/zx9OzZM+lypMQ5wiZJSpXx48dz5JFHUqtWLaZNm8ae\ne+6ZdElShXCETZKUE9avX8+ll14KwA033GBYk7IMbJKk1HjggQeYMmUKrVu35sYbb0y6HCk1nBKV\nJKXC7NmzadeuHWvWrOG1117j2GOPTbokqUI5JSpJSrUYIxdffDFr1qyhX79+hjWpEEfYJEmJGzJk\nCP369aNRo0bMmDGDpk2bJl2SVOEcYZMkpdbSpUu58sorAbj77rsNa1IRDGySpERdddVVLFmyhC5d\nunD++ecnXY6USk6JSpISM3z4cHr16kXt2rWZMmUKbdq0SbokKTFOiUqSUmf58uVcdNFFANx5552G\nNWkzDGySpERce+21LFy4kE6dOnH55ZcnXY6Uak6JSpIq3CuvvELPnj2pVasW77//Pvvuu2/SJUmJ\nc0pUkpQaS5cu5f/+7/+AzFSoYU3aMgObJKnCxBi56KKLWLx4MV26dOGqq65KuiQpJzglKkmqMM88\n8wxnnnkm9erVY+rUqbRq1SrpkqTUcEpUkpS4efPmcemllwLw4IMPGtakUjCwSZLKXV5eHmeccQYr\nVqygV69e9O/fP+mSpJxiYJMklbs777yT8ePHs+uuu/L4448TQpGzPpKK4TVskqRyNXHiRDp37kx+\nfj6jR4/mxz/+cdIlSankNWySpESsWLGCM844g7y8PK6//nrDmrSVHGGTJJWLGCOnnnoqw4YN46CD\nDmLixIlst912SZclpZYjbJKkCvfoo48ybNgw6tevz5AhQwxr0jZwhE2SVOYmT57MEUccwbp163ju\nuefo27dv0iVJqecImySpwixfvpy+ffuybt06LrnkEsOaVAZSG9hCCL8OIXwYQng/hPBaCGGXAq/d\nFEKYGUKYHkI4Jsk6JUn/E2Okf//+zJ49m44dO3LfffclXZJUKaR2SjSEUC/G+E328eXAfjHGi0MI\n+wHPAAcDuwFjgL2Kmvt0SlSSKtbAgQO56aabaNiwIZMnT6ZNmzZJlyTljJycEt0Y1rLqAvnZx72A\nITHGDTHGOcBM4JAKLk+SVMiYMWO45ZZbABg0aJBhTSpDNZIuYHNCCLcDZwPLgW7Z5ubA2wW6Lci2\nSZISMm/ePPr160d+fj633norJ5xwQtIlSZVKoiNsIYTRIYQpBbap2Z89AWKMv4gxtiAzBXp5krVK\nkor27bffcsopp7B06VKOPfZYbrvttqRLkiqdREfYYoxHl7DrYOBVYACZEbXdC7y2W7atSAMGDNj0\nuGvXrnTt2rWUVUqSihNj5IILLmDSpEm0atWKwYMHU7169aTLknLC2LFjGTt2bIn6pvmmgzYxxs+y\njy8Hjowx9i1w08GhZKZCR+NNB5KUiPvuu4/rrruOunXrMnHiRNq3b590SVLO2txNB2m+hm1gCGFv\nMjcbzAUuAogxfhxCGAp8DKwHLjGVSVLFe+2117jhhhsA+Otf/2pYk8pRakfYyoIjbJJUPj755BMO\nPfRQVqxYwW233fady08kbZ3NjbAZ2CRJpbJs2TIOO+wwPvvsM/r06cPzzz9PtWqpXSVKyhkGNklS\nmVi7di1HH300b731FgceeCBvvvkm9erVS7osqVLIyYVzJUnpEmPkZz/7GW+99RbNmjVj+PDhhjWp\nghjYJEklcscdd/D0009Tt25dXnnlFZo3d81yqaI4JSpJ2qJBgwZx1llnEULgpZdeomfPnkmXJFU6\nTolKkrba6NGj6d+/PwAPPPCAYU1KgCNskqRivf/++3Tu3JlvvvmG6667jnvuuSfpkqRKy7tEJUml\nNmfOHDp16sSiRYvo168fgwYNcvkOqRwZ2CRJpfLll19y5JFH8sknn3DUUUcxYsQIatWqlXRZUqVm\nYJMkldjKlSvp1q0b7733Hu3bt+fNN9+kYcOGSZclVXredCBJKpE1a9bQq1cv3nvvPfbcc09Gjhxp\nWJNSwMAmSQJgw4YNnH766YwbN45mzZoxevRodtlll6TLkoSBTZIE5OXl0b9/f15++WUaN27MqFGj\naN26ddJlScoysElSFZefn89FF13EoEGDqFu3LiNGjKBdu3ZJlyWpAAObJFVhMUauvPJKHnvsMWrX\nrs2rr77KoYcemnRZkgoxsElSFRVj5Prrr+eRRx5hu+2248UXX6RLly5JlyWpCAY2SaqCYozccsst\n3HfffdSoUYNhw4ZxzDHHJF2WpGLUSLoASVLFijFy8803M3DgQKpXr86QIUM44YQTki5L0mYY2CSp\nCokxcuONN3L33XdvCmsnn3xy0mVJ2gIDmyRVETFGbrjhBu69915q1KhhWJNyiIFNkqqAGCNXX301\nDz74IDVq1GDo0KH06dMn6bIklZCBTZIquby8PC688EIef/xxatasydChQ+ndu3fSZUkqBQObJFVi\n69ev5+yzz2bIkCFsv/32vPDCC/zkJz9JuixJpWRgk6RK6ttvv+W0007j5Zdfpn79+rzyyit07tw5\n6bIkbQUDmyRVQitXrqRPnz688cYb7LDDDowcOZKDDz446bIkbSUDmyRVMosXL6ZHjx6899577LLL\nLowcOZL27dsnXZakbWBgk6RKZPbs2RxzzDF89tlntGnThpEjR7LHHnskXZakbeRXU0lSJfHhhx9y\n+OGH89lnn3HggQcyfvx4w5pUSRjYJKkSGD16NEceeSSLFi2iW7dujB07lqZNmyZdlqQyYmCTpBz3\n5JNP0qNHD/773//St29fRowYQYMGDZIuS1IZMrBJUo6KMfKrX/2K/v37s2HDBm644QaeffZZtt9+\n+6RLk1TGvOlAknLQunXruOCCC3jqqaeoVq0aDz/8MJdccknSZUkqJwY2ScoxS5cu5aSTTuKtt96i\nTp06DBkyhJ49eyZdlqRyZGCTpBzy8ccf07NnT2bNmkWzZs0YPnw4HTt2TLosSeXMa9gkKUeMHDmS\nTp06MWvWLA466CAmTZpkWJOqCAObJKVcjJH777+fHj16sHLlSk455RTefPNNmjVrlnRpkiqIgU2S\nUmz16tWcddZZXHvtteTn5/OLX/yC5557jjp16iRdmqQK5DVskpRSc+fOpU+fPrz//vvUrVuXp556\nipNPPjnpsiQlwMAmSSn0z3/+k759+7J06VL23HNPXnzxRfbff/+ky5KUEKdEJSlF8vPzueuuu+je\nvTtLly7l2GOPZdKkSYY1qYozsElSSnz99deceOKJ3HzzzZuuV3v11VfZYYcdki5NUsKcEpWkFHjv\nvfc45ZRTmD17NjvssANPP/00xx9/fNJlSUoJR9gkKUExRh5++GE6derE7NmzOeigg3jvvfcMa5K+\nw8AmSQn56quvOOmkk7jiiitYt24dF110EePHj6dVq1ZJlyYpZZwSlaQETJw4kX79+jFv3jwaNmzI\nn//8Z0499dSky5KUUo6wSVIF2rBhA7fffjudO3dm3rx5HHroobz//vuGNUmb5QibJFWQ2bNnc9ZZ\nZzFhwgQArr/+eu644w5q1qyZcGWS0i71I2whhGtDCPkhhMYF2m4KIcwMIUwPIRyTZH2StCUxRp56\n6ik6dOjAhAkTaNasGaNHj+buu+82rEkqkVSPsIUQdgOOBuYWaNsX6AvsC+wGjAkh7BVjjMlUKUnF\nW7p0KRdffDHPP/88ACeffDJ/+tOfaNKkScKVScolaR9hewC4vlDbicCQGOOGGOMcYCZwSEUXJklb\n8uKLL9KuXTuef/556tWrxxNPPMHf/vY3w5qkUkttYAsh9ALmxxinFnqpOTC/wPMF2TZJSoWvv/6a\ns846iz59+rBkyRK6dOnChx9+yLnnnksIIenyJOWgRKdEQwijgaYFm4AI/AK4mcx0qCTljFdeeYUL\nL7yQhQsXUrt2bQYOHMhll11GtWqp/fexpByQaGCLMRYZyEII+wOtgA9D5p+juwHvhRAOITOi1qJA\n992ybUUaMGDApsddu3ala9eu21q2JH3PkiVLuPLKKxkyZAgAnTp14sknn2TvvfdOuDJJaTV27FjG\njh1bor4hF67VDyHMBjrGGL8OIewHPAMcSmYqdDRQ5E0HIQTvRZBUrmKMPPPMM1x11VUsW7aM2rVr\nc/vtt3PllVdSvXr1pMuTlENCCMQYi7xuItV3iRYQyUyXEmP8OIQwFPgYWA9cYiqTlITZs2dz6aWX\n8o9//AOA7t2786c//Yk99tgj4cokVTY5McK2tRxhk1Qe1q1bx3333cdvfvMb1qxZQ6NGjbj//vu9\nqUDSNqkMI2ySlArjxo3j4osvZvr06QD069eP+++/n1122SXhyiRVZt62JEklsGjRIs455xy6du3K\n9OnT2WuvvRg9ejSDBw82rEkqdwY2SdqMjdOfe++9N3/961+pVasWAwYMYMqUKXTv3j3p8iRVEU6J\nSlIxRo0axZVXXsmMGTMAOOGEE3jggQdo06ZNwpVJqmocYZOkQj799FN69+7Nsccey4wZM9hrr714\n9dVXGT58uGFNUiIMbJKUtWzZMq644gratWvHSy+9RN26dRk4cCBTp06lR48eSZcnqQpzSlRSlbd2\n7VoeeeQRbr/9dpYvX04IgfPPP5/f/OY37LrrrkmXJ0kGNklVV15eHoMHD+aXv/wlc+bMATKL3953\n3320b98+2eIkqQADm6QqJ8bIq6++ys0338zUqVMB2G+//bjnnns47rjjXPxWUup4DZukKuWtt96i\nc+fO9OzZk6lTp7L77rvzxBNPMGXKFHr06GFYk5RKjrBJqhImTpzIbbfdxpgxYwBo0qQJv/jFL7jo\noovYfvvtE65OkjbPwCapUvv3v//NbbfdxsiRIwFo0KABV199Nddccw0NGjRIuDpJKhkDm6RKafz4\n8dxxxx289tprANSvX58rr7ySa665hh122CHh6iSpdAxskiqNGCOjRo3ijjvu4K233gKgbt26XHHF\nFVx77bU0adIk4QolaesY2CTlvLy8PF588UUGDhzI5MmTAWjUqBFXXHEFV1xxhUFNUs4zsEnKWatX\nr+bJJ5/k/vvv5/PPPwdgp5124pprruGSSy7xGjVJlYaBTVLOWbJkCY8++iiPPvooy5YtA6B169Zc\nc801nHfeedSpUyfhCiWpbBnYJOWM9957j4ceeohnn32WdevWAXDwwQdz/fXXc9JJJ1G9evWEK5Sk\n8mFgk5Rq69ev54UXXuChhx5iwoQJAIQQ6NmzJ9dddx1HHnmki91KqvQMbJJSaf78+Tz22GM89thj\nLFy4EMisoXb++edz2WWXscceeyRcoSRVHAObpNTIy8tj1KhR/PGPf+SVV14hPz8fgLZt23L55Zdz\n9tlnU69evYSrlKSKZ2CTlLg5c+bw5JNP8uSTTzJ37lwAatasyamnnspFF11Ely5dnPaUVKUZ2CQl\nYvXq1bzwwgv85S9/4Y033tjU3rp1ay688EL69+/PzjvvnGCFkpQeBjZJFSY/P59x48YxaNAgnn/+\neVauXAnA9ttvz8knn8x5551H165dqVatWsKVSlK6GNgklasYI1OnTmXQoEEMHjyYBQsWbHrt4IMP\n5vzzz+e0006jUaNGCVYpSelmYJNULqZNm8bQoUMZOnQoM2bM2NTeqlUrzjzzTM444wzatm2bYIWS\nlDsMbJLKRIyRjz76iGHDhjF06FCmT5++6bXGjRtz2mmnceaZZ9KpUydvIJCkUjKwSdpqeXl5TJw4\nkRdffJEXX3yRWbNmbXqtcePG9OnTh759+9KtWzdq1qyZYKWSlNsMbJJKZcWKFYwePZoRI0YwfPhw\nli5duum1nXbaiZ49e9K3b1+OOuooQ5oklREDm6TNijEybdo0RowYwYgRI5gwYQIbNmzY9Pqee+5J\n79696d27N506dfL7PCWpHBjYJH3PggULeP311xkzZgxjxozhP//5z6bXqlevTufOnenRowfHH388\n7dq185o0SSpnBjZJLF68mDfffJM333yTN954g48//vg7rzdt2pTjjjuOHj16cPTRR7sEhyRVMAOb\nVMXEGJkzZw4TJ07kzTffZNy4cXzyySff6VO3bl26du1K9+7d6d69u6NokpQwA5tUya1atYp3332X\nt99+m7fffpt//etfLF68+Dt96tSpw+GHH06XLl3o0qULhx56KNttt11CFUuSCjOwSZXI6tWr+eCD\nD3j33XeZPHky7777LtOnTyc/P/87/Zo0aUKnTp340Y9+RJcuXTjooIO8o1OSUszAJuWg/Px85syZ\nw5QpU5gyZQpTp05lypQpzJw5kxjjd/pWr16dDh060KlTp01bmzZtnOKUpBxiYJNS7JtvvuHzzz/n\nk08+YcaMGUyfPp0ZM2bwySefsGbNmu/1r169Ou3ateOggw7ihz/8IQcddBDt27endu3aCVQvSSor\nBjYpQWvWrOGLL75g3rx5zJ8/nzlz5vD5559v2pYsWVLse3fddVcOOOAA2rdvv2lr27YttWrVqsAj\nkCRVBAObVMa+/fZbli1bxldffcWyZcv48ssvWbRo0Xe2//znP3zxxRd8+eWXm91XrVq1aN26Nfvs\nsw9t27albdu27Lvvvuyzzz4urSFJVYiBTVXe119/zauvvkp+fj55eXmbtvz8fDZs2MDatWv59ttv\nv7OtWrWKlStX8t///nfTzxUrVvDVV18VOVVZnBo1arDbbrvRokULdt99d1q0aMGee+65aWvevDnV\nqlUrx6OXJOWCUPgC5cokhBAr8/GpbEyZMoUOHTqU2f5q1qxJkyZNaNKkCY0bN2bHHXdk1113ZZdd\ndtm0NW3alN13352mTZsayCRJAIQQiDEWeUeYI2yq8ho3bswZZ5xB9erVqVat2nd+Vq9ene233/57\nW506dWjQoAH169f/zs/GjRtTt25d78CUJJUpR9gkSZJSYHMjbM7FSJIkpZyBTZIkKeUMbJIkSSln\nYJMkSUq51Aa2EMJtIYQvQgjvZbefFHjtphDCzBDC9BDCMUnWKUmSVN5SG9iy7o8xdsxurwGEEPYF\n+gL7AscBvw8pWUNh7NixSZegbeD5y12eu9zm+cttnr+KkfbAVlQQOxEYEmPcEGOcA8wEDqnQqorh\nH9rc5vnLXZ673Ob5y22ev4qR9sB2WQjhgxDCYyGEhtm25sD8An0WZNskSZIqpUQDWwhhdAhhSoFt\navZnT+D3wB4xxh8Ai4D7kqxVkiQpKTnxTQchhJbA8Bhj+xDCjUCMMf42+9prwG0xxn8X8b70H5wk\nSVJWzn2XaAhhlxjjouzTk4CPso9fBp4JITxAZiq0DfBOUfso7qAlSZJySWoDG3B3COEHQD4wB7gQ\nIMb4cQhhKPAxsB64xC8MlSRJlVlOTIlKkiRVZWm/SzQnhBDuzi7i+0EIYVgIoUGB11zkN+VCCD8J\nIcwIIXwaQvh50vVo80IIu4UQ3gghTMveqHRFtn2HEMKoEMInIYSRBe4sV8qEEKplF0R/Ofvcc5cj\nQggNQwh/y/6dNi2EcKjnr2IY2MrGKKBd9o7WmcBNACGE/UjpIr/KCCFUAx4BjgXaAf1CCG2TrUpb\nsAG4JsbYDugEXJo9ZzcCY2KM+wBvkP09VCpdSeaylo08d7njQWBEjHFfoAMwA89fhTCwlYEY45gY\nY3726b+A3bKPe5HSRX61ySHAzBjj3BjjemAImcWZlVIxxkUxxg+yj78BppP5nTsReCrb7SmgdzIV\nanNCCLsBPYDHCjR77nJAdvboyBjjEwDZv9tW4PmrEAa2snceMCL72EV+06/wOfoCz1HOCCG0An5A\n5h9KTWOMiyET6oCdk6tMm/EAcD1Q8AJqz11uaA0sDSE8kZ3S/n8hhDp4/iqEga2EtrDI78Y+twDr\nY4zPJliqVCWEEOoBzwNXZkfaCt9B5R1VKRNCOB5YnB0h3dzlIZ67dKoBdAQejTF2BFaRmQ71d68C\npHlZj1SJMR69uddDCOeSGeY/qkDzAmD3As93y7YpPRYALQo89xzlgBBCDTJh7ekY40vZ5sUhhKYx\nxsUhhF2AJclVqGIcAfQKIfQAagP1QwhPA4s8dznhC2B+jHFy9vkwMoHN370K4AhbGQgh/ITMEH+v\nGOPaAi+9DJweQtguhNCazSzyq8RMAtqEEFqGELYDTidz3pRufwE+jjE+WKDtZeDc7ONzgJcKv0nJ\nijHeHGNsEWPcg8zv2hsxxrOA4XjuUi877Tk/hLB3tunHwDT83asQrsNWBkIIM4HtgGXZpn/FGC/J\nvnYTcD6ZRX6vjDGOSqZKFScbuB8k8w+Yx2OMAxMuSZsRQjgCeBOYSmbqJQI3k/nH0FAyo9pzgb4x\nxuVJ1anNCyF0Aa6NMfYKITTGc5cTQggdyNwwUhOYBfQHquP5K3cGNkmSpJRzSlSSJCnlDGySJEkp\nZ2CTJElKOQObJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElK\nOQObJElSytVIugBJyhUhhAuAHYF9gKeBlsDOwP7ADTHGBQmWJ6kSCzHGpGuQpNQLIfwMmBJj/HcI\n4WBgNHAusAp4DegRYxyZYImSKjFH2CSpZJrEGP+dfdwCyIsxvhhCqA10jTG+lWBtkio5R9gkqZRC\nCA8Bu8cY+yRdi6SqwZsOJKn0ugFjky5CUtVhYJOkLQghVAshdA8ZOwPtKBDYQgg3JFacpCrBwCZJ\nW3YhMArYC+gLrAa+AAgh9AI+Sq40SVWB17BJ0haEEDoA1wMzgA+BBsBRwBxgdoxxUHLVSaoKDGyS\nJEkp55SoJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElKOQOb\nJElSyhnYJEmSUu7/A9i2e0jPCtaoAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(16,48,0.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks an awful lot like a quarter circle. And what's the radius of the arc? It's $$r = 48 = 3z_t.$$\n", + "\n", + "We can also get a semi-circle out of our simulated trammel by changing to another configuration where $C$ is (near) zero. Here's one example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nvS8Z0/tyPr0nGdP7kjG9LznDb4/STXNNdhERERGvZozBXsZBG357lK6IiJyvQoUKxMTEOB1DxG+V\nL1+e/fv3e3y9GuETEZFU7lEEp2OI+K3M/g1e7gif9uETERER8XEqfCIiIiI+ToVPRERExMep8ImI\niIj4OBU+ERERkcu0du1aEhISOHv2LOvWrXM6znl0WhYREZF0Tp06xbhx4wgLC+PPP//k2Wef/dfj\nW7duJTIyksGDB2e6jsWLF7Nz504CAwO56qqr6Ny5c07HzpZt27Yxc+ZMJkyYkLrsYtufXl7Z1uzI\n6P3JSEREBDExMZQuXZp33nkHAGstxYsXJyAgIPXI22bNmjF37twcz52eCp+IiEg6Tz75JCNHjiQs\nLIyqVavywAMPUL58ecD1S3z48OHUrl07068/efIkL730Eps3bwagbt263HvvvZQoUSJX8mfV//3f\n/7F+/XqKFSv2r+UX2v70LmdbN2zYwI8//siJEyfo2rXreTmcltn7k5GhQ4fSokULypYtS2BgIAD7\n9+/nrbfe4o477iAgIIBFixZx991353TsDGlKV0REJI1ffvmFw4cPExYWBsDKlSv/VXYWLFhA48aN\nL7iOtWvXUqVKldT7t956K6tXr86ZwJfhmWeeoXXr1v9adrHtTy+727pv3z7ef/99nnjiCcLCwpg/\nf342tyLnZPT+ZCY4OJirr746tewB5M+fn7Zt21KhQgWKFi1KcHAwlStXzqm4F6QRPhER8Tk///wz\n77777r9OYpvyuTGG22+/nVatWmX4tV9++SWhoaF8+OGHnDhxgiJFitClSxcA4uLiCAgIoGTJkpw6\ndSrT1//111//NSpUrFgx9uzZ47kNdLuc7czMhbY/I9nd1ueff54XXngBgN27d/+rKKWXE9vpadHR\n0VhriYuL44YbbqBVq1aULVs29fHJkyfz9NNPO5ZPhU9ERLLEmGyf5P882b2ax8aNGxk1ahTlypUj\nICCAFi1a0KZNm/OeV7FiRcaMGZOt14iNjWXnzp3MmTMHgPr163PnnXdy/fXXs3DhQrp3784HH3xw\nwXWcOHGC/Pnzp97Ply8f8fHxWXr9rG4jXN52ZuZC25+R7Gzrb7/9RnR0NJs3b2bTpk18+OGHDB8+\nPNPn58R2elq3bt2oUaMGANWrV6dhw4aEhoYCrvcoLi6OkJAQx/Kp8ImISJ5x2223sWzZMt566y12\n7dpFmzZteO211+jUqRNXXnmlR16jSJEiVKtWLfV+WFgYK1eu5Pjx49SpUyfL6zh+/Hjq/TNnzlCm\nTJksfW36bWzUqBHjxo3jyiuvpFq1atSsWfPSNugSZbb9mRW+7Gzrl19+yf3330+PHj04ffo0gwYN\nolmzZjm+na+++ioJCQn/WpYyShgREXHBqeuLufXWW1M/L168OFFRUanTwXPnznVsKjeFCp+IiGSJ\nt1xjd/To0cTGxvLGG28ArunA9GUv7RRgWlmZAqxSpQrr169PvR8QEEBSUhLR0dGcPn2a5cuX89VX\nX5GQkMCnn36a4Xquu+46Nm3alHo/Li6O8PDwbG3ja6+9RuPGjQkPDyciIoJZs2Z5ZDszk9n2ZyY7\n23rw4MHUArR48WLuvfdeZs6cmePbOWjQoIs+JztmzZrFZ599lpo5Pj7+X1PUX375JY899liOvHaW\nWWv98ubadBERScvb/28cPXq0HTp0qLXW2p07d9p169bZe+65x3799dcee42EhAR7++23p96/4447\n7N69e//1nFGjRtkXX3wx9f6+fftscnJy6v1Tp07ZatWqpd6/9dZbbWxsrLXW2j179vzrueml38a+\nffvaAwcOWGutveeeey5jyzL2/vvv2y5duqTev9D2p99Oa7O3rVOnTrVTp0611lp777332piYGNuv\nX78c3c7sSv/+WHv++7B+/Xq7Zs0aa6218fHxtkKFCvbUqVOpj1evXt2uWrUqS6+X2b9B9/Js9x4d\npSsiInnChg0bqFatGs2bN6dJkyYsXLiQa665hkaNGnH77bd77HVCQkIYNWoUI0aMYPjw4fTp04fr\nrrsu9fGPP/6YxYsXs3jx4tQjSx944AG+++671OcULFiQQYMG8Z///IeXX36ZgQMHUrp0aQBatmzJ\nqlWrsryNwAUPaLgcb775JtOmTSMqKooXX3yRv/7664Lbn347s7utDz74INu3b2fq1KkMHz6csLAw\nkpOTc2w7syuj9wfOfx/q1avHwYMHmThxIkOHDmXOnDkULFgw9fESJUpQrly5XM+flrFeMkSf24wx\n1l+3XUQkM2mPgswLZs+eTfny5QkLC+Oaa65xOk6WJCcns2bNmoue2iXFG2+8Qf369alcuTJdunTh\no48+yuGEnnMp25qXt9OTMvs36F6e7SOnVPhERCRVXit8ixcvJjExkdtuu+2ydrjPTfPmzaNly5YU\n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\npozTkbyGRvjysB49elC9enUOHDjA2LFjnY4jIiLimISEhNRrz7/44osqex6mET6HffXVV9x5552E\nhITwww8/ULFiRacjiYiI5LqXX36ZESNGULVqVbZu3UpQkKNnjvM6GuHL4+rVq0fnzp05e/Ys/fv3\nxxtKqIiISG7av38/o0ePBuDNN99U2csBKnxe4NVXXyU0NJTPPvuM+fPnOx1HREQk11hr6d27NwkJ\nCXTs2JGGDRs6HcknaUrXS7zzzjv06tWLMmXKsGvXLooVK+Z0JBERkRw3Z84cOnbsSLFixdi1a5f2\n3cuEpnR9RPfu3alXrx6///47gwcPdjqOiIhIjjtx4kTqgRrjx49X2ctBGuHzIjt37qRGjRokJiay\nfv166tWr53QkERGRHNO9e3emTp1KgwYNWL16NQEBGofKjEb4fEiVKlUYNGgQ4Dply99//+1wIhER\nkZyxZs0apk6dSr58+XjnnXdU9nKY3l0vM3ToUK6//np++OEHxowZ43QcERERj0tISKBnz54ADBky\nhJtuusnhRL5PU7peaM2aNTRq1IigoCA2btxI9erVnY4kIiLiMYMGDWL8+PHcdNNNfPfdd4SEhDgd\nyetpStcHNWzYkH79+nHu3Dm6dOlCYmKi05FEREQ8YsOGDUyYMIGAgADef/99lb1cosLnpcaMGcO1\n117Ltm3bUk9GKSIikpedPn2aLl26YK1l0KBB1KlTx+lIfkNTul4sKiqKxo0ba2pXRER8wjPPPMNr\nr71GlSpV2Lx5s0b3LoGmdH1Yo0aN/jW1q6N2RUQkr1q/fj0TJ04kMDBQU7kOUOHzcmPGjKFixYps\n27aNUaNGOR1HRETkksXHx6dO5b7wwgvUqlXL6Uh+R1O6ecD69etp2LAh1lqioqJo0KCB05FERESy\nrFu3bkybNo1bbrmFjRs3ki9fPqcj5Tma0vUDd955Jy+88ALWWjp37swff/zhdCQREZEsWbBgAdOm\nTSN//vzMnj1bZc8hKnx5xMiRI7nttts4cOAAffv2dTqOiIjIRR06dIju3bsDrmvlVqlSxeFE/ktT\nunnI7t27qVGjBqdPn2bWrFl06tTJ6UgiIiIZSk5OplmzZnzxxRfce++9LF26FGOyPSPp9zSl60cq\nVarE66+/DkDv3r3Zv3+/s4FEREQy8dprr/HFF19QqlQppk+frrLnMI3w5THWWtq3b88nn3xC7dq1\nWbdunfaHEBERr7Jx40bq1atHYmIiS5Ys4f7773c6Up6nET4/Y4xh6tSphIWFER0dzeDBg52OJCIi\nkuqPP/6gQ4cOJCYm0q9fP5U9L6ERvjzqm2++oX79+pw7d47FixfTqlUrpyOJiIifSzsLVbNmTb76\n6iudYNlDNMLnp26//XbGjh0LQJcuXYiJiXE4kYiI+LtJkybxySefULRoUebNm6ey50U0wpeHWWtp\n1aoVS5cu5fbbb2ft2rUEBwc7HUtERPxQdHQ0d955J4mJicyfP5/27ds7HcmnaITPjxljeP/997nm\nmmv45ptvGDhwoNORRETEDx0/fpyHHnqIxMREnnzySZU9L6QRPh/w9ddf07BhQxITE3V+PhERyVVJ\nSUncd999REZGUqtWLdavX6+p3BygET6hbt26qefn69atG9u3b3c4kYiI+IsRI0YQGRlJyZIlmT9/\nvsqel9IIn4+w1vLEE0/w/vvvU7FiRTZt2kTx4sWdjiUiIj7sk08+oV27dgQEBPD555/TpEkTpyP5\nLI3wCeD6QXjrrbcIDw/n559/5pFHHiEpKcnpWCIi4qN27drFY489BsCrr76qsuflVPh8SIECBVi4\ncCElSpRg+fLljBw50ulIIiLig/7880/atm1LfHw8Dz/8MM8884zTkeQiNKXrg1atWkXz5s1JTk7m\no48+4uGHH3Y6koiI+IikpCRat27NsmXLuOWWW9iwYQOFChVyOpbP05SunKdp06a89tprADz++ONE\nR0c7nEhERHzFoEGDWLZsGSVKlOCTTz5R2csjNMLno6y19OrViylTplCmTBk2btzI1Vdf7XQsERHJ\nw6ZOnUr37t0JDg5m1apVNGjQwOlIfuNyR/hU+HxYYmIizZo1IyoqivDwcNauXau/xEREJFtWr15N\ns2bNOHfuHNOmTeOJJ55wOpJf0ZSuZCo4OJj58+dz3XXXsWXLFiIiIkhOTnY6loiI5DF79uyhffv2\nnDt3jueee05lLw9S4fNxJUqUYOnSpYSGhrJgwQIGDx7sdCQREclD4uLiuP/++zlx4gQtW7Zk7Nix\nTkeSbFDh8wM33XQT8+fPJygoiPHjx/Pmm286HUlERPKAM2fO0KpVK3bv3s0tt9zCrFmzCAwMdDqW\nZIMKn59o2rQpU6dOBeDJJ59k0aJFDicSERFvlpSUxKOPPsqGDRu4+uqr+eyzzyhSpIjTsSSbVPj8\nSEREBC+99BLWWjp27MjXX3/tdCQREfFC1lqefvppFi5cSGhoKCtWrKBcuXJOx5LLoKN0/Yy1lh49\nejB16lRKlCjB119/zQ033OB0LBER8SITJkxg4MCB5MuXj8jISBo1auR0JL+n07Jkk78WPoBz587R\nqlUrli9fzrXXXsv69eu56qqrnI4lIiJeYPbs2TzyyCMAulqTF9FpWeSSBQUFMW/ePGrVqsUvv/xC\n8+bNOX78uNOxRETEYcuWLSMiIgKA8ePHq+z5EBU+P1W4cGGWL1/OTTfdxI4dO7jvvvs4deqU07FE\nRMQh69at44EHHuDcuXMMHDiQZ5991ulI4kGa0vVzv/76K/Xq1ePAgQM0a9aMTz/9lJCQEKdjiYhI\nLtqyZQuNGzfm5MmTdO/enXfeeQdjsj17KDlAU7pyWa6++mo+//xzSpUqxcqVK+ncuTNJSUlOxxIR\nkVzy008/0aJFC06ePEmHDh14++23VfZ8kAqfUKlSJSIjIylatCgff/wx3bt31yXYRET8QExMDHff\nfTdHjx6lRYsWzJw5UydW9lEqfAJAjRo1WLp0KQUKFOC9996jV69eKn0iIj7swIEDNG7cmIMHD1Kv\nXj0WLFhAvnz5nI4lOUSFT1LVr1+fpUuXkj9/ft5991369euH9nMUEfE9v/76K40bN+aXX36hdu3a\nLFu2jIIFCzodS3KQCp/8S5MmTVIP3Hj77bcZMGCASp+IiA85dOgQjRs35ueff6ZWrVpERkYSGhrq\ndCzJYSp8cp67776bRYsWkS9fPt544w2eeeYZlT4RER9w+PBhmjRpwt69ewkPD2flypUUK1bM6ViS\nC1T4JEMtWrRg4cKFBAcHM3HiRAYNGqTSJyKSh/322280adKE3bt3U716dT7//HOKFy/udCzJJSp8\nkqn77ruP+fPnExQUxIQJE3juuedU+kRE8qDffvuNu+66i59++olbbrmFVatWccUVVzgdS3KRCp9c\nUKtWrZg3bx7BwcH83//9H3369NHRuyIieUhMTAwNGjRg165dVKtWjS+++IISJUo4HUtyma60IVny\n2Wef0b59exISEujcuTPTp08nKCjI6VgiInIBu3fvpmnTphw8eJDw8HAiIyMpWbKk07EkGy73Shsq\nfJJlq1evpmXLlpw6dYr27dsze/ZsnbNJRMRLbd++nWbNmhEbG0u9evVYtmyZjsbNw3RpNck1jRs3\n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\nvMsjiwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,-numpy.pi/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is so nice. We have reproduced the trajectories that Lanchester found more than a hundred years ago, painstakingly drawing them by hand with a contraption called a \"trammel.\" It must have taken him days!\n", + "\n", + "Here is how the different phugoid curves are drawn in von Kármán's book, _Aerodynamics_ (1957). He never says _how_ he drew them, but we're guessing by hand, also. We did pretty good!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/vonKarman-phugoids.png)\n", + "\n", + "#### Figure 4. Phugoid curves in von Kármán (1957)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next notebook of this series, we'll look at the differential equation that arises when you consider small perturbations on the horizontal phugoid, and we'll learn to numerically integrate that to get the flight paths." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Lanchester, F. W. _Aerodonetics_, D. van Nostrand Company: New York, 1909. On the public domain. [Get it from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PP1#v=onepage&q&f=false).\n", + "\n", + "2. Milne-Thompson, L. M. _Theoretical Aerodynamics_, Dover 2012 reprint of the revised 1966 edition. [Read on Google Books](http://books.google.com/books?id=EMfCAgAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see section 18.5)\n", + "\n", + "3. Sinha, N. K. and Ananthkrishnan, N. _Elementary Flight Dynamics with an introduction to Bifurcation and Continuation Methods_, CRC Press, 2013. [Read on Google Books](http://books.google.com/books?id=yXL6AQAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see chapter 5)\n", + "\n", + "4. von Kármán, T. _Aerodynamics_, Dover 2004 reprint of the 1957 2nd edition. (see pages 149–151)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Execute this cell to load the notebook's style sheet, then ignore it\n", + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb b/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb new file mode 100644 index 0000000..eb6283b --- /dev/null +++ b/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb @@ -0,0 +1,949 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth. Partly based on David Ketcheson's pendulum lesson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Oscillation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome back! This is the second IPython Notebook of the series _\"The phugoid model of glider flight\"_, the first learning module of the course [**\"Practical Numerical Methods with Python.\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about)\n", + "\n", + "In the first notebook, _\"Phugoid Motion\"_, we described the physics of an aircraft's oscillatory trajectory, seen as an exchange of kinetic and potential energy. This analysis goes back to Frederick Lanchester, who published his book _\"Aerodonetics\"_ on aircraft stability in 1909. We concluded that first exposure to our problem of interest by plotting the flight paths predicted by Lanchester's analysis, known as _phugoids_.\n", + "\n", + "Here, we will look at the situation when an aircraft is initially moving on the straight-line phugoid (obtained with the parameters $C=2/3$, $\\cos\\theta=1$, and $z=z_t$ in the previous analysis), and experiences a small upset, a wind gust that slightly perturbs its path. It will then enter into a gentle oscillation around the previous straight-line path: a _phugoid oscillation_.\n", + "\n", + "If the aircraft experiences an upward acceleration of $-d^2z/dt^2$, and we assume that the perturbation is small, then $\\cos\\theta=1$ is a good approximation and Newton's second law in the vertical direction is:\n", + "\n", + "$$\\begin{equation}\n", + "L - W = - \\frac{W}{g}\\frac{d^2 z}{dt^2}\n", + "\\end{equation}$$\n", + "\n", + "In the previous notebook, we saw that the following relation holds for the ratio of lift to weight, in terms of the trim velocity $v_t$:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}=\\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "This will be useful: we can divide Equation (1) by the weight and use Equation (2) to replace $L/W$. Another useful relation from the previous notebook expressed the conservation of energy (per unit mass) as $v^2 = 2 gz$. With this, Equation (1) is rearranged as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d^2z}{dt^2} + \\frac{gz}{z_t} = g\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look at Equation (3) for a moment. Does it ring a bell? Do you recognize it?\n", + "\n", + "If you remember from your physics courses the equation for _simple harmonic motion_, you should see the similarity! \n", + "\n", + "Take the case of a simple spring. Hooke's law is $F=-kx$, where $F$ is a restoring force, $x$ the displacement from a position of equilibrium and $k$ the spring constant. This results in the following ordinary differential equation for the displacement:\n", + "\n", + "$$\\begin{equation}\n", + " \\frac{d^2 x}{dt^2}= -\\frac{k}{m}x\n", + "\\end{equation}$$\n", + "\n", + "which has the solution $x(t) = A \\cos(\\omega t- \\phi)$, representing simple harmonic motion with an angular frequency $\\omega=\\sqrt{k/m}=2\\pi f$ and phase angle $\\phi$.\n", + "\n", + "Now look back at Equation (3): it has nearly the same form and it represents simple harmonic motion with angular frequency $\\omega=\\sqrt{g/z_t}$ around mean height $z_t$. \n", + "\n", + "Think about this for a moment ... we can immediately say what the period of the oscillation is: exactly $2 \\pi \\sqrt{z_t/g}$ — or, in terms of the trim velocity, $\\pi \\sqrt{2} v_t/g$.\n", + "\n", + "_This is a remarkable result!_ Think about it: we know nothing about the aircraft, or the flight altitude, yet we can obtain the period of the phugoid oscillation simply as a function of the trim velocity. For example, if trim velocity is 200 knots, we get a phugoid period of about 47 seconds—over that time, you really would not notice anything if you were flying in that aircraft.\n", + "\n", + "Next, we want to be able to compute the trajectory of the aircraft for a given initial perturbance. We will do this by numerically integrating the equation of motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare to integrate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to integrate the differential equation and plot the trajectory of the aircraft. Are you ready?\n", + "\n", + "The equation for the phugoid oscillation is a second-order, ordinary differential equation (ODE). Let's represent the time derivative with a prime, and write it like this:\n", + "\n", + "$$\\begin{equation}\n", + "z(t)'' + \\frac{g \\,z(t)}{z_t}=g\n", + "\\end{equation}$$\n", + "\n", + "There's a convenient trick when we work with ODEs: we can turn this 2nd-order equation into a system of two 1st-order equations. Like this:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z'(t) &=& b(t)\\\\\n", + "b'(t) &=& g\\left(1-\\frac{z(t)}{z_t}\\right)\n", + "\\end{eqnarray}$$\n", + "\n", + "Are you following? Make sure you are following the derivations, even if it means writing the equations down in your own notes! (Yes, the old-fashioned paper way.)\n", + "\n", + "Another way to look at a system of two 1st-order ODEs is by using vectors. You can make a vector with your two independent variables, \n", + "\n", + "$$\\begin{equation}\n", + "\\vec{u} = \\begin{pmatrix} z \\\\ b \\end{pmatrix}\n", + "\\end{equation}$$\n", + "\n", + "and write the differential system as a single vector equation:\n", + "\n", + "\\begin{equation}\n", + "\\vec{u}'(t) = \\begin{pmatrix} b\\\\ g-g\\frac{z(t)}{z_t} \\end{pmatrix}\n", + "\\end{equation}\n", + "\n", + "If you call the right-hand-side $\\vec{f}(\\vec{u})$, then the equation is very short: $\\vec{u}'(t) = \\vec{f}(\\vec{u})$—but let's drop those arrows to denote vectors from now on, as they are a bit cumbersome: just remember that $u$ and $f$ are vectors in the phugoid equation of motion.\n", + "\n", + "Next, we'll prepare to solve this problem numerically." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial value problems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's step back for a moment. Suppose we have a first-order ODE $u'=f(u)$. You know that if we were to integrate this, there would be an arbitrary constant of integration. To find its value, we do need to know one point on the curve $(t, u)$. When the derivative in the ODE is with respect to time, we call that point the _initial value_ and write something like this:\n", + "\n", + "$$u(t=0)=u_0$$\n", + "\n", + "In the case of a second-order ODE, we already saw how to write it as a system of first-order ODEs, and we would need an initial value for each equation: two conditions are needed to determine our constants of integration. The same applies for higher-order ODEs: if it is of order $n$, we can write it as $n$ first-order equations, and we need $n$ known values. If we have that data, we call the problem an _initial value problem_.\n", + "\n", + "Remember the definition of a derivative? The derivative represents the slope of the tangent at a point of the curve $u=u(t)$, and the definition of the derivative $u'$ for a function is:\n", + "\n", + "$$u'(t) = \\lim_{\\Delta t\\rightarrow 0} \\frac{u(t+\\Delta t)-u(t)}{\\Delta t}$$\n", + "\n", + "If the step $\\Delta t$ is already very small, we can _approximate_ the derivative by dropping the limit. We can write:\n", + "\n", + "$$\\begin{equation}\n", + "u(t+\\Delta t) \\approx u(t) + u'(t) \\Delta t\n", + "\\end{equation}$$\n", + "\n", + "With this equation, and because we know $u'(t)=f(u)$, if we have an initial value, we can step by $\\Delta t$ and find the value of $u(t+\\Delta t)$, then we can take this value, and find $u(t+2\\Delta t)$, and so on: we say that we _step in time_, numerically finding the solution $u(t)$ for a range of values: $t_1, t_2, t_3 \\cdots$, each separated by $\\Delta t$. The numerical solution of the ODE is simply the table of values $t_i, u_i$ that results from this process." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to execute the process described above and find the numerical solution of the ODE, we start by choosing the values $t_1,t_2,t_3 \\cdots t_n$—we call these values our *grid* in time. The first point of the grid is given by our _initial value_, and the small difference between two consecutive times is called the _time step_, denoted by $\\Delta t$. The solution value at time $t_n$ is denoted by $u_n$.\n", + "\n", + "Let's build a time grid for our problem. We first choose a final time $T$ and the time step $\\Delta t$. In code, we'll use readily identifiable variable names: `T` and `dt`, respectively. With those values set, we can calculate the number of time steps that will be needed to reach the final time; we call that variable `N`. \n", + "\n", + "Let's write some code. The first thing we do in Python is load our favorite libraries: NumPy for array operations, and the Pyplot module in Matplotlib, to later on be able to plot the numerical solution. The line `%matplotlib inline` tells IPython Notebook to show the plots inline." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy \n", + "from matplotlib import pyplot\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, initialize `T` and `dt`, calculate `N` and build a NumPy array with all the values of time that make up the grid." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100.0\n", + "dt = 0.02\n", + "N = int(T/dt)+1\n", + "t = numpy.linspace(0.0, T, N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have our grid! Now it's time to apply the numerical time stepping represented by Equation (10)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Write the code above using the NumPy function `arange()` instead of `linspace()`. If you need to, read the documentation for these functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Enter a question mark followed by any function, e.g., `?numpy.linspace`, into a code cell and execute it, to get a help pane on the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The approximate solution at time $t_n$ is $u_n$, and the numerical solution of the differential equation consists of computing a sequence of approximate solutions by the following formula, based on Equation (10):\n", + "\n", + "$$u_{n+1} = u_n + \\Delta t \\,f(u_n).$$\n", + "\n", + "This formula is called **Euler's method**.\n", + "\n", + "For the equations of the phugoid oscillation, Euler's method gives the following algorithm that we need to implement in code:\n", + "\n", + "\\begin{align}\n", + "z_{n+1} & = z_n + \\Delta t \\, b_n \\\\\n", + "b_{n+1} & = b_n + \\Delta t \\left(g - \\frac{g}{z_t} \\, z_n \\right).\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To apply the numerical solution method, we need to set things up in code: define the parameter values needed in the model, initialize a NumPy array to hold the discrete solution values, and initialize another array for the elevation values." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# initial conditions\n", + "z0 = 100. #altitude\n", + "b0 = 10. #upward velocity resulting from gust\n", + "zt = 100.\n", + "g = 9.81\n", + "\n", + "u = numpy.array([z0, b0])\n", + "\n", + "# initialize an array to hold the changing elevation values\n", + "z = numpy.zeros(N)\n", + "z[0] = z0 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should pay attention to a couple of things: (1) See how there is a dot after the numbers used to define our parameters? We just want to be explicit (as a good habit) that these variables are real numbers, called \"floats.\" (2) We both _created_ and _initialized_ with zeros everywhere the solution vector `z`. Look up the documentation for the handy NumPy function `zeros()`, if you need to. (3) In the last line above, we assign the _initial value_ to the first element of the solution vector: `z[0]`.\n", + "\n", + "Now we can step in time using Euler's method. Notice how we are time stepping the two independent variables at once in the time iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-loop using Euler's method\n", + "for n in range(1,N):\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make sure you understand what this code is doing. This is a basic pattern in numerical methods: iterations in a time variable that apply a numerical scheme at each step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the code is correct, we have stored in the array `z` the position of the glider at each time. Let's use Matplotlib to examine the flight path of the aircraft.\n", + "\n", + "You should explore the [Matplotlib tutorial](http://matplotlib.org/users/pyplot_tutorial.html) (if you need to) and familiarize yourself with the command-style functions that control the size, labels, line style, and so on. Creating good plots is a useful skill: it is about communicating your results effectively. \n", + "\n", + "Here, we set the figure size, the limits of the vertical axis, the format of tick-marks, and axis labels. The final line actually produces the plot, with our chosen line style (continuous black line)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4)) #set plot size\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z, 'k-');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Explore and think" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try changing the value of `v` in the initial conditions. \n", + "\n", + "* What happens when you have a larger gust? \n", + "* What about a smaller gust? \n", + "* What happens if there isn't a gust (`v = 0`)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equation for phugoid oscillations is a 2nd-order, linear ODE and it has an exact solution of the following form:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z(t) = A \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + B \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $A$ and $B$ are constants that we solve for using initial conditions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our numerical solution used the initial conditions:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z(0) = z_0 \\\\\n", + "b(0) = b_0\n", + "\\end{eqnarray}$$\n", + "\n", + "Applying these to the exact solution and solving for $A$ and $B$, we get:\n", + "\n", + "$$\\begin{equation}\n", + "z(t) = b_0 \\sqrt{\\frac{z_t}{g}} \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + (z_0-z_t) \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We already defined all of these variables for our numerical solution, so we can immediately compute the exact solution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The expression is a bit long —if you don't feel like scrolling left and right, you can insert a line break in the code using a backslash '\\' _(without any trailing spaces)_ and Python will treat the next line as a continuation of the first." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot our exact solution! Even better, we can plot _both_ the numerical solution *and* the exact solution to see how well Euler's method approximated the phugoid oscillations.\n", + "\n", + "To add another curve to a plot, simply type a second `pyplot.plot()` statement. We also added a legend using the format\n", + "\n", + "```Python\n", + "pyplot.legend([\"line 1\",\"line 2\"])\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXZ3JngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4))\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z)\n", + "pyplot.plot(t, z_exact)\n", + "pyplot.legend(['Numerical Solution','Analytical Solution']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks like pretty good agreement, but what's happening towards the end? We'll come back to this. For now, re-run the previous steps with a different timestep, say $dt=0.01$ and pay attention to the difference.\n", + "\n", + "Euler's method, like all numerical methods, introduces some errors. If the method is *convergent*, the approximation will get closer and closer to the exact solution as we reduce the size of the step, $\\Delta t$. The error in the numerical method should tend to zero, in fact, when $\\Delta t\\rightarrow 0$—when this happens, we call the method _consistent_. We'll define these terms more carefully in the theory components of this course. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To compare the two solutions, we need to use a **norm** of the difference, like the $L_1$ norm, for example.\n", + "\n", + "$$ E = \\Delta t \\sum_{n=0}^N \\left|z(t_n) - z_n\\right|$$\n", + "\n", + "The $L_1$ norm is the sum of the individual differences between the exact and the numerical solutions, at each mesh point. In other words, $E$ is the discrete representation of the integral over the interval $T$ of the (absolute) difference between the computed $z$ and $z_{\\rm exact}$:\n", + "\n", + "$$ E = \\int \\vert z-z_\\rm{exact}\\vert dt $$\n", + "\n", + "We check for convergence by calculating the numerical solution using progressively smaller values of `dt`. We already have most of the code that we need. We just need to add an extra loop and an array of different $\\Delta t$ values to iterate through. \n", + "\n", + "You should read the documentation for the function [enumerate](https://docs.python.org/2/library/functions.html#enumerate) and make sure you understand how we're using it below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Warning" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below can take a little while to finish (the last $\\Delta t$ value alone requires 1 million iterations!). If the cell is still running, the input label will say `In [*]`. When it finishes, the `*` will be replaced by a number." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-increment array\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001, 0.0001])\n", + "\n", + "# array that will contain solution of each grid\n", + "z_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " N = int(T/dt)+1 # number of time-steps\n", + " ### discretize the time using numpy.linspace() ###\n", + " t = numpy.linspace(0.0, T, N)\n", + "\n", + " # initial conditions\n", + " u = numpy.array([z0, b0])\n", + " z = numpy.empty_like(t)\n", + " z[0] = z0\n", + " \n", + " # time loop - Euler method\n", + " for n in range(1,N):\n", + " ### compute next solution using Euler method ###\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0] # store the elevation at time-step n+1\n", + " \n", + " z_values[i] = z.copy() # store the total elevation calculation grid i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate the error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical solutions for each $\\Delta t$ in the array `z_values`. To calculate the error corresponding to each $\\Delta t$, we can write a function! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_error(z, dt):\n", + " \"\"\"Returns the error relative to analytical solution using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array of float\n", + " numerical solution.\n", + " dt : float\n", + " time increment.\n", + " \n", + " Returns\n", + " -------\n", + " err : float\n", + " L_{1} norm of the error with respect to the exact solution.\n", + " \"\"\"\n", + " N = len(z)\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt\n", + " \n", + " return dt * numpy.sum(numpy.abs(z-z_exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: in the last line of the function, we perform an 'array operation': \n", + "\n", + "`z - z_exact`\n", + "\n", + "We are *not* subtracting one value from another. Instead, we are taking the difference between elements at each corresponding index in both arrays. Here is a quick example:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2, 1])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = numpy.array([1, 2, 3])\n", + "b = numpy.array([4, 4, 4])\n", + "\n", + "b - a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we iterate through each $\\Delta t$ value and calculate the corresponding error. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "error_values = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " ### call the function get_error() ###\n", + " error_values[i] = get_error(z_values[i], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember, *if* the method is convergent then the error should get smaller as $\\Delta t$ gets smaller. To visualize this, let's plot $\\Delta t$ vs. error. If you use `pyplot.plot` you won't get a very useful result. Instead, use `pyplot.loglog` to create the same plot with a log-log scale. This is what we do almost always to assess the errors of a numerical scheme graphically." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nWtIESavUofkys59KukjSFElDJT0gaaGZbStJ7n6pu+/s7ru4e3Pbl4Yssi9f7eb72p626+75rp7r\nuL6z7aL42rq3P7OQ14XOM591Scqy0Nf2Ns9C1pdLnqX4Xe9sHXnm91xf1hVbnP/uZN/s3XaF5tmV\nSJo4d1/o7pPd/XZJ6zvZ5AxJ17n7Ne7+vLuPl/S6pJO7ek8zu1vSrZJGm9krZrZnX+uMw//ZpWri\nVqxY0W0dIcT5L6KunuvNX0RxzrLQ18bhL/a05BmXJo48wzVxpciyqzpCv47f9XCvLWUTF/klRsxs\npaRT3X1mbrm/pI8lHZlr8lq3u1jSTu6e6ePP45ArAABIjK4uMdKv1IXkYUtJG0t6s8P6tyRt3dc3\n7yoIAACAJOHsVAAAgASKYxP3jqR1kgZ3WD9YLXNxAAAAZS92TZy7r5H0uKQDOjy1v1rOUgUAACh7\nkczEmdlASTvkFjeS9BUzGyrpXXd/RdL/SLrezB5RS+N2klrm4S6Pol4AAIC4ieTsVDPLSGrKLbr+\ndX236e7+s9w2J0s6U9IQSX+SdLq731fiUgEAAGIp8kuMIBnMbIWkD9RyXb/33H2/aCtKPjPbRNKz\nkm51919GXU9SmdkgSYvVcmShv6TL3P3iaKtKptwF1a+X9AVJn0j6jbvfFm1VyWZmsyUNl9To7kdE\nXU8SmdlBki5Uy5G789z9mohLig2aOOTFzF6S9C13/39R15IWZvZbSZWSXnb3M6OuJ6nMbCNJ/d29\nOdcYPyNpD3d/O+LSEsfMtpa0lbs/bWaD1TKfvIO7r4q4tMQys+GSNpV0HE1c4cysn1p+pzOSVkp6\nQtL33P29KOuKi9id2IBY4xp7gZjZDpK+LmmhyLVP3H19m9vvfVbSaknN3bwEXXD3N9z96dyf31TL\n1QK2iLaqZHP3pZI+irqOBNtD0jPu/rq7fyRpgTY88bFs0cQhXy7pXjN7xMyOirqYFLhA0llRF5EW\nZraZmT0l6WVJU919ZdQ1JZ2Z7SppI3d/LepaUNa2kdR2H3xV0hcjqiV24njHBsTTD9z99dzhlrvN\n7E/u/qeoi0oiMztE0gvu/lcz2zvqetLA3T+Q9F0z20rSEjNrcPe/Rl1XUpnZFpJmSBoXdS0oe8x8\ndYNv4lLIzIaZ2Vwze9XM1pvZcZ1sc4qZvWRmq8zssbbNRO65ZWb2hJlVSJK7v5773zfU8nX2LqX6\nPFErQp57SjoyN2d4gaQTzGxy6T5RtIqxf7Zy97ckZSUNLfoHiYFiZGlmAyTNlnSuuz9Uuk8TvSLu\nm2XbiPQ1U0n/UPtv3r6k9t/MlTWauHQaKOlpSRMkrVKHv0DM7KeSLpI0RS3/sXtA0sLcmWly90vd\nfWd336V1WNzMNs299nOSfijpzyX7NNELmqe7n+3uX3b3r0r6v5KucvcpJfw8UQu9f27VZv/cTNI+\nufcvB6GzNEnTJTW5+42l+xixETTPti8tRfEx1adMJT0qaScz2yb3358DJd1Votrjz915pPihlrN5\nju2w7mFJV3RY94Kk33XxHl+V9GTu8SdJ1VF/riTn2WG74ySdH/XnSnKeknaXtCy3fy7r+H7l8giU\n5d5que3hE7ksl6nlrPTIP18S88w9f7ektyR9LOkVSXtG/dmSlqmkgyU9L+lFSeOi/hxxejATV2bM\nrL9aDoWe3+GpBkl7dfYad39JZXJ4qlC9ybMtd59RjLqSqpf756OSdi5yaYnTyyzvk7RxkUtLpN7+\nrrv7iGLWlWT5Zuru8yTNK2FpicHh1PKzpVr+kn6zw/q31HJrMxSGPMMiz3DIMizyDI9M+4gmDgAA\nIIFo4srPO2qZeRncYf1gSa+XvpzEI8+wyDMcsgyLPMMj0z6iiSsz7r5GLbfS6XjF6/3VclYQCkCe\nYZFnOGQZFnmGR6Z9x4kNKWRmAyXtkFvcSNJXzGyopHfd/RVJ/yPpejN7RC2/KCepZf7g8ijqjTvy\nDIs8wyHLsMgzPDItsqhPj+UR/qGWGwWvzz3WtfnztW22OVnSS2q5x+SjkvaOuu64PsiTPOP6IEvy\njPuDTIv7sFyAAAAASBBm4gAAABKIJg4AACCBaOIAAAASiCYOAAAggWjiAAAAEogmDgAAIIFo4gAA\nABKIJg4AACCBaOIAAAASiCYOAApkZgPM7AUz+0HUtQAoXzRxAFC4EyVtLmlKdxuZ2cZm9pyZbVOa\nsgCUE5o4ACiAmW0i6euSzpY03MxGdLP5rpK2cPd/lKQ4AGWFJg4ACnOKpEskXStpuaTfdLPtvpKa\nSlEUgPJDEwcAeTKz/yPpi+7+rLuvk1QnaU8zO6jDdj82s/+VdLqkz5nZ/5rZ1yMoGUCKmbtHXQMA\nJIKZ/UrSLe7+t9yySfqTpDXuvkuHbftLek/SLu7+QsmLBZB6fBMHAHkwsy0kbd7awEmSt/wr+BxJ\nQ81sTIeX/EDShzRwAIqFJg4A8lMt6Q8dV7r7HZKekFSX+2au1f6SsqUpDUA5ookDgB6Y2WBJ/d39\ntS42+S9J35R0VJt1I5Rr4sxsbzMbUNQiAZQdZuIAoAe5kxQelPRWN5tNl7RG0o7uvs7MPpa0l6Tn\nJE109/OKXiiAskITBwDdMLOtJb0kKZ9v0lzSz9x9hpldKGmtpLclXeHuHxexTABliCYOAAAggZiJ\nAwAASCCaOAAAgASiiQMAAEggmjgAAIAEookDAABIIJo4AACABKKJAwAASCCaOAAAgAT6/wsNBajn\noDeVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase tick font size\n", + "pyplot.grid(True) #turn on grid lines\n", + "pyplot.xlabel('$\\Delta t$', fontsize=16) #x label\n", + "pyplot.ylabel('Error', fontsize=16) #y label\n", + "pyplot.loglog(dt_values, error_values, 'ko-') #log-log plot\n", + "pyplot.axis('equal') #make axes scale equally;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the kind of result we like to see! As $\\Delta t$ shrinks (towards the left), the error gets smaller and smaller, like it should." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We calculated the error for several different timestep sizes using two nested `for` loops. That worked, but whenever possible, we like to re-use code (and not just copy and paste it!). \n", + "\n", + "Create a function that implements Euler's method and re-write the error analysis cell to use your function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb b/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb new file mode 100644 index 0000000..742302d --- /dev/null +++ b/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb @@ -0,0 +1,929 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, I. Hawke. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Full phugoid model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the third IPython Notebook of the series on the _phugoid model of glider flight_, our first learning module of the course [\"Practical Numerical Methods with Python\"](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about). In the first notebook, we described the physics of the trajectories known as phugoids obtained from an exchange of potential and kinetic energy in an idealized motion with no drag. We gave you a neat little code to play with and plot various phugoid curves.\n", + "\n", + "In the second notebook, we looked at the equation representing small perturbations on the straight-line phugoid, resulting in simple harmonic motion. This is a second-order ordinary differential equation, and we solved it numerically using **Euler's method**: the simplest numerical method of all. We learned about convergence and calculated the error of the numerical solution, comparing with an analytical solution. That is a good foundation!\n", + "\n", + "Now, let's go back to the dynamical model, and take away the idealization of no-drag. Let's remind ourselves of the forces affecting an aircraft, considering now that it may be accelerating, with an instantaneous upward trajectory. We use the designation $\\theta$ for the angle, and consider it positive upwards." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces-lesson3.png)\n", + "#### Figure 1. Forces with a positive trajectory angle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Figure 1, $L$ is the lift, $W$ is the weight, $D$ is the drag, and $\\theta$ the positive angle of the trajectory, instantaneously. \n", + "\n", + "In lesson 1, we wrote the force balance in the directions perpendicular and parallel to the trajectory for a glider in _equilibrium_. What if the forces are _not_ in balance? Well, there will be acceleration terms in the equations of motion, and we would have in that case:\n", + "\n", + "\\begin{align}\n", + "m \\frac{dv}{dt} & = - W \\sin\\theta - D \\\\\n", + "m v \\, \\frac{d\\theta}{dt} & = - W \\cos\\theta + L\n", + "\\end{align}\n", + "\n", + "We can use a few little tricks to make these equations more pleasing. First, use primes to denote the time derivatives and divide through by the weight:\n", + "\n", + "\\begin{align}\n", + " \\frac{v'}{g} & = - \\sin\\theta - D/W \\\\\n", + "\\frac{v}{g} \\, \\theta' & = - \\cos\\theta + L/W\n", + "\\end{align}\n", + "\n", + "\n", + "Recall, from our first lesson, that the ratio of lift to weight is known from the trim conditions—$L/W=v^2/v_t^2$— and also from the definitions of lift and drag, \n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "we see that $L/D=C_L/C_D$. The system of equations can be re-written:\n", + "\n", + "\\begin{align}\n", + " v' & = - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\\n", + " \\theta' & = - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v\n", + "\\end{align}\n", + "\n", + "It is very interesting that the first equation has the factor $C_D/C_L$, which is the inverse of a measure of the aerodynamic efficiency of the aircraft. It turns out, this is the term that contributes damping to the phugoid model: if drag is zero, there is no damping. Drag is never zero in real life, but as engineers design more aerodynam-ically efficient aircraft, they make the phugoid mode more weakly damped. At altitude, this is nothing but a slight bother, but vertical oscillations are unsafe during final approach to land, so this is something to watch out for!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The initial value problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to visualize the flight trajectories predicted by this model, we are going to need to integrate the spatial coordinates, which depend on both the forward velocity (tangential to the trajectory) and the trajectory angle. The position of the glider on a vertical plane will be designated by coordinates $(x, y)$ with respect to an inertial frame of reference, and are obtained from:\n", + "\n", + "\\begin{align}\n", + "x'(t) & = v \\cos(\\theta) \\\\\n", + "y'(t) & = v \\sin(\\theta).\n", + "\\end{align}\n", + "\n", + "Augmenting our original two differential equations by the two equations above, we have a system of four first-order differential equations to solve. We will use a time-stepping approach, like in the previous lesson. To do so, we do need *initial values* for every unknown:\n", + "\n", + "$$\n", + "v(0) = v_0 \\quad \\text{and} \\quad \\theta(0) = \\theta_0\\\\\n", + "x(0) = x_0 \\quad \\text{and} \\quad y(0) = y_0\n", + "$$\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve with Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We know how to apply Euler's method from the previous lesson. We replace each of the time derivatives by an approximation of the form:\n", + "\n", + "$$v'(t) \\approx \\frac{v^{n+1} - v^n}{\\Delta t},$$\n", + "\n", + "where we are now using a superscript $n$ to indicate the $n$-th value in the time iterations. The first differential equation, for example, gives:\n", + "\n", + "$$\\frac{v^{n+1} - v^n}{\\Delta t} = - g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2$$\n", + "\n", + "Alright, we know where this is going. At each time iteration $t^n$, we want to evaluate all the known data of our system to obtain the state at $t^{n+1}$—the next time step. We say that we are _stepping in time_ or _time marching_.\n", + "\n", + "The full system of equations discretized with Euler's method is:\n", + "\n", + "\\begin{align}\n", + "v^{n+1} & = v^n + \\Delta t \\left(- g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2 \\right) \\\\\n", + "\\theta^{n+1} & = \\theta^n + \\Delta t \\left(- \\frac{g}{v^n}\\,\\cos\\theta^n + \\frac{g}{v_t^2}\\, v^n \\right) \\\\\n", + "x^{n+1} & = x^n + \\Delta t \\, v^n \\cos\\theta^n \\\\\n", + "y^{n+1} & = y^n + \\Delta t \\, v^n \\sin\\theta^n.\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we've learned before, the system of differential equations can also be written as a vector equation:\n", + "\n", + "$$u'(t) = f(u)$$\n", + "\n", + "where\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix}.\n", + "\\end{align}\n", + "\n", + "It's a bit tricky to code the solution using a NumPy array holding all your independent variables. But if you do, a function for the Euler step can be written that takes any number of simultaneous equations. It simply steps in time using the same line of code:\n", + "\n", + "```Python\n", + "def euler_step(u, f, dt):\n", + " return u + dt * f(u)\n", + "```\n", + "\n", + "This function can take a NumPy array `u` with any number of components. All we need to do is create an appropriate function `f(u)` describing our system of differential equations. Notice how we are passing a _function_ as part of the arguments list to `euler_step()`. Neat!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we start by loading the modules and libraries that we need for this problem. We'll need a few transcendental functions, including the $\\log$ for a convergence study later on. And remember: the line `%matplotlib inline` is a magic function that tells Matplotlib to give us the plots in the notebook (the default behavior of Matplotlib is to open a pop-up window). In addition, we are importing the module `rcParams` to define notebook-wide plotting parameters: font family and size. Here we go!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log, ceil\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to set things up to start our numerical solution: the parameter \n", + "values and the _initial values_. You know what the acceleration of gravity is: 9.8 m/s$^2$, but what are good values for $C_D/C_L$, the inverse of the aerodynamic efficiency? Some possible values are given on a table in the Wikipedia entry for [lift-to-drag ratio](http://en.wikipedia.org/wiki/Lift-to-drag_ratio): a modern sailplane can have $L/D$ of 40 to 60, depending on span (and, in case you're interested, a flying squirrel has $L/D$ close to 2).\n", + "\n", + "For the _trim velocity_, the speed range for typical sailplanes is between 65 and 280 km/hr, according to Wikipedia (it must be right!). Let's convert that to meters per second: 18 to 78 m/s. We'll pick a value somewhere in the middle of this range.\n", + "\n", + "Here's a possible set of parameters for the simulation, but be sure to come back and change some of these, and see what happens!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 30.0 # trim velocity in m s^{-1} \n", + "C_D = 1/40 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = v_t # start at the trim velocity (or add a delta)\n", + "theta0 = 0 # initial angle of trajectory\n", + "x0 = 0 # horizotal position is arbitrary\n", + "y0 = 1000 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll define a function `f()` to match the right-hand side of Equation (15), the full differential system in vector form. This function assumes that we have available the parameters defined above. If you re-execute the cell above with different parameter values, you can just run the solution without re-executing the function definition." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare the code defining function `f(u)` with the differential equations, and convince yourself that it's right!\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix} \\nonumber\n", + "\\end{align}\n", + "\n", + "Now, Euler's method is implemented in a simple function `euler_step()`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equations.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After defining a final time for the solution, and the time step $\\Delta t$, we can construct the grid in time using the NumPy function [`linspace()`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html). Make sure you study the decisions we made here to build the time grid: why do we add 1 to the definition of `N`, for example?\n", + "\n", + "Look at the code below, and make sure you understand the following aspects of it.\n", + "\n", + "* The NumPy array `u` contains the solution at every time-step, consisting of the velocity, angle and location of the glider. \n", + "* The first element of the array `u` is set to contain the initial conditions. \n", + "* In the `for`-loop, the function `euler_step()` is called to get the solution at time-step $n+1$. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100 # final time\n", + "dt = 0.1 # time increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u = numpy.empty((N, 4))\n", + "u[0] = numpy.array([v0, theta0, x0, y0])# fill 1st element with initial values\n", + "\n", + "# time loop - Euler method\n", + "for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to plot the path of the glider, we need the location (`x`, `y`) with respect to time. That information is already contained in our NumPy array containing the solution; we just need to pluck it out. \n", + "\n", + "Make sure you understand the indices to `u`, below, and the use of the colon notation. If any of it is confusing, read the Python documentation on [Indexing](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider's position with respect to the time\n", + "x = u[:,2]\n", + "y = u[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to plot the path of the glider and get the distance travelled!" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nnMGDB7Np0ybGjx9PcXExr7zyStwh5h0dAamBjoCIiNRPs2fPZvTo0VRUVNCgQQPGjh3LuHHjaNAg\nv3831xRMQqgAERGpv7Zu3cq4ceO4+eabcXeGDBnC5MmT83pKRlMwUqfo/PpolKfolKtolKfoMuVq\nr7324i9/+QszZ86kRYsWPPHEE/Ts2ZOPP/449wHmGRUgIiKS9372s59RXl5Ohw4dWLBgAb1792bd\nunVxh1WvaQqmBpqCERHJHx999BF9+vRhyZIldOzYkbKysrw7VVdTMCIiIjl24IEHUlpaSnFxMcuX\nL2fAgAF8+eWXcYdVL6kAkazQPHQ0ylN0ylU0ylN0UXPVunVrXnzxRTp27MjixYs588wz2bJlS+0G\nl4dUgIiIiKRp1aoVM2fOpE2bNpSVlTFixIgab3Ynu0drQGqgNSAiIvmroqKCnj178uWXXzJ27Fiu\nu+66uEOqdboOSEKoABERyW+zZs1iwIABVFZW8thjj3H22WfHHVKt0iJUqVM0Dx2N8hSdchWN8hTd\nnuaqX79+3HzzzQCMHDmSRYsWZTGq/KUCREREpAa//e1vufDCC9m8eTNnnnkmn376adwh1XmagqmB\npmBERARgy5Yt9OrVi1dffZX+/fszY8aMennfGE3BiIiIJMjee+/N1KlT2X///Xnuuee44YYb4g6p\nTlMBIlmheeholKfolKtolKfospGrdu3a8eCDD2JmjB8/nhdeeOGHB5anVICIiIjshv79+zN27Fjc\nnfPPP58PPvgg7pDqJK0BqYHWgIiISLrt27czYMAAnn/+eXr06EFZWRkFBQVxh5UVWgMiIiKSUA0b\nNmTKlCkccsghzJ8/nyuvvDLukOocFSCSFZqHjkZ5ik65ikZ5ii7buWrdujWPPfYYjRo1YsKECUyf\nPj2r+6/vVICIiIjsoR49enzvImXLly+POaK6Q2tAaqA1ICIisivuzjnnnMPjjz9Oly5dKC8vp1mz\nZnGHtce0BkRERKQOMDMmTZpE586dWbp0KSNHjkS/uNZMBYhkheaho1GeolOuolGeoqvNXDVr1own\nn3ySFi1aMH36dP785z/X2mfVFypAREREsqBjx45MmTIFM+MPf/gDzz77bNwhJZrWgNRAa0BERGR3\nXH/99YwbN47mzZszb948jjrqqLhD2i25WgOiAqQGKkBERGR3VFZWcs455zBt2jTatm1LeXk5Bx98\ncNxhRaZFqCEz62lmpWb2jpmtMrMZZtY5rc8BZnadmZWb2etm9paZvWZmF2bYX4GZXR/2edPM5pnZ\nSbn7RvWT5qGjUZ6iU66iUZ6iy1WuGjRowOTJk+nRowdr1qzh9NNPZ+PGjTn57Lok0QWImfUCXgRm\nuPsR7t4eWAXMMbNDU7oeD/wn8Gt37+bunYF7gfvN7IK03U4EzgZOdvejgUnALDM7pna/jYiI5Ism\nTZrwz3/+kyOOOIJFixYxePBgNm/eHHdYiZLoKRgzmwO0d/d2KW3NgI+AB9z9V2Fbd+Cn7n5j2vvX\nAy+6+7Bw+0hgKTDK3e9P6fcvYJW7D8wQg6ZgRERkj7z33nucfPLJrFu3jr59+/LUU0/RpEmTuMPa\nJU3BBLoBb6c2uPtGYDVwRkpbeYbiowBoAnyS0jwEMKA07XNKgX5m1jR7oYuISL7r0KEDpaWlHHjg\ngbzwwgsMHjyYr7/+Ou6wEiHpBchXZI6xEjjIzPbJ9CYz2w+4A1gD3JDyUjGwHXg/7S0rgUZAlx8a\ncL7SPHQ0ylN0ylU0ylN0ceWqU6dOvPTSSxxwwAE8//zz9OnTh08++aTmN9ZzSS9AFgJHmVmjqgYz\nawEUhZvNUzubWRMzewv4mKCYGOzuH6R0aQVszjCnsiF83j+bwYuIiAB06dKF0tJS2rVrxyuvvEKP\nHj1YtmxZ3GHFKulrQI4D5gO3AtcQHKW4DRgGFAKt3H19hvc1JliUei0wwt2nh+2zgBPcvUVa/0uA\nu4EB7j4z7TWtARERkaxYu3YtAwcOZMGCBRQWFnLHHXcwYsSIuMP6nlytAWlUc5f4uPtrZtYXuApY\nAnwBPARsAYZnKj7C930D3GxmfYC/m9mT7l4JfAoU2s5VRdWRlM8y7W/kyJG0b98egJYtW9K1a1dO\nPfVU4LtDetrWtra1rW1tR9mePXs2l156KY888ggXXnghJSUlTJgwYccRkVzHU/XnVatWkVPuXuce\nQAkwK2W7MdAgQ7+/EqwX6RBuXxlut0vrNxHYCjTNsA+XmpWWlsYdQp2gPEWnXEWjPEWXpFxVVlb6\nvffe602bNnXAmzVr5n/961/9q6++ijs0D//fq/X/yxO9BsTM2plZcVpbC+Bk4O8pzXcD52TYRXuC\nguPzcHs64EDvtH69CQoanaQtIiK1zsy4+OKLefPNNxk0aBAbN25kzJgxtGvXjvHjx+f+aEQMkr4G\nZCQwBjjJ3debWSFwH9DQ3c9K6Xcf0BUY5OGiUzMbCjwKTHH3kSl97yAoOE5y98/M7CLgb8CJ7l6R\nIQZPco5ERKTue/bZZ7nuuusoLy/f0da9e3dOO+00TjnlFI477jgKCwtzEovuBQOY2bHATcARwHqC\nU2inAre4+/aUfkcB/w70JDjisRewieAqp3en9W0EjCe4Guo2gjNgxrj7vGpiUAEiIiK1zt2ZO3cu\nt99+O0899dROV05t164dnTt3pkOHDhQVFXH44YdTVFREUVERLVu2zFocKkASQgVINGVlZTsWNkn1\nlKfolKtolKfo6lKuNm3axMyZM5k9ezZz5sxhyZIlbNu2rdr+++67745ipKioiOLiYvr27UubNm12\n+7N1FoyIiEieKiwsZOjQoQwdOhSAb7/9lhUrVvD222+zYsUKVq5cueN55cqVrF+/nvXr17NgwYLv\n7adr165ceOGFDB8+nNatW8fxVaqlIyA10BEQERFJMnfnk08++V5hMn/+fMrKynZM4xQUFDBq1Ciu\nueYaDj300F3uT1MwCaECRERE6qKtW7dSUlLCvffeS0lJCe5O48aNueKKKxg7dix77713xvfpZnRS\np6Re0EaqpzxFp1xFozxFl2+52muvvRgyZAjPPPMMS5Ys4bzzzmPbtm3ceOONdO3alVdeeSXW+FSA\niIiI1HOdO3fm4YcfZu7cuXTq1Illy5bRs2dPJk6cSFxH+TUFUwNNwYiISH2yZcsWrr76am699VYA\nRowYwT333EPjxo0BrQFJDBUgIiJSHz366KOMGjWKTZs28fOf/5xp06ZRWFioNSBSt+Tb3OqeUp6i\nU66iUZ6iU66+79xzz2XOnDm0bt2amTNn0rdvX7788sucfb4KEBERkTz1k5/8hLlz53LYYYdRXl5O\n//79c/bZmoKpgaZgRESkvlu9ejW9evVi9erVAJqCERERkdp32GGHUVpayoknnpizz1QBIlmhudVo\nlKfolKtolKfolKtdKyoqYt68jPdlrRUqQERERAQITsHN2WdpfcOuaQ2IiIjkE52GKyIiIvWWChDJ\nCs2tRqM8RadcRaM8RadcJYsKEBEREck5rQGpgdaAiIhIPtEaEBEREam3VIBIVmhuNRrlKTrlKhrl\nKTrlKllUgIiIiEjOaQ1IDbQGRERE8onWgIiIiEi9pQJEskJzq9EoT9EpV9EoT9EpV8miAkRERERy\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# visualization of the path\n", + "pyplot.figure(figsize=(8,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'x', fontsize=18)\n", + "pyplot.ylabel(r'y', fontsize=18)\n", + "pyplot.title('Glider trajectory, flight time = %.2f' % T, fontsize=18)\n", + "pyplot.plot(x,y, 'k-', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grid convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's study the convergence of Euler's method for the phugoid model. In the previous lesson, when we studied the straight-line phugoid under a small perturbation, we looked at convergence by comparing the numerical solution with the exact solution. Unfortunately, most problems don't have an exact solution (that's why we compute in the first place!). But here's a neat thing: we can use numerical solutions computed on different grids to study the convergence of the method, even without an analytical solution.\n", + "\n", + "We need to be careful, though, and make sure that the fine-grid solution is resolving all of the features in the mathematical model. How can we know this? We'll have a look at that in a bit. Let's see how this works first.\n", + "\n", + "You need a sequence of numerical solutions of the same problem, each with a different number of time grid points.\n", + "\n", + "Let's create a NumPy array called `dt_values` that contains the time-increment of each grid to be solved on. For each element `dt_values[i]`, we will compute the solution `u_values[i]` of the glider model using Euler's method. If we want to use five different values of $\\Delta t$, we'll have five solutions: we put them in an array ... but each one is also an array! We'll have an array of arrays. How meta is that?\n", + "\n", + "We have one more trick up our sleeve: `enumerate()`. To get all the numerical solutions—each with its value of $\\Delta t$—done in one fell swoop, we will loop over the elements of the array `dt_values`. Within the loop, we need to access both `dt_values[i]` and the index `i`. It turns out, `enumerate()` is a built-in Python function that will give us consecutive `index, value` pairs just like we need. \n", + "\n", + "Read the code below carefully, and remember: you can get a help pane on any function by entering a question mark followed by the function name. For example, add a new code cell below and type: `?numpy.empty_like`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), we compared our numerical result to an analytical solution, but now we will instead compare numerical results from different grids. \n", + "\n", + "For each solution, we'll compute the difference relative to the finest grid. You will be tempted to call this an _\"error\"_, but be careful: the solution at the finest grid is _not the exact_ solution, it is just a reference value that we can use to estimate grid convergence.\n", + "\n", + "To calculate the difference between one solution `u_current` and the solution at the finest grid, `u_finest`, we'll use the $L_1$-norm, but any norm will do.\n", + "\n", + "There is a small problem with this, though. The coarsest grid, where $\\Delta t = 0.1$, has 1001 grid points, while the finest grid, with $\\Delta t = 0.001$ has 100001 grid points. How do we know which grid points correspond to the same location in two numerical solutions, in order to compare them? \n", + "\n", + "If we had time grids of 10 and 100 steps, respectively, this would be relatively simple to calculate. Each element in our 10-step grid would span ten elements in our 100-step grid. \n", + "\n", + "Calculating the _ratio_ of the two grid sizes will tell us how many elements in our fine-grid will span over one element in our coarser grid.\n", + "\n", + "Recall that we can _slice_ a NumPy array and grab a subset of values from it. The syntax for that is\n", + "\n", + "```Python\n", + "my_array[3:8]\n", + "```\n", + "\n", + "An additional slicing trick that we can take advantage of is the \"slice step size.\" We add an additional `:` to the slice range and then specify how many steps to take between elements. For example, this code\n", + "\n", + "```Python\n", + "my_array[3:8:2]\n", + "```\n", + "\n", + "will return the values of `my_array[3]`, `my_array[5]` and `my_array[7]`\n", + "\n", + "With that, we can write a function to obtain the differences between coarser and finest grids. Here we go ..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = ceil(N_fine/N_current)\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the function has been defined, let's compute the grid differences for each solution, relative to the fine-grid solution. Call the function `get_diffgrid()` with two solutions, one of which is always the one at the finest grid. Here's a neat Python trick: you can use negative indexing in Python! If you have an array called `my_array` you access the _first_ element with\n", + "\n", + "`my_array[0]`\n", + "\n", + "But you can also access the _last_ element with \n", + "\n", + "`my_array[-1]`\n", + "\n", + "and the next to last element with\n", + "\n", + "`my_array[-2]`\n", + "\n", + "and so on. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dt = 0.1\n", + "dt = 0.05\n", + "dt = 0.01\n", + "dt = 0.005\n", + "dt = 0.001\n" + ] + } + ], + "source": [ + "# compute difference between one grid solution and the finest one\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " print('dt = {}'.format(dt))\n", + "\n", + " ### call the function get_diffgrid() ###\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to create a plot of the results! We'll create a *log-log* plot with the Matplotlib function [`loglog()`](http://matplotlib.org/api/pyplot_api.html?highlight=loglog#matplotlib.pyplot.loglog). Remember to skip the difference of the finest-grid solution with itself, which is zero." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIh\nZGatzGyLmZ1Sibanm9nPkhGXSLIpSYmE0/1AE+APlWj7Z6BHYsMRCYaSlEjImNmPgM3ANKCnmZ1X\nTtss4GLgv5IUnkhSaasOkZAxs/HAEOAYIhsdvu3u/1ZG27bAB8Cx7r41eVGKJId6UiIhYmYXA/90\n9x3uvgp4DuhoZpeXaJdjZi8CfwO2AE+Y2ejkRyySWOpJiYSImU0C/t3d90RfHwusAv7H3Q8b9jOz\nmcB6dx+U3EhFkkM9KZGQMLNuwJv7ExSAu39FZHvuc8zsmhLtawA/BRYkNVCRJFJPSiQEohMgXnT3\n60s51xBYDWwHznD3oujxC4D3gObuvjmZ8Yoki3pSIuFwAzCptBPu/i2RqehtgJsOOtWRyDCgEpSk\nLSUpkYCZWW2go7u/UU6zMcAaYLiZ1Y0e60h0qM/MapvZgwkNVCQANYMOQES4DXAzu7OCdp8CXYhM\nTx8BNAdmRc/dCbyYsAhFAqKalEiAor2itUCzSr7Fga+BVkA3oDewFHjL3RcmJEiRAClJiYhIaKkm\nJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIi\nofX/ARE7ZqFnKYAXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# log-log plot of the grid differences\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel('$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='-', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Order of convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order of convergence is the rate at which the numerical solution approaches the exact one as the mesh is refined. Considering that we're not comparing with an exact solution, we use 3 grid resolutions that are refined at a constant ratio $r$ to find the *observed order of convergence* ($p$), which is given by:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p = \\frac{\\log \\left(\\frac{f_3-f_2}{f_2-f_1} \\right) }{\\log(r)}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $f_1$ is the finest mesh solution, and $f_3$ the coarsest. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is p = 1.014\n" + ] + } + ], + "source": [ + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values2 = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values2 = numpy.empty_like(dt_values2, dtype=numpy.ndarray)\n", + "\n", + "diffgrid2 = numpy.empty(2)\n", + "\n", + "for i, dt in enumerate(dt_values2):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + "\n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values2[i] = u\n", + " \n", + "\n", + "#calculate f2 - f1\n", + "diffgrid2[0] = get_diffgrid(u_values2[1], u_values2[0], dt_values2[1])\n", + "\n", + "#calculate f3 - f2\n", + "diffgrid2[1] = get_diffgrid(u_values2[2], u_values2[1], dt_values2[2])\n", + "\n", + "# calculate the order of convergence\n", + "p = (log(diffgrid2[1]) - log(diffgrid2[0])) / log(r)\n", + "\n", + "print('The order of convergence is p = {:.3f}'.format(p));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See how the observed order of convergence is close to 1? This means that the rate at which the grid differences decrease match the mesh-refinement ratio. We say that Euler's method is of *first order*, and this result is a consequence of that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Paper airplane challenge" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose you wanted to participate in a paper-airplane competition, and you want to use what you know about the phugoid model to improve your chances. For a given value of $L/D$ that you can obtain in your design, you want to know what is the best initial velocity and launch angle to fly the longest distance from a given height.\n", + "\n", + "Using the phugoid model, write a new code to analyze the flight of a paper airplane, with the following conditions:\n", + "\n", + "* Assume $L/D$ of 5.0 (a value close to measurements in Feng et al. 2009)\n", + "* For the trim velocity, let's take an average value of 4.9 m/s.\n", + "* Find a combination of launch angle and velocity that gives the best distance.\n", + "* Think about how you will know when the flight needs to stop ... this will influence how you organize the code.\n", + "* How can you check if your answer is realistic?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Feng, N. B. et al. _\"On the aerodynamics of paper airplanes\"_, AIAA paper 2009-3958, 27th AIAA Applied Aerodynamics Conference, San Antonio, TX. [PDF](http://arc.aiaa.org/doi/abs/10.2514/6.2009-3958)\n", + "\n", + "* Simanca, S. R. and Sutherland, S. _\"Mathematical problem-solving with computers,\"_ 2002 course notes, Stony Brook University, chapter 3: [The Art of Phugoid](https://www.math.sunysb.edu/~scott/Book331/Art_Phugoid.html). (Note that there is an error in the figure: sine and cosine are switched.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb b/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb new file mode 100644 index 0000000..dfe6da7 --- /dev/null +++ b/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb @@ -0,0 +1,1187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, C.D. Cooper. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid model: bonus!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_The phugoid model of glider flight_ has been such a fun problem to showcase the power of numerical solution of differential equations, we thought you'd enjoy a bonus notebook. The previous lessons were:\n", + "\n", + "* [Phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) —Lays the groundwork for our fun problem, with some context, a little history and a description of the physics of phugoids: curves representing the trajectory of a glider exchanging potential and kinetic energy, with no drag.\n", + "* [Phugoid oscillation](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) —Develops the simple harmonic motion of an aircraft experiencing a small perturbation from the horizontal trajectory: our opportunity to introduce Euler's method, and study its convergence via an exact solution.\n", + "* [Full phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) —The full model takes into account the force of drag and results in a system of two nonlinear equations. We obtain the trajectories using Euler's method in vectorized form, introduce grid-convergence analysis and finish with the paper-airplane challenge!\n", + "\n", + "That is a fantastic foundation for numerical methods. It's a good time to complement it with some theory: the first screencast of the course uses Taylor series to show that _Euler's method is a first-order method_, and we also show you graphical interpretations. Many problems require a more accurate method, though: second order or higher. Among the most popular higher-order methods that we can mention are the _Runge-Kutta methods_, developed around 1900: more than 100 years after Euler published his book containing the method now named after him!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Euler's method is a first-order method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this screencast, we use a Taylor series expansion to analyze Euler's method and show that it incurs a truncation error of first order. We also use a graphical interpretation to motivate the _modified_ Euler method, which achieves second order." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('6i6qhqDCViA')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second-order methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The notebook on phugoid oscillation (lesson 2) included a study of the accuracy obtained with Euler's method, using the exact solution for the simple harmonic motion. We made a _convergence plot_ and saw that as $\\Delta t$ gets smaller, the error also gets smaller. \n", + "\n", + "We could have drawn a line with a slope equal to 1 on that log-log plot, and you would have seen that it was parallel to the convergence line. A slope equal to 1 on a log-log convergence plot is an indication that we have a first-order method: the error scales as ${\\mathcal O}(\\Delta t)$. \n", + "\n", + "In lesson 3, using the full phugoid model (which is nonlinear and does not have an exact solution), we did a _grid-convergence study_ with three different grids, and obtained the _observed_ order of convergence—it was very close to 1, indicating a slope of 1 on a log-log plot.\n", + "\n", + "Another way to look at an ${\\mathcal O}(\\Delta t)$ method is to say that the error scales _linearly_ with the step size, or that they are proportional:\n", + "\n", + "$$ e \\propto \\Delta t.$$\n", + "\n", + "where $e$ stands for the error. To get more accuracy, we could use a _second-order_ method, in which the error is ${\\mathcal O}(\\Delta t^2)$. In general, we say that a method is of order $p$ when the error is proportional to $(\\Delta t)^p$.\n", + "\n", + "In the screencast titled \"Euler's method is a first-order method,\" we used a graphical interpretation to get an idea for improving it: by estimating an intermediate point, like the **midpoint**, we can get a better approximation of the area under the curve of $u^\\prime$. The scheme has two steps and is written as:\n", + "\n", + "\\begin{align}\n", + "u_{n+1/2} & = u_n + \\frac{\\Delta t}{2} f(u_n) \\\\\n", + "u_{n+1} & = u_n + \\Delta t \\,\\, f(u_{n+1/2}).\n", + "\\end{align}\n", + "\n", + "This method is known as the *explicit midpoint method* or the *modified Euler method*, and it is a second-order method. Notice that we had to apply the right-hand side, $~f(u)$, twice. This idea can be extended: we could imagine estimating additional points between $u_{n}$ and $u_{n+1}$ and evaulating $~f(u)$ at the intermediate points to get higher accuracy—that's the idea behind Runge-Kutta methods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Runge-Kutta methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the modified Euler method, we improve the accuracy over Euler's method by evaluating the right-hand side of the differential equation at an intermediate point: the midpoint. The same idea can be applied again, and the function $f(u)$ can be evaluated at more intermediate points, improving the accuracy even more. This is the basis of the famous *Runge-Kutta (RK) methods*, going back to Carl Runge and Martin Kutta. The modified Euler method corresponds to _second-order_ Runge-Kutta.\n", + "\n", + "Here's a bit of historical coincidence that will blow your mind: Carl Runge's daughter Iris—an accomplished applied mathematician in her own right—worked assiduously over the summer of 1909 to translate Lanchester's _\"Aerodonetics.\"_ She also reproduced his graphical method to draw the phugoid curves (Tobies, 2012)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phugoid model with 2nd-order RK" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compute the motion of a glider under the full phugoid model using the second-order Runge-Kutta method. We'll build on the _paper airplane challenge_ of lesson 3 now, and look for the horizontal distance that the plane travels until the moment it touches the ground. \n", + "\n", + "As usual, let's start by importing the libraries and modules that we need, and setting up the model parameters. We also set some default plotting formats using the [`rcParams`](http://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.rcParams) module. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the paper-airplane challenge of lesson 3, we suggested an $L/D=5.0$ as a realistic value for paper airplanes, according to experiments, and a trim velocity of 4.9 m/s. Let's start with those values, but you could experiment changing these a bit. _What do you think will happen if you make $L/D$ higher?_" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Among the initial parameters that we suggest for your first experiment, we are starting with a velocity a little higher than the trim velocity, launch the paper airplane with a negative initial angle, and take the initial height to be 2 meters—all sound like reasonable choices.\n", + "\n", + "Now, we can define a few functions to carry out the computation:\n", + "* The right-hand side of the phugoid model from [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb),\n", + "* One step of the Euler's method that we learned in [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), and\n", + "* Differences with respect to a fine grid, as in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])\n", + "\n", + "\n", + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)\n", + "\n", + "\n", + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = int(numpy.ceil(N_fine/N_current))\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we also need to define the function `rk2_step()` that computes the next time step using the *modified Euler* method of equations $(1)$ and $(2)$, above, otherwise known as 2nd-order Runge-Kutta or RK2. This function will be called over and over again within the time loop." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rk2_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using 2nd-order Runge-Kutta.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at the next time step.\n", + " \"\"\"\n", + " u_star = u + 0.5*dt*f(u)\n", + " return u + dt*f(u_star)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we first need to set up the time discretization, then initialize arrays to save the solution and we are set to go! The only difference this time is that we are using _both_ Euler's method and 2nd-order Runge-Kutta to get a solution, to compare the two. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "\n", + "# set initial conditions\n", + "u_euler = numpy.empty((N, 4))\n", + "u_rk2 = numpy.empty((N, 4))\n", + "\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_euler[0] = numpy.array([v0, theta0, x0, y0])\n", + "u_rk2[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "\n", + "# use a for loop to call the function rk2_step()\n", + "for n in range(N-1):\n", + " \n", + " u_euler[n+1] = euler_step(u_euler[n], f, dt)\n", + " u_rk2[n+1] = rk2_step(u_rk2[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can get the position of the glider in time, according to both Euler's method and the 2nd-order Runge-Kutta method, by extracting the appropriate portions of the solution arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x_euler = u_euler[:,2]\n", + "y_euler = u_euler[:,3]\n", + "x_rk2 = u_rk2[:,2]\n", + "y_rk2 = u_rk2[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### How far will it fly before touching the ground?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the $y$-axis measures the vertical coordinate with respect to the ground, negative values of $y$ don't have any physical meaning: the glider would have hit the ground by then! To find out if there are any negative $y$ values we can use the handy function [`numpy.where`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html). This function returns the **indices** of the elements in an array that match a given condition. For example, `numpy.where(y_euler<0)[0]` gives an array of the indices `i` where `y_euler[i]<0` (the `[0]` is necessary as `numpy.where` returns an array, which in this case contains a single line). If no elements of the array match the condition, the array of indices comes out empty. \n", + "\n", + "From the physical problem, we know that once there is one negative value, the glider has hit the ground and all the remaining time-steps are unphysical. Therefore, we are interested in finding the _first_ index where the condition applies, given by `numpy.where(y_euler<0)[0][0]`—do read the documentation of the function if you need to! " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_euler = numpy.where(y_euler<0.0)[0]\n", + "if len(idx_negative_euler)==0:\n", + " idx_ground_euler = N-1\n", + " print ('Euler integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_euler = idx_negative_euler[0]\n", + " \n", + "idx_negative_rk2 = numpy.where(y_rk2<0.0)[0]\n", + "if len(idx_negative_rk2)==0:\n", + " idx_ground_rk2 = N-1\n", + " print ('Runge-Kutta integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_rk2 = idx_negative_rk2[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Do Euler and RK2 produce the same solution?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An easy way to compare the numerical results obtained with the Euler and 2nd-order Runge-Kutta methods is using [`numpy.allclose`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html). This function compares each element of two arrays and returns `True` if each comparison is within some relative tolerance. Here, we use the default tolerance: $10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Are the x-values close? False\n", + "Are the y-values close? False\n" + ] + } + ], + "source": [ + "# check to see if the paths match\n", + "print('Are the x-values close? {}'.format(numpy.allclose(x_euler, x_rk2)))\n", + "print('Are the y-values close? {}'.format(numpy.allclose(y_euler, y_rk2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hmmm, they do differ. Maybe $10^{-5}$ is too tight a tolerance, considering we're using a somewhat coarse grid with first- and second-order methods. Perhaps we can assess this visually, by plotting the glider's path? Study the code below, where we are plotting the path twice, taking a closer look in the second plot by \"zooming in\" to the beginning of the flight." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAGbCAYAAACrusZBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4FNX6wPHvm0AIIEV6QJHiBQEFFAQpSiDA5dKuIgqI\nVKVjAwQRBbH9aEpRUERB7GDDAlKkqBcEBYkoHSVIbyJIJ8n5/TETDGGTbJLdnd3Z9/M8+4SdPTPn\nfXeGycmcM2fEGINSSimllAotEU4HoJRSSimlsk4bcUoppZRSIUgbcUoppZRSIUgbcUoppZRSIUgb\ncUoppZRSIUgbcUoppZRSIUgbcYCI1BeR/SJyWkSSRaRsms9HicgREbneqRhV4InICPu4SBKRnX7Y\n/icicsg+5mb5cLv5RGSciCSKyKgsrJdbRNbZ8XTLYp1vishf9veV9rUgg/WKiMhMb+sUkatF5FUR\n2WFv+5CIrBaR0VmJVyml3EAbcYAxZpUxJgaYA3iaOK8wkB+Izs72RaR7dn4xhjI73+VOx5ETxpjn\n7OPiDzwfFzndfjvg5pS3vtimiDQFNgB3YP3/zsp2nwRutNfJajwGeNAYE+Ph1TKdWDsCvwKNUm0j\nXSJS1y5/DLjJ3jc3AQL0zmK8SikV8rQRdymxX5cwxjwCFDLGrM3h9sNtZmW35HvZMRGM2xaRqsDr\nwAPAs1lctzbwCPBRDmLyej0RaQmMwGpsvuVF+YLAJ8BXxpjhxpgTAMaYPcBgYH22IlZKqRCmjTgv\nGWPO+2Az/mwMKLUHqGaM+YqsNajyALOB0cDGHNSflUb7j8CNxpg1eBdrLyAGmHpZpcb8L72rfUop\n5WZh2YgTkZL2GJ4j9riaNSLSOp2yG0XkqN09OCrNZ1eJyAwR+V1E9tk/PxOR7qnK/ARMst9OTjVO\naFqqMnfb46N+F5GD9jifeSJyY5r6GqcZu1dNRKaJyE4ROSYiS0TkunTyuFFEPk5V/3YR+dzu6o1M\nU7a5iCy18/5TRH4RkeEiksuL73aYiOy33zZIVd8+EYlKO85MRMrbuf9h55Rsb6eIiDwhIqtEZLed\n33YRGSsi+VPV1yvV/jll1/Mv+7MWdl0X7DzuS7XezXb+R+z1t4nIGBG5IrMcU20jQkQGikh8qu/q\nOxG5K53ynUTkZxE5ISK/icgrQCFv68uMMeaEMeZUNlZ9DvjTGDOBnP2h4fW6xpjDxpjELGy7PZAM\n/JDlqJRSyq2MMWH1AgoAW4FDwC32sqJY3UhbsH5RlE2zTiN7+chUy3IBm4HFQFF7WUHgTSA5zfrd\n7PW7phNTAvAxUMR+XxL4FDgF1PBQfpa9vcVAPXtZRWAXsBvInaZ8C+As8C5Q0F52NbA8bb5AHyAJ\neB7Ig/WLuS3wN/BlFr7nZGBZBp/vBA4DC4Eq9rJWQJL971ggEeiRap1bgf3A/wBJtbyYnd8PHuop\nasdeKtWyVsA5e18VsJc1tLe9Doj2sH9+97Dtd4AzWA0Msb+vkXbuQ9OU7WMvfxXIi/UHVBtgtb18\npoft5weKZfM47572mE2nXEPgBFDRfv9URsdqBtuZBbwNLLH37QF7Pz0A5Mpk3QzrBCLt7/kwUNk+\njhOw/g+vAnpn93ygL33pS1+h/HI8gIAnDE/bvzD6pVleyP5ln8TljbjYtL8Qger2soFpyl4JbEqz\nLOUXanq/pL5M3ciwlxW0GzHveSj/pr29QWmWP2cvvzXVsnzAQfuXap405cumzhcoYzdu1nioc4y9\n7du9/J4za8QleIg1Auhv/7sW8JqH9QbY6zVPs/w9e3mtNMsfBT5K830cwrpZISpN2b72Nh72EOvv\naZalXBka5yHG1ViNyhJpjq09QGQ6x+PMNMvz2/vsPFA3G8d5yjGXbiPOrmMHMCDVsqcyOlYz2NYs\nrAZVLft9Efu7Pw8sS/tdp1k3wzqxGuLJwGn7WO6GdZPRlcBY+7M3svod6Utf+tJXqL/CsTu1HdbY\nnYWpFxpjjmN11XjbJXQYq5E1RETaikhuezvHjDFVsxKQMaa1MeZAmmUngH1YjcX0/C/N+z/sn2VS\nLWsGFAe+NsacS1PHH0AcVqMG4C4gN/CVh7pSurE8djtn0zljzHep4kk2xkyz/73OGOPpjsPN9s+0\n38t0+2fflAUiIlhjqaanKtcc68rdUnP5OMes5Hiv/dPT9Bk/AFF2XWDtg/x2nUlpyi5OZ/vnsfbn\nEeAvL+LJjvFAgjHmsnFm2fAIcJsxZh2AMeZPY8x4YAbWH0EP5GDbee2f0cC7xpjZxpiz9v+1YcAa\noIeINMxBHUopFXIyHePkQtfaP/d5+MzTMo+MMftFpCcwBZgHHBORr7C6ehYaY7we5G2PY3sEqAeU\n4J8B4sWxGorpOZTmfUojLSrVssr2z93p5LHCQ9mHRaRPmqKRwEmsBpCvHMzoQxFpD9yPtc+uwPpe\nUnLLl7qsMeYbEdkKdBSRQcaYv7EaqJHGmCWpiqbk2F5EWqStEivHol7EnrKduSKStmEWZW+npP0+\no2Nuv4dlGGMuAHW8iCNbRKQZcA/p/5GQpbFxxpj0GpofAf2w7kJ9ISvbTCVlnJ/B6q5NawFQF6ub\nPO0fNkop5Vrh2IhLkYd/Gj3ZYox5R0Q+Am4H7rRf9wArRKSFhys9lxGRG7C6334Huhhj4lN9lpDJ\n6slZCDePF2VSGo8jjTFTsrDt7Eo3fhF5GngCeBnobIw5ai9vhDWWz5PpwItAF2Aa1lW56WnKpOQ4\nwxgzKPuhX5xLrakxZoOX63izDwKlHdb3v8a6YHlRyo0dk0VkDFaOlYwxJ7NZT0ojtVQ218cYc0xE\nTmCNZz3ioUjKHzPFs1uHUkqFonDsTt1h/yzj4bPSWdmQiETa3TofGGPuAq7CuioQi9WY80YPrO6i\nZ1I34HwopfvRU76ISOlUd3tusX+WTadsnZQ7PwNgINYVmIdSGnApYWSwzmyssWi9RSQG64aOtE9C\nyCzH6iKSURd26u2Ip+3Yd602FZGUq5bb7Z+ejq8sHXO+YozpZ4wpYtJMzAtMsIukTNxbOrMGnIiU\nE5Eh6XwcY/9Me9U4q77D+r49NQZL+KgOpZQKKeHYiPsY65dBm9QLRaQQ1uz5XnWDikgs8EvqZXZj\nI+XKT+FUH6V0B+W21y0pIi/bjSePVwNFJJocXL1IZQlWt+W/ReSSLkgRqYY12L6KvehDO552IhKR\npmwJ4NtUZTNzBjtfe/3BItIkC3Gfw9oXaRtt5dNbwRhzDKv7rjrWfvjSGHM4TbHFWL/sm4s1gexF\nYs2XtgirEZ6Zd+yfnqYTaYN1s0rqOk8Czew6UmuaXgUikj9VQzBQMuxGTSemcsBYEfF0Jey/9s8v\nPXyWFa/ZP1t5+Kw51rEyL4d1KKVUSHGkESciNcWaX22TiGwQay62yd78whKRBBFZ7+HlbQNhPLAN\n64aEW+xtFsW6YnOSdJ7akFJ9mvfXicggEYmyt1MM6/E/f2NNEZLiF6xfMjXt922Au4w1p9ccrEHs\nI0Wksr2dQlgDwqMyiMVTPJctN8acxbpTMQ/wakrDRUQqYt3l+pGxn0RhjNkPPAhcA7wkIgXsshWw\nGr9LgS8yiCe1n4F/ifUcz+JYs/PnTVMmo9zexuram5jS+BSRm4CUufrSW/dV+2frVP++yP4+emJ9\ntzNTGh4iUhJ4H9iL9dSDtC6pzxjzCdb4x04i0lPsOfRE5FbgFeApY8wRu+zfwBCsuymn2N9JhFhz\nE3bwtH27gf8bsE+sx01ll8+evpAqpr0icrOH8u/bx1XK81v7Y42H+xGYmJNYjTFfYB0T3UWkq1jP\nec0rIiOBBsAkY0zA5pBz+BymlFIWJ26JxeqK+hDIa78vjdXtt5U0c3R5WHenD+ovgdVoO4I1Zmc9\n1t2GKfOvHQK+sMtuBI5iTcXxN9bg9LJY43MewhqftcveTgLWL5oqHuocbJc7gNXAaZbqs0ZY0zAc\nxbpqth7ob2/vgr3tbkBV+9+n7XgOARPtbfyIdRdjkv3zlzT134jVEDtgb2Mz8Dgepn7AuiFgkf39\n7MF6XuXwzPZNmm3chHXX4GGsuyzH28t72fVfSJXbWg/r5wIes+M8aX93X9jfY3KqfXFZTFjPDt2S\nSXy1sB7jdMjezlasaVQKpyozwkOsj6bZTl9grb3vdgMrgY7p1NkBiMealy0B63FTt/DP9Bn7gUZ2\n2dxYd7nuAypn4XtfiXUV9Lx9LFyw3+/LZL3FdrkL9nrn7ffTU5VJiWkv1ji5lOVRWFOuzMX6A+mg\nneM6ex/mSafOPenU+X065SOwutnjsZ6f+ifwDdDBl+cnL79nR89h+tKXvvRljLEmTA00EdkEtDbG\n/J5qWU+sKyDtjXWVI711dxpj0u1SU0opf9NzmFIqGDh1d2p1c/kjd1LuYiuctrBSSgUZPYcppRzn\nyJg4Dyc/gEpY48a+zWx9sZ6fuVJEtorIIhFpk9k6SinlK3oOU0oFg6C4O1WsB7DfB7xujNmRSfFD\nwDpjTAOgGvAZ8JmIDPBzmEop5ZGew5RSTnBkTNxlQYg8hTV1wG3GmDPZWP9LrIejlzBpHi2llFL+\npucwpZQTHH9ig4j0wLqzLTY7Jz/bD0BLrLs313uow/mWqlIqoIwx2Z1eJUv8fQ7T85dS4cmbc5ij\n3aki0gUYBDQx9pxamZSPTvV0gdRSnl0Zmd66Tt3+O2rUKEdvPw7n+sM5d6frdzr3QAnUOczJ79JN\nx4XmobmEystbjjXiROReYCgQZ4w5ZC9rLSK9UpUpKXLJgx074vkh2rWwHre0yY8hZ0tCQoLWH4Z1\nh3v9TuceCOFyDvMltxwXbskDNJdQ59QTGzpjPZHgTazHH91rnxDbYD9LUkQaYE10OjXN6p1EpHaq\nbXXAerTPOGPM6QCEr5QKc3oOU0oFA6fGxE3BmuV9fJrlBhht//sk1qzs+1J9vgDrIfPTRCQ31nxM\nfwJ9jDGeHpXkuO7du2v9YVh3uNfvdO4BEDbnMF9yy3HhljxAcwl1QXF3qr+JiAmHPJVSFhHBBOjG\nBn/T85dS4cfbc1hQzBPnZitWrND6w7DucK/f6dxVcHLLceGWPEBzCXXaiFNKKaWUCkHanaqUch3t\nTlVKhTJvz2GOT/ar/CcxMZHly5fz7bffsnv3biIjI6lYsSLNmzenVq1aXDrzgVJKKaVCiXan+pkT\nffTnz59nypQplCtXjoceegiA2267jXr16nHkyBE6dOhA3bp1+fbbTJ/TnWOBzF9E9BUmLxWa3DJm\nyS15gOYS6vRKnMts2bKFjh07UrJkSb788kv++usvYmNjrQ+nTYOoKCbMmcOHv/1G586d6dSpE88/\n/zy5crnjUNBuJ/fTRpxSSll0TJyLzJkzh0cGDGDKAw9w58iRl/+yW7cOPv0U3noLqlblz9Gj6fDE\nE+TPn585c+aQJ08eZwL3EXsMgdNhKD/zZj/bZVzR2guX85dS6h/ensO0O9Ulpk2bxqwHHuC3K6+k\n/a5dnq9W1KoFzz4LO3bAv/9NkVat+Oqee8iVKxedOnUiOTk58IErpZRSKlu0EedngeijnzhxIlue\nfpr5ycnkfeopeOONjOuPioJHHoFvviHXzp289957HDlyhBEjRvg8tnAco6CU8swt5wO35AGaS6hz\nx0CoMPb2229zevRoXixQgMhFi6BGDe9XrlYNnn6aKOCTTz6hbt261KxZkw4dOvgtXqWUUkr5ho6J\nC2FLly5leIcOfFukCNErVkDp0jna3tq1a2nZsiXx8fGUzuG2nKBj4sKDjolTSrmdjolzuV27dtG5\nc2fGfvgh0Zs25bgBB1C7dm369+/Pfffdp42hEFK9enVKlChBREQEefLkISYmxuMrT548zJ49O9t1\nFC1alIiICEaPHp35CkoppfxOG3F+5o8++rNnz9K+fXuGDBlC48aNIYPpQbJa/4g+fTiybx9z5szJ\nYZTZq19l3YYNG/jxxx8BaNCgAfv37/f4ql+/fran59iwYQOffPIJoFN8qOxzy/nALXmA5hLqtBEX\ngh588EHKlSvH4MGDfb7t3MOG8dFNNzF06FBOnz7t8+0r/wjElVO9OquUUsFFb2zws4sT7frIhx9+\nyIoVK1i3bp1XV0SyXP+YMVxTsyYdb7qJsWPH5rjrzNf5q+xbunQpERH6d5tyjlvOB27JAzSXUKdn\n9BCyf98+Irp04dMhQyhQoIB/KildGkaP5unjx3lpyhQOHjzon3pUwHTv3p3Ro0dfbMDNmDGDmJgY\nIiMjKV++/MVyu3fvJiYmhnz58hEREcEff/zhdR379u2jT58+XHXVVRQtWpQyZcrQtWtXfvvtt4tl\nduzYQUxMDAUKFCAiIoKvv/6a0aNHU6VKFfLnz09ERES2x+wppVQ40kacn/mqj94Yw+dxcdxStCjV\nunXzb/29ehF96hTjb7mFcePGZX39nNavfC71VdtevXqxf/9+ypYte8nyq6++mv3799OhQ4csjXvb\ntWsXtWvX5qeffuK7777j6NGjrFq1ih07dlC7dm22bdsGwLXXXsv+/fsZMmQIACNGjKBcuXL8+uuv\n7Nu3j4oVK+p4O5dzy/nALXmA5hLqtBEXIj56/HHu2rGDEsuXg78fj5UrF0yZQreNG3lr5kwOHDjg\n3/qUz6xcufKyu1Lnzp3rsWx6Y9yMMVka/zZgwAAOHjzI7NmzL17Zu+aaa5g5cybHjx9n6NChHuu9\n/vrr6datG5GRkRQqVIhp06ZRt25dr+tVSqlwp404P/NFH/3eHTuoPn48Z8aMIXelSoGpPzaWXEuX\nck/Xrjm6GheOYxSc5Onu1A4dOvjtpoQ///yTBQsWULZsWapWrXrJZ9dddx0FChRg8eLFJCYmXrZu\ns2bNLntfuXJlv8SpgoNbzgduyQM0l1CnNzaEgHWtW1O+cmXK+OFu1Az9618MGTKEGjVqMHLkSAoX\nLhzY+gMkkF14Tt3h6a8ct2/fDlhj4mJiYjyWyZUrF0eOHKFUqVKXLE/7XimlVNbolTg/y2kf/eLF\ni5l88iTXLlrkSP1XX301//nPf3j99dcdqT8QUroPA/FywqxZsxg5cqTX5ZOTk70um9I4rFatmse5\n6Y4fP86JEyc8Ntj0TtnwEwrnA2+4JQ/QXEKdnkWD2NmzZxkwYACDX3uNvFdd5VgcgwYNYsqUKVy4\ncMGxGJTv5c6d2+M+zcodyZUqVUJE2LNnj8fPd+/eHZYnVqWUCgRtxPlZTvrox40bxw033EDLli0d\nqT9FrVq1qFChAh9//LEj9avMedNdet999/HMM89cfH/VVVdx8OBBzp8/f3HZ6dOnWbt2rdfdr4UL\nF6ZVq1YcOXKE5cuXX/b5gw8+yJQpU7zalnI/t5wP3JIHaC6hThtxQeq3335jypQpTJo0yelQ4NQp\nppYsyfRXX3U6EpWOlK7ajLpsk5KSLukqbd++PYmJiYwbN47k5GROnTrFI488QunSpTPs/k27/OWX\nX6Z06dIMHDiQX3/9FbCuIj/zzDN8++23PPfcc15tRymlVNZoI87PstOVZJKSGDhwIMOGDaNs2bIB\nr/8y+fJRZeNGiv/888U5vwJav8pQuXLluO666xARvvvuO/Lmzevx9e67715yha1fv348++yzvPnm\nmxQrVoymTZvSvn17ateuDcDNN9/MHXfcAUD16tW58847EREmTJhA6dKlL04GXLZsWdauXUujRo1o\n2bIlpUqVomrVqmzdupVVq1ZRpUoVgItj41544QVEhHbt2hETE8PKlSsD/I0pp7jlfOCWPEBzCXV6\nd2oQ+rVbN1r89BP9P//c6VAsIkQ88ghPjRnDjBkzGD9+vNMRqVQSEhKytV5ERASPP/44jz/++CXL\nmzVrxqxZsy5ZtmHDhgy3VapUKaZNm8a0adPSLVOwYEGdc1AppXxIwqFLQ0RMqOR5Mj6e87VqseP9\n96lz991Oh/OPU6dIuuoqakdEsHrfPvL4e8LhbBAR7aILA97sZ7uMKx7/EErnL6WUb3h7DtPu1GBi\nDPv/+18W3XRTcDXgAPLnJ7JLFwYVLMi8efOcjkYppZQKe9qI87Os9NHvfvZZTu3bR1MfdqP6dIxA\nnz60O3mSGdOnO1O/UiqkueV84JY8wP25JCYm8ttvv7Fs2TLmzZvHnDlz+OKLL/juu+/Yu3dvlubF\nDEY6Ji5IJB86RP5nnuGHoUOpmc7M946rVo3I9ev5qXp19u7dS5kyZZyOSCmllLooKSmJVatWXWyo\nxcfHU6JECcqXL0+hQoXIkycPp0+f5ujRo+zcuZNz585Rr1494uLiaNeu3cXnP4cKHRMXJN6aPp34\nF19kwubNQT+T/X333UeVKlUYMmSI06FcQsfEhQcdE6eUSmvnzp1Mnz6dN998k1KlSnH77bfTqFEj\n6tSpQ/78+dNd7+DBg6xcuZKFCxcyb948KlWqxMCBA7nzzjvJnTt3ADO4lLfnMG3EBYGjR49SrVo1\nFixYwE033eR0OJlatmwZgwcPZv369U6HcgltxIUHbcQppVJs3ryZZ599lkWLFtG1a1f69OlD5cqV\ns7WtxMREPv/8cyZPnsyePXsYPXo0nTp1IjIy0sdRZ05vbAgS3ow3GD58OHfffbdfGnD+GO/QqFEj\nDh8+zKZNmxypXykVmtxyPnBLHhC6uRw+fJi+ffvSqFEjrr/+enbu3Enbtm2z3YADyJUrF+3ateOb\nb77hjTfeYOrUqdSvX5/4+HgfRu5b2ohz2Pfff8/8+fMveRxSsIuMjKRTp068++67ToeilFIqjBhj\nmDlzJlWrViU6OpqtW7cyfPhwChQo4NN6YmNjWblyJX369OHf//43o0aNIjEx0ad1+IJ2pzooMTGR\n2rVrM2zYMDp16uR0OFmy/c036T1iBEt37w6aMXzanRoe3NKdKiLPAo8DPYwxszMoF5TnL6UC7cCB\nA/To0YODBw8ya9YsatSoEZB69+/fT7du3Th9+jRz5swJyE192p0a7IxhS8OGVM+Xj44dOzodTZZd\nm5DAfWfPsnr1aqdDUSqgRKSmiMwQkU0iskFENorIZBEploVtXAUMAoz9UkplYNGiRdx0003UqVOH\nNWvWpN+A++MPeP99GDvW8+dHjsDdd8PIkTB/Pvz1V6Z1x8TEsHDhQlq2bEndunVZs2ZNDjLxLW3E\n+Vl64w3+nDoVWbuWEa+9dsnzLANVf05Jly7cfvYsn86d60j9SjnoA6AwUMsYUx1oBjQHVopItJfb\neB5YCgT11UJfc8v5wC15QPDnYozhueeeo2fPnrz77ruMHj368rtGN2+GESNYcc01ULs2fPghpHcz\nQnQ0tGsHyckwcSKULQtxcZDJ8KCUxxS+8sortGnTJmgmvdd54pxw7Bjy6KOs7NKF3tdf73Q02VOx\nIlK5Mn++9x5m4kS/NkSVCjLJwDBjzBkAY8w+ERkPvA60BD7JaGURqQXUB/oDrfwcq1Ih68yZM3Tr\n1o1du3bx448/Urp06csLGQO9ekH9+jBsGPTtCxkN8bniCkjd+3XqFCxZAn/+6VVMbdq04auvvqJ1\n69YcO3aMHj16ZDEr39IxcQ7Y1bIlK1eu5I4DB8ibN6/T4WSbefllPn/8ccosW0bt2rWdDkfHxIUJ\np8fEiUguY0ximmX/AeYD9xtjZmay/gpgGnAIWAZ0N8a8lUH5oDp/KRUIR48epW3btpQrV4433niD\n6GhvL3IHxtatW2nWrBkjR47k/vvv9/n2dUxckDqzdCnRixdTevbskG7AAUj79jS/cIHP5sxxOpSw\nVr16dUqUKEFERAR58uQhJiaGmJgYSpQoQXR0NJUqVeLJJ5/k7NmzF9d56623iImJIV++fERERFC0\naFFKly7NhQsXAPjxxx8pVaoUUVFRREVFERMTwxtvvAHAX3/9xdSpU7ntttsoXrw4RYoU4ZprrqFn\nz57s2LHDke8gkNI24GyVsMa2fZvRuiJyO5DHGJPxOASlwtiePXto2LAhDRs25O233/6nAXfmTGAD\nMQZWrfL4UeXKlVm6dClPPfUUs2ene1+S/xljXP+y0nTG8uXLL3n/SocOZnxsrGP1+9q2SZNM1QoV\nTHJysiP1p+bkfnZaQkKCERHTuHHjS5afOHHCDBw40IiIadas2WXrde/e3YiI+eabby777I033jAl\nSpS47LNbb73VREVFmbfeesskJiYaY4xZvXq1KV++vClQoIBZt26dDzO7nDf72S4TqPNLJLABmJ5J\nudzAFqC+/T4Wq2u2aybrZfu7CjaBPB/4k1vyMCb4cvn9999N+fLlzYQJE/5ZePasMU88YcwNNxiT\nlJTuuj7P5dAhYypWNKZrV2OOH/dYZPPmzaZUqVLmiy++8GnV3p7D9EpcAMXHxzNq+XK6uujK1bUP\nPsjp5GR++eUXp0MJayad7rYCBQowefJkypUrx9dff33ZIOb01nv66ad56qmnWL58Obfddttl6wwc\nOJAuXbpcnMm8bt26vPzyy5w8eZJBgwblPKHQ8iRwDng4k3L9gF+NMZ7/tFcqzO3YsYNGjRoxZMgQ\nBg8ebC3ctAnq1oVffoGFCzMe7+ZrxYtDfDxERUGdOlYsaVx33XXMmzePHj16OHLXqt7Y4GexsbGA\n9VDePn368Pzzz1OiRImA1+8vIsKdd97JRx99RPXq1QNev8pcREQENWrUICEhgXXr1mW4T5KSkujX\nrx9r1qxh9erVHgcSd+vWjXr16l22vGHDhgBBdfu9v4lID6A9EGvsGx3SKVcYeAy4zdPHmdXTvXt3\nypUrB0DhwoWpWbPmxf2Y0jAPhfexsbFBFU9O3qcIlniy+z5lmdPxlC9fnqZNm3LXXXdRtWpVK7BZ\ns1jx8MPQuzex48aBSOCPr7VroXNnYuvXh0aNWDFoENSrd1n5WbNmcccddzBx4kRKliyZreNpxYoV\nJCQkkCXeXK4L9RdB0B0xZcoUc+utt5qkDC4Fh6pvv/3W1KxZ0+kwwro7defOnR67U1O0adPGiIh5\n+eWXL1nerVu3i92pp06dMq1atTKNGzc2x9PpOsjI4cOHjYiY0qVLZysHb3mznwlAdyrQBfgFKOFF\n2RbAH8BB3IdmAAAgAElEQVT6VK/tWN2pu+z3T6Szbo6+L6WC3d69e02FChXMlClT/lm4caMxVata\nP4PF6tXGtGqVbpfuuHHjzI033mhOnTqV46q8PYdpd6qfrVixgh07djB69GhmzJgR8KcbBGIOoHr1\n6rF79252797tSP0qYxcuXCA+Ph4R4ZZbbvFY5tChQzRu3JiCBQuyaNEiChYsmOV6VtkDgDt06JCj\neEOBiNwLDAXijDGH7GWtRaRXqjIlxZ57xxiz0BhT1hhzY8oLSLml7Ul72bOBziPQ3HI+cEse4Hwu\nf/31Fy1atOC+++7jgQce+OeDqlXh55+tn17yey5168KXX6bbpTtkyBCqVatG79690x2q4mvaiPOz\npC1bWNysGU888USOHswbzHLlykXr5s2Z/9lnToei0ti/fz99+vRh7969DBo0iFq1anks16NHDzZs\n2MDIkSMvn0jTC8YYXnzxRWJiYhgxYkROww5qItIZmAG8CTQXkXvtRl0boLRdpgGwD5ia0abS/FQq\nrJw5c4a2bdvSpEkThg8ffnmBXKE14ktEeO2119iwYQMzZswITKXeXK4L9RdOdUecPGmOFi9uRleu\n7Mpu1NT233CDeaJ2bUdjyPZ+HjXKGOtm8ktfo0b5tnx6n/tASndqVFSUKVWqlClVqpTJly+fERFT\nu3Zt88MPP3hcL6U7tU6dOkZETJkyZcz27duzXP/kyZNNdHS0+fbbb3OaSqa82c/4sTsVOAokYXWF\npn4lASPtMjWAI3joIgVKATuB/fY6h+33ddKpL+dfmlJBJikpydx1112mY8eOrvv9uHnzZlOsWDGz\nfv36bG/D23OY4w2sQLycOgkeu+su80FUlNmxY4cj9QfS6aefNq/nzm3+/vtvx2II5192nsbEnT59\n2owYMcKIiGnVqpXHaWBSGnErVqwwvXv3NiJirr76avPbb795XffHH39soqOjzWeffeaTXDLjdCMu\n0K9wPq6Vew0fPtw0aNDAnDlzxhprtnix0yFlz4ULxniY2uTtt982VapUMadPn87WZr09h2l3qp8k\nfvghJz//nB969qRixYqOxRGo8Q55O3TgvyIsWbTIkfrV5fLmzcuzzz5LXFwcCxYs4PXXX0+3rIgw\nffp0evXqxZ49e2jcuLFXd0l9+umndOvWjffff5+2bdv6MHrlRm45H7glD3Aml9mzZzN37lzmzZtH\ndHw8tGkD9kTjOeHIfjlwAO65xxorl0rnzp2pUaMGw4YN82v12ojzhz17ONO9OxNr1aL13Xc7HU1g\nVKqEXHklG9980+lIVBovvvgiERERPP3005w7dy7DstOnT6d3797s3r2bxo0b88cff6Rbdu7cuXTt\n2pU5c+Zw++23X1z+yy+/cPLkSZ/Fr5Ryj9WrV/Poo4/yxRdfUGzHDmjbFmbPhpYtnQ4te666Cj75\nBHr0gPXrLy4WEaZNm8a8efNYvHix/+r35nJdqL8IcHfEsvffN/2KFDGHDh0KaL1O+7NvXzMpXz7H\nxjcEej8Hk/Se2JCiS5cuRkQunQXdXDrFSGp9+/Y1ImIqVKhgdu/efdn23nnnHVOgQAGz2EMXyDXX\nXOPxCRC+4s1+RrtTlQo6e/fuNWXKlLGebhAfb0yJEsbMn+90WL7x4YfGXH21MQcOXLJ48eLF5ppr\nrjEnTpzI0ua8PYeF1q0fIWD//v10HjSI9z7+mOLFizsdTkBd2bMnRefO5Ycffkh3KgvlH9b/+Yyf\nwDB37lzGjBlD7969KVCggMf1U7zyyiuAdWWucePGrFixgjJlygBWV0jPnj1p0qQJK1euZOXKlZes\ne/z4cZ/kpJRyj/Pnz9O+fXv69etH62bNoEoVePnl0L0Cl1b79taUKB06wJIlYN/l36xZM+Li4njs\nsceYOjWjm9WzyZuWXqi/CNBfsmfPnjX169c3o0ePvrjM6efSBbr+YcOGmccff9yR+gO1n4PNDTfc\nYIoXL24iIiJMnjx5TKlSpcztt99+WbmHHnrIREREmCJFipiIiAhTqlQpkzdv3ovLYmJizPnz5y9Z\np1+/fiYiIsJcccUVJiYmxmzdutWUK1fOREREGBHx+IqIiNArcSF4/goEp8+HvuKWPIwJXC4PPPCA\nadOmzT89NWmuWPmC4/slMdGYp5++7Dmrx44dM2XKlMnS3fvensP0SpyPGGMYMGAAJUuW5IknnnA6\nHMe0atWKhx9+mOeee87pUMLGhg0bvCo3adIkJk2alKVtT5s2jWnTpl2ybOfOnVnahlIqvH3wwQcs\nWLCAtWvX/jPhfcmSzgblD5GR8OSTly0uXLgwkyZNol+/fvz0009ERUX5rEox6XS/+JOI1AQGAA2A\nRCAS+Bp4xhhzJJN1cwMjsZ5XmAicAIYaY1ZmsI7xa5779jHto494ZcYMvv/+e6644gr/1RXkLly4\nQIkSJdiyZQslA/yfVETS7U5U7uHNfrbLuGISXb+fv5Tyo+3bt1O/fn0WL17MjTfe6HQ4jjHG0LJl\nS2JjY726Y9Xbc5hTjbgtWM8c7GqMOSMipYGlWHfL1jDGnM1g3VeBWKCBMeaoiNwHTAHqG2N+Tmcd\n/50EDx3iVI0a9D17ltHr1lGhQgX/1BNC2rVrR7t27bj33nsDWq824sKDNuKUCg1nz56lXr169OrV\ni/79+zsdjuN+++036taty08//UTZsmUzLOvtOcypKUaSgWHGmDMAxph9wHjgX0C6oxxFpDLQCxhj\njDlqr/sG1mznge+/O3aME7fdxvQTJ3hoyRKPDTin5xNyov4WLVqwcOFCx+pXSgUnt5wP3JIH+DeX\nRx99lIoVK9JPBBYs8Fs9KYJ9v1SsWJGBAwcydOhQn23TqUZcdWPM72mW7bd/Fs5gvTuwnjO4PM3y\n5VjPMMzno/gyd+QIp+vV470//qDm559Tu3btgFUd7FpVrkzpzz4jOTnZ6VCUUko5YP78+Xz++efM\n6tIFGT0arrvO6ZACzxho3Ro2bbq4aOjQoaxatYrvvvvOJ1U40p3qiYg8BLwIVDbG7EinzHvAXUBU\n6v4FERkETMB69uBaD+v5tjvi8GFO1avHG/v3U/add7j9jjt8t2032L2bY+XL8/uqVdSqUydg1Wp3\nanjQ7lSlgtuBAwe48cYbmTdpEnUfegjefRfi4pwOyxmvvgpvvgkrV1o3PmDd6DF27FjWrl1LpL0s\nrWDvTr2EiEQC9wGvp9eAsxUDTns4o52wfxb1R3xpfb1qFY8fPMi1c+dqA86Tq6/mzJVX8ssbbzgd\niVJKqQAyxtCzZ0/6dO1K3bFjYdiw8G3AAfTuDXnywEsvXVzUoUMH8uXLxzvvvJPjzQdFIw54EjgH\nPOx0IBkxxjBp0iS69O3LXV99RctWrTJdx+k+eqfqP9ukCXz1leP5K6WCh1vOB27JA3yfy2uvvcah\nQ4d48q+/oHJleDhwv9aDcr9ERMCMGfDss2BPzyQijB8/nieffJIzZ87kaPOOzxMnIj2wpguJTbnR\nIQNHgPxyef9CQfvn0fRWvCsujmq33gpYc7bUrFmT2NhY4J8dn9H748eP884777Bt2zYmTpxIYmLi\nxW17s364vT9fpw41P/qIPSdPBqx+FT5WrFhxyf6Pj4/nr7/+AiAhIcG5wJQKYzt27GDEiBF89913\nRF64ABUqgLhiVEPOVKoEgwfDwIHw5ZcgQv369bn55puZMmWKV1OOpMfRMXEi0gUYCsQZYw55UX4Y\n8H9AOWPMH6mWvwT0Bq40xpz2sJ45LMLuRo24Ye5ccnn7OKxz50ieOZO5EREMfvppOnbsyHPPPUd0\ndLR364ezxET+zpuX7155hZb33x+QKnVMXHjQMXFKBZ+kpCQaNWpE+/bteTiAV99Cxvnz8MEH0KXL\nxYbttm3bqF+/Ptu2baNIkSKXFA/6MXEici9pGnAi0lpEeqUqU1Lkkmb8p4ABGqfZXGNgsacGXIoj\ny5eze+tW/o6JYX3Xrly4cMFzQWNg/XoShw/nTMmSfD9sGB+8+ioffvghL7zwgjbgvJUrF18OGMCC\nVaucjkQppZSfTZ48mcjISB588EGnQwlOUVHQteslVyYrVarEHXfcwfjx47O9Wacm++0MvA48ARxM\n9dGtwD5jzGgRaQB8C0w3xvRPte4rWI22lMl+ewAvA/WMMR6fP5Tyl6wxhsWvvMIXM2bw8YEDNGvW\njAYNGnDVVVdRsGBBCrz/PpXfeotjInyemMjam26izdChtG3bFsnmJeHU3T5OcLL+zZs3Exsby4ED\nB7L9/WWFXokLD3olLnQ5fT70FbfkAb7JZevWrTRs2JA1a9Y4OuF9KO6XP/74g5o1a7Jp0yZKlSp1\ncbm35zCnxsRNAaKwJvhNzQCj7X+fBI4B+9KUeQAYBawUkQtYd6Y2T68Bl5qI8O/+/fl3//48tH07\ny5cvZ9WqVRw8eJATJ05QIV8+ytxxB1WbNaNNXBx9y5TJSY5h7zp7XqAtW7ZQpUqVgNQZiMaiUkop\nS1JSEj169GDcgw/qE4uyoWzZsnTp0oX/+7//Y/LkyVleP2jmifMnN/0lG2p69erF9ddfz0MPPeR0\nKCqM6JU4pQJj8uTJrHz3XeYkJCA//ADlyjkdUsg5ePAgVapU4ddff6V06dJACIyJU+GhadOmLF26\n1OkwlFJK+VhCQgLPP/00s5OSkEcf1QZcVnzwAdhjxkuWLEn37t0ZN25cljejjTg/c3r6C6frz5Mn\nD6tXrEj/RhI/cjr3cK7f6dxVcHLLceGWPCD7uRhj6N27N3Nr1yZv4cLWFBoOC6n9kpQEgwZZN1Ni\nPWf2rbfeYv/+/ZmseCltxCm/KlyoEBvPnCE+AA8/VkopFRhvv/02RXbt4rb1663HSkVocyJLOnWy\nph35+GMAYmJi6NKlCxMmTMjSZnRMnPK7nytXZme1atz+ySdOh6LChI6JU8p/jhw5wvXXX8/m667j\nyvvvh3vvdTqk0LRkCfTvD5s2Qe7c7N27lxtuuIHt27dTrFgxHROngkNkixbk/9//nA5DKaWUDwwZ\nMoROnTpx5cKF0Lmz0+GErmbNoHx5mDkTgDJlytCuXTteSvWc1cxoI87PnO6jD4b6K/TtS83Dhzl5\n4kTA63ZSONfvdO4qOLnluHBLHpD1XJYvX87y5ct55plnIDo6qB6rFZL75dlnYeHCi2+HDh3K1KlT\nvV5dG3HK7/JVqcKZvHn5efZsp0NRSimVTefOnaNfv35MmTKFK664wulw3KFOHUg11KhSpUpZmrBY\nx8SpgPg2NpbfChakx+efOx2KCgM6Jk4p33vuuedYs2YNn+t53K82bdpEtWrVvDqHaSNOBcT3339P\nv379iI+PdzoUFQa0EaeUb/3+++/cXasWH69axTUBegJPONPJfoOE0330wVL/zTffTEJCAocOHQp4\n3U4J5/qdzl0FJ7ccF27JA7zPZdCAAXwVFcU1mzf7N6AccNN+8ZY24lRA5MqVi9tuu41ly5Y5HYpS\nSqks+OKLL2j2448UrVMH7rjD6XDcLTk5S8W1O1UFzJQpU9iwYQOvv/6606Eol9PuVKV848yZM9z+\nr3/xxcmTRG3cCGXKOB2Se/35JzRoAD/9hOTLp92pKrg0bdqUr7/+Gv2FpJRSoWHcmDFMOXOGqLFj\ntQHnb0WKQKVKF+eN84Y24vzM6T76YKq/SpUqtDh+nF3ffx/wup0QzvU7nbsKTm45LtySB2Scy86d\nO9k0cSLlKlSAXr0CF1Q2uWK/DB8O48d7XVwbcSpgRISuhQuza9o0p0NRSimVicGDB1N92DDyrFih\nz0YNlFtugQoVvC6uY+JUQP2vVy9yffUVt+zZ43QoysX8PSZORGoCA4AGQCIQCXwNPGOMOZLBevmB\nB4BWQF77lQzMNMZMTGcdPX+pgFuyZAl9+/Zl48aNREdHOx1OeFm6FGnaVOeJS6EnweCxb9068t58\nM4XOniUiKsrpcJRLBaARtwX4BehqjDkjIqWBpVi9GzWMMWfTWe96YD3wX2PMAntZS+BzYJQx5jkP\n6+j5SwXUhQsXqF69OmPHjqVt27ZOhxOWdJ64IOF0H32w1V+6Vi0O5s7N9vfeC3jdgRbO9TudewAk\nA8OMMWcAjDH7gPHAv4CWGax3EnglpQFnr7sAq0HYzn/hBge3HBduyQM85zJ16lTKli1LmzZtAh9Q\nDrhpv3hLG3Eq4PZUqcKR9993OgylcqK6Meb3NMv22z8Lp7eSMSbBGPOgh48KAYGbCVupdBw+fJiX\nn3mGSZMmIUH0cHvlmXanqoBbNGkSi+bM4cUA3aWqwo8T88SJyEPAi0BlY8wOL9fJDwwH7gP+Y4y5\n7Ll0ev5SgTS6Qwcemj+fwocPQ968TocTtrw9h2kjTgXc0aNHKV++PEeOHCFKx8UpPwh0I05EIrHG\nun1vjOnj5Tr/A24GdgC9jDGr0imn5y8VEBt+/pm/b76Zmk8/Tf7HHnM6nLCmY+KChNN99MFYf9Gi\nRbn22mv58ccfA153IIVz/U7n7oAngXPAw96uYIxpCOQDxgBLRWSgn2ILGm45LtySB/yTizGGL+65\nh0olS5J/yBBng8omN+0Xb2kjTjmiSZMmLF261OkwlMoxEekBtMfqDj2TlXWNMUnGmLeB2cAEESnp\njxiVysxXc+Zw/7ZtXPnee5Arl9PhKC9pd6pyxFdffcWYMWP45ptvnA5FuVCgulNFpAswFIgzxmR6\nY4KI5AaSjTFJaZb3B14Gmhljlqb5zHTr1o1y5coBULhwYWrWrElsbCzwz9UHfa/vs/v+woULJNx9\nN/+pU4cdw4c7Hk84vk/5d0JCAgCzZ8/WMXEptBEXfE6ePEmpUqU4dOgQ+fLlczoc5TKBaMSJyL3A\nMFI14ESkNRBjjJlhvy8JHEo5AYnIU8BZY8yYNNsaBwwBbkp7c4Oev5S/TZw4kfjPP2f23LlQvLjT\n4Sh0TFzQcLqPPljrv+KKK3i5SBF+HzUq4HUHSjjX73Tu/iYinYEZwJtAcxG5127UtQFK22UaAPuA\nqalWNcAAEamSalsNgb7AN57uTnUTtxwXbskD4LPPPuP5559n2NSpId+Ac9N+8ZZ2fCvHFLrxRpK+\n/DJLD/tVKkhMAaKwJvhNzQCj7X+fBI5hNeRSzMZ61NZ7Yk3ClQtIAp63t6lUQL399tvcddddVK1a\n1elQVDZod6pyzOqPPuK6jh0pfP68PlxZ+ZQT88T5i56/lL9s27aN+vXrs2nTJkqUKOF0OCoV7U5V\nQe+mtm05mJzMCb25QSmlAu6xxx5jyJAh2oALYdqI8zOn++iDuf6oqCg2XX01u2fODHjdgRDO9Tud\nuwpObjku3JDHD3Pm0GPRIm6sWdPpUHzGDfslq7QRpxyV3KQJF1Z5nKheKaWUHyQnJ/N3v36UbdmS\nPNHRToejckDHxClHrfvhB7p068amzZudDkW5iI6JUyp9y558ksrjxhHz559E5M/vdDjKAx0Tp0JC\nzVq1OHDwIPv27cu8sFJKqRw5d+oUpceO5djjj2sDzgW0EednTvfRB3v9kZGRxMbGsmzZsoDX7W/h\nXL/Tuavg5JbjIpTz+K5bN84XLMj1I0cCoZ1LWm7KxVvaiFOOi4uL80sjTiml1D+OHTvGkkWLyP/a\nayCuGG0Q9nRMnHLcli1b+Pe//01CQgKiJxblAzomTqnLPfroo5w4cYLp06c7HYrKhLfnMH1ig3Jc\n5cqVKXH2LH8sWsQ1LVo4HY5SSrnOrl27mDlzJr/++qvToSgf0u5UP3O6jz4U6hcR+pUvz3kfP0c1\nFHJ3a/1O566Ck1uOi1DM44knnmDAgAHExMRcsjwUc0mPm3Lxll6JU0Gh4J13UnzkSEhO1kdwKaWU\nD8XHx7NkyRK2b9/udCjKx3RMnAoKf/zxB0nly3PN2rVE3Hij0+GoEKdj4pSyJSYy6uabKd6zJwMf\neMDpaJSXdJ44FVLKli3Lqiuu4MDbbzsdilJKucbmIUNouWULvXv3djoU5QfaiPMzp/voQ6n+v2+5\nhfMLFjhStz+Ec/1O566Ck1uOi1DJI/mvvyg+dSrHR40iKk8ej2VCJRdvuCkXb2kjTgWNkh078j/t\nNlJKKZ/Y0q0bqwsVotmwYU6HovxEx8SpoHH48GGuvfZajhw5Qu7cuZ0OR4UwHROnwt35bds4VaUK\nm95/nwZ33+10OCqLdEycCjnFixenfPnyrF271ulQlFIqpG3s25f5FSpoA87ltBHnZ0730Yda/XFx\ncSxdutSRun0tnOt3OncVnNxyXAR7HidOnKDNxo1Uf/fdTMsGey5Z4aZcvKWNOBVUmjRp4rNGnFJK\nhaMXXniBxs2bU71OHadDUX6mY+JUUPn777+JiYnh8OHD5M2b1+lwVIjSMXEqXB08eJCqVauybt06\nypUr53Q4Kpt0TJwKSQUKFOCeChXY17+/06EopVTIeeaZZ+jatas24MKENuL8zOk++lCsv2rDhhT7\n+GPI4dWHUMzdLfU7nbsKTm45LoI1j9927OCDDz5gxIgRXq8TrLlkh5ty8ZY24lTQqXnXXZw+dw62\nbHE6FKWUCg1Hj5Lr5psZ0r8/xYoVczoaFSA6Jk4FnXPnzvH+FVdw9zPPkO+xx5wOR4UgHROnws2h\nzp1ZMG8edx06RP78+Z0OR+WQjolTIStPnjzsqVKFEx9/7HQoSikV/HbsIM+HH2JGjtQGXJhxtBEn\nIjEislBEkp2Mw5+c7qMP1fqv+O9/KbRhA5w/H/C6fSWc63c6dxWc3HJcBFseh+67jxlXXEHnRx7J\n8rrBlktOuCkXbznWiBORdsBKoByQpb4CEUkQkfUeXk38EasKvAZt29LmmmtAH7+llFLpMitXkrx6\nNWUnTiQqKsrpcFSAOTYmTkRWAp2Bp4CuxhivG5QistMYUz4L5XVMSYhJSkqiWLFibN68mVKlSjkd\njgoxOiZOhYtlY8Ywb8YMJm3fTkSEjpByi1AYE9fQGJPgYP0qiEVGRtKoUSOWLVvmdChKKRWUEhMT\n6f/mm7SaNk0bcGHKsb0eLn9aOt1HH8r1x8XF5agRF8q5h3r9TueugpNbjotgyWPWrFmULl2a5s2b\nZ3sbwZKLL7gpF2+FbNNdRMaKyEoR2Soii0SkjdMxKd+Ki4vT56gqpZQHp0+fZvTo0YwZMwYRV4wc\nUNng+DxxIvImWR8TtwZ4wRgzV0RyAb2Bl4EHjDFTPZQPlwt/rmKMoXRMDKs//ZRr6tVzOhwVQnRM\nnHK7sWPH8sMPP/CxTsXkSt6ew3IFIhhfM8bUTfXvRGCaiLQEnheR140x55yLTvmKiNCldm2KtGkD\nhw+D/rWplFKcfP99Xhs3jvkrVzodinJYSDbi0vED0BKoCqxP+2H37t0vPhC4cOHC1KxZk9jYWOCf\nfnR/vE/dRx+I+txW/3V33MHyJUso+N57xHbunKX108YQ6PzDuf74+HgefvjhgNb3119/AZCQkIAK\nTitWrLi430KZo3ns3In07Mkd7dpx3XXX5Xhzbtkn4K5cvGaMcfQFvAkkZ6F8NJDfw/IRQDJQ28Nn\nxinLly93rG431J+QkGDej442yS+/HPC6cyqc63c6d/v/vOPnN1+8nDx/+ZrTx4WvOJnHqf/+1zyf\nN6/ZvXu3T7bnln1ijLty8fYcFixj4roYYyLT+bwkcMhOChHpDtxijOmbptwnQAugmDHmdJrPjNN5\nqux7pEQJnrrhBgrpTQ7KS/4eEyciNYEBQAMgEYgEvgaeMcYcyWC9GKAvcDvWjWW5gE3AKGPMr+ms\no+cvZfnhB441bsyEXr14btIkp6NRfhQK88Sl5jFQEWkA7APS3qzQSURqpyrXAfgvMC5tA06Fvojm\nzYletQoSE50ORakUHwCFgVrGmOpAM6A5sFJEojNYbxTQEWhpjLkBqAkkAWtE5Ho/x6xCmTGcHjCA\n0RERDB450uloVJBw8rFb00RkJ3AnYERkp4j8LiKpn7P0N3AMqyGXYgEwHutmhvX2NoYCfYwxTwUo\nfK+lHp+k9WdPnTZt+K54cTh0KOB150Q41+907gGQDAwzxpwBMMbswzov/QtrbG56DDDWGLPXXu8c\n8BiQF+sue1dzy3HhSB7r1nF4+3Zihg+nSJEiPtusW/YJuCsXbzl2Y4Mxpr8XZTYAxdIsOwQ8a79U\nGGjcuDGVTpzgSIkSrroTR4W06sa6Mz61/fbPwhmsNxCrAZjV9VSY+9EYOuXLxwb7hiGlIAjmiQsE\nHVMS+qpXr86MGTOoW7du5oVV2HNinjgReQh4EahsjNmRhfVqYN1Rf78xZqaHz/X8FeaMMTRt2pQO\nHTrQu7frL9gqQm9MnFIZ0qc3qGAmIpHAfcDrWWnA2XoDvwJv+zww5QpLlixhz5499OzZ0+lQVJDR\nRpyfOd1H75b6mzRpkuVGnFtyD8X6nc7dAU8C54As9XWJSBxwN3C3MeaCPwILJm45LgKZR3JyMsOG\nDeP5558nVy7fDyhxyz4Bd+XiLR1ipEJCo0aNuOeeezh79izR0Rnd/KdUYIlID6A9EJtyo4OX69XA\nmiezjTFmS0ZlnZqsXN+nP7l0QOozhlGjRnH27FnatWvnl/ri4+P9F7++9/p9yr+zOlm5jolTIaNx\nnTq8UbUqFd580+lQVJAL1Jg4EemCdXd8nH3TlbfrVQfmAfcaY1ZlUlbPX2EqqXt3BixcSMcPPgi/\nJxGEOR0Tp1ynYbNmlPjwQ9DHKqkgICL3kqYBJyKtRaRXqjIlRS596K+nBpyIxIjIq4GLXgW9n37i\n7KefcuiGG7QBp9KljTg/c7qP3k31N46LY2XevLBkScDrzo5wrt/p3P1NRDoDM7C6Q5uLyL12o64N\nUNouc9lk5SJyA7AUWARUSLVeB6ByQJNwgFuOC7/nYQyJjzzCU8YwasIEv1blln0C7srFWzomToWM\n+vXr8/DJkzRZsIDcvXplvoJS/jMFiMKa4Dc1A4y2/32SyycrfwooAvSxX6mt8HWQKkTNn8+fmzZx\nuBr+3e0AACAASURBVG1batSo4XQ0KojpmDgVUjo0bMjbGzYQdewYRHp83K5SjswT5y96/goziYkk\nVqnCvQcOMOaXXy7e0KLCi46JU65Uo2VLjubODT/95HQoSinle2fO8HmJEpS+/35twKlMaSPOz5zu\no3db/XFxcQy58kqoUCHgdWdVONfvdO4qOLnluPBnHtsPHKD31q08PmKE3+pIzS37BNyVi7e0EadC\nSq1atZh/5AiHkpKcDkUppXzu8ccfZ/DgwRQrVizzwirs6Zg4FXLatm3LPffcQ8eOHZ0ORQUpHROn\nQtGaNWu488472bZtG/ny5XM6HOUgHROnXCsuLo5ly5Y5HYZSSvmMMYahQ4fy1FNPaQNOeU0bcX7m\ndB+9G+uPi4vz6jmqbsw9VOp3OncVnNxyXPg8jw0b+N+kSRw+fJju3bv7dtuZcMs+AXfl4i2dJ06F\nnGrVqnHy5EkSfv+dcl7c4KCUUkHLGEy/fixMSGDsq6/65SH3yr10TJwKSZ06duTV5csp9NNPUKaM\n0+GoIKNj4lTI+OgjjgwaxF3lyrHsm29I85Q2FaZ0TJxytbimTdkcHQ0LFzodilJKZc/ZsyQ/+ij9\nT59m7IQJ2oBTWaaNOD9zuo/erfU3bdqUd44dw3z5ZcDr9lY41+907io4ueW48FkeL73Ejjx5iGja\nlDp16vhmm1nkln0C7srFW9r5rkJSuXLl+KlkSZKXLCHy3DnIk8fpkJRSynuJiSS+9hpdjhzhveee\nczoaFaJ0TJwKWY888ghDPvqIMrNmQdOmToejgoiOiVOh4ME+fYjMl4+JEyc6HYoKMjomTrleixYt\n+CwyErZvdzoUpZTKki1btvD+J5/wxBNPOB2KCmHaiPMzp/vo3Vx/o0aNeOzPPzmWzpMb3Jx7sNfv\ndO4qOLnluPBFHsOGDWPYsGEULVo05wHlgFv2CbgrF29pI06FrOjoaBo2bOjVxL9KKRUsvvnmGzZs\n2MDAgQOdDkWFOB0Tp0LaSy+9RHx8PG+88YbToaggomPiVFBKTCTZGOrUq8fgwYPp1KmT0xGpIOXt\nOSxLjTgRWQj8DiwHVhhjDmc/xMDRk6B7bd++ndjYWPbs2aNzLKmLPJ0A9fylHPfii2xetIgex4/z\n/fff6zlLpctfNzb8H3AWGAbsE5GNIvKSiLQTkejsBOp2TvfRu73+a6+9lujoaH755ZeA152ZcK7f\n6dzToecvhwXpcZFl2crj8GHM//0f/Tds4MUXXwyaBpxb9gm4KxdvZakRZ4z5xhgzyBhTGyiGdTK8\nEpgN7BaRO/wQo1LpEhH+85//8Msrr8BPPzkdjgpiev5SjnrySX78178o1rAh9evXdzoa5RI+GRMn\nIg8C3wOTgJHGmKAaaa7dEe725ZdfsuuRRxgQGwszZjgdjgoCWRkTp+cv5Xfx8SQ1a0alpCQW//gj\nFStWdDoiFeT80p0qIk+JyHr7Z4XUnxljfgQaAS2yFqpSOdO4cWNm7NtH8vz5oL/sVDr0/KUcYQw8\n9BDvVapEu/vu0wac8qmsjomLBIYC5YFfRGS7iKwD6tmfXwvs9GF8Ic/pPvpwqD9//vwUr1+f0yIQ\nHx/QujMSzvU7nXs69PzlsCA9LrIsS3kYQ0LLlgzbsSMoJ/Z1yz4Bd+Xiraw24g4AGGO6AaWAB4Bn\nge4iUhj4Baji0wiV8kKLFi34oWhRmD/f6VBU8NLzlwo4I0KPhQsZOXo0hQoVcjoc5TJZHhMnIg3t\n9b7z8FllYJ8x5m8fxecTOqbE/TZu3MjzTZrwTvnyyOrVToejHJbeeBI9f6lAmzdvHk888QTx8fHk\nypXL6XBUiPB2TFyWjyhjzP8y+GxrVrenlC9UrVqV1VFR7L37bq5yOhgVtPT8pQLp3LlzDBkyhGnT\npmkDTvmFPnbLz5zuow+X+kWEZq1aMSfVFYtwyT0Y63c6dxWc3HJceJvHlClTqFq1Ks2bN/dvQDng\nln0C7srFW9qIU67RunVrvvzyS6fDUEqFu+XLOf7KK4wdO5YXXnjB6WiUi+mzU5VrnD59mlKlSrFr\n1y6uvPJKp8NRDtJnpyrHnD8P1avz8tVXk1CjBhMmTHA6IhWC/PXYLaWCVr58+bjttttYtGiR06Eo\npcLV5MkcL1aMZzds4Mknn3Q6GuVy2ojzM6f76MOt/jZt2lhdqklJYZd7MNXvdO4qOLnluEg3j717\nMWPH0uv0aZ57/vmQmFLELfsE3JWLt7QRp1ylVatWrJw/H1O+PCQmOh2OUiqcDBnCxoYN2RkZSY8e\nPZyORoUBHROnXOfGG2/k27NnKTB1KjRp4nQ4ygE6Jk4F3JkzXLjnHqqsWcPbH39MvXr1Ml9HqXTo\nmDgVtlq3bs3K4sXhs8+cDkUpFS7y5mXkddfRoFkzbcCpgNFGnJ853UcfjvW3adOGV/buZcWcOdbD\npx0Sjt99MNStgpdbjgtPeWzbto0ZM2YwZsyYwAeUA27ZJ+CuXLyljTjlOrVr12b133+TaAz8/LPT\n4SjlkYjkEZEJIpIkIrc5HY/KPmMMDz744P+3d+9xWo37/8dfn6YSQg5b0rZLNkVp56yTptAvKhqF\n3VY6SV9ySnRAoXTYO8VOiQ46EkK7ohwrkaRiHCKiE1I5ROfDNNfvj3UPY5pqprnv+7rXfb+fj8c8\npnvNWvP5XKs16/7c67rWtejZsyflypXznY6kEI2Jk6TUvn17Oq1dywXt2sG11/pOR+IsHmPizKwG\n0BmoDWQBacCbQF/n3E8H2LYaMBHIBs4C0p1z8/axrs5fCW7q1Km/Px+1RIkSvtORJKAxcZLSmjRp\nQq/sbBVwEkvPAmWAc5xz1YFLgYbAfDMrdYBtuwNdgaGxTVFiatEitq1aRZcuXRg2bJgKOIk7FXEx\n5ruPPlXjX3rppbz77rts2rTJS3xI3X3vO3YcZQPdnXPbAZxza4FBwKnA5QfYto1zbjaQFHfQFlSy\nHBdz586FLVugRQue7dWLCy+8kPr16/tO66Aky/8JJFdbCkpFnCSlI444gmrVqjFr1izfqUjyqu6c\nW5Fn2Q+R72X2t6FzLjs2KUncPPAAv511Ft1mzdLzUcUbjYmTpDVy5EjmzJnD5MmTfaciceZrnjgz\nux0YAlR2zn1dgPXbAk+hMXHh8vHHuEsv5ZrTT6dWs2Z06dLFd0aSZAp6DlMRJ0lr/fr1VKlShXXr\n1nHIIYf4TkfiyEcRZ2ZpwEfAAudcpwJu0xYVceGyZw/UrMmis87ihvffZ8mSJRQvXtx3VpJkdGND\ngvDdR5/K8b/44guqVq3Kh8OGgYdu1VTe977b7kkvYCdwh+9EElVSHBfz5/PWzp1kvPwyI0aMCH0B\nlxT/JxHJ1JaCCvfRJ3IAGRkZfPj669ScMQMuu8x3OpKkzKwd0ILgitr2aP/+tm3bUrFiRQDKlClD\njRo1SE9PB/5449LrOL3OzubBI46g0XnnUatWLf/5FPF1ZmZmQuWTqq9z/r1q1SoKQ92pktS++eYb\n6tesyerdu7Fly6BsWd8pSRzEszvVzFoD3YCLnXMbCrltW9SdGiqLFi3iiiuuYOnSpRxzzDG+05Ek\nFYruVDMrZ2avmpnu1JKYOOWUUyhzwgn8eN55MHWq73QkyZhZK/IUcGbWxMw65lqnrJml1FQiySor\nK4sbb7yRQYMGqYCThOCtiDOzq4D5QEWgUB8zzayEmfU1sy/M7FMzm29mtWORZ1H57qNP5fg5sTMy\nMph56KEwZYqX+L4kwr5PZmZ2HTAKGAc0NLNWkaKuKXBiZJ3awFpg+IF+XQxTTRhhPy6GDh3Kscce\nS/ny5X2nEjVh/z/JLZnaUlA+x8R1BRoADwCnFXLbx4B0oLZz7mcz6wC8bma1nHN6WKb8SUZGBv+a\nMIE2GzdiP/4If/mL75QkOQwFShJM8JubAx6M/HsLsJGgkPudmV0fWad0ZP1nzWwHcL1z7p1YJi0H\nYdkyVpUqRf/+/VmwYAHff/+974xEAI9j4iwy0MPMxhGcuAp0VdDMKgOfAx2cc+NyLf8MWOWca5LP\nNhpTksKcc1SqVInX+/Xj1ObNQdONJD1f88TFgs5fns2cibvtNppUqkTdBg3o0aOH74wkBST8mLgi\nnJUyCLoe5uRZPoegS+OwIiUmScfMyMjI4Jnly1XAiUjB/fYb/N//8dbVV/P9hg107drVd0YifxLG\neeKqA3uANXmWryToHj4j7hnth+8++lSOnzt2RkYGU+N8Y4P2vcifhe646NqV7fXr02rsWEaPHv37\nA+5D1479UFvCLYxF3HHAtnyu5OU86fzYOOcjIVCrVi3WrVvH118f8ElIIiLw6qvw5pvcsm0b1113\nHeeee67vjET24n2euIMYE/c6cIFz7qg8y28ARgKXOedey/MzjSkROnfuzF//+ld69uzpOxWJMY2J\nkyJxDmrW5L3LL6fNxIl8/PHHHHaYRupI/BT0HBbGJzb8BBxue5/Zjox8/zm/jTTjuV5fc8013HHH\nHdQ880wwI71x44TKT68P/nVmZia//vorQKFnPBfZixkbX3qJq887j8mTJ6uAk8TlnPP6RTDHUnYh\n1u8OZAN/y7P8MYLnFh6WzzbOlzlz5niLnerx88bOyspy5cqVc79efbVzgwfHPX68JdK+j7fI37z3\n81s0vnyev6LN93FRGG3btnWdO3fO92dhaseBqC2JqaDnsEQZE7fPvoJ8ZjufGlm/fp5V6wOvO+e2\nxSA/SQJpaWm0aNGCGYcfDs884zsdEUlQM2fOZO7cuQwcONB3KiL7ldBj4iKznc8DnnTO3Zxr+QiC\noi1nst92wDCgpnPuk3x+j/PdTkkM7777LrfcdBOZP/8Mc+ZA5cq+U5IY0Jg4OVi//PIL1atXZ+LE\nidSvn/dagUh8JPw8cWb2uJmtBJoDzsxWmtkKMyuRa7XN5DPbOXArMAWYb2afAjcADfMr4ERyq1Wr\nFj9t3MjPl14Kkyf7TkdEEsVHH8Hu3dx22200b95cBZyEgs/Jfm92zp3snDvCOZcW+Xcl59zuXOt8\n4pw7zjn3UJ5ts5xzvZxzVZxzZzrnajvn5se/FQfme96aVI6fX+xixYpx9dVX81LJkkGXagyvcGjf\ni/xZwh4XK1ZAw4a8Pnw4H3zwAQMGDNjv6gnbjoOgtoRbooyJE4mba665hkfnz4emTWHrVt/piIhP\nWVnQqhWbOnfm+oEDGT9+vO5GldDwPiYuHjSmRHLLzs6mYsWKzJw5k2rVqvlOR2JAY+KkwPr0wb3z\nDk1LlKDG2Wfz0EMPHXgbkRhL+DFxIr7kdKk+//zzvlMREZ/eew+GD2digwas//FH7r//ft8ZiRSK\nirgY891Hn8rx9xf72muv5bnnniOWVzi070X+LOGOi3Hj+O6BB7hz8GAmTZr0+7NRDyTh2lEEaku4\nqYiTlHTeeeeRlZXFRx995DsVEfFk59ChXDl6NH369KGyphuSENKYOElZvXv3ZsuWLQwZMsR3KhJl\nGhMnBdG1a1e+/vpr/ve///HnOeVF/ErmZ6eKRMV1111Heno6g44+mrS//hXatfOdkojEyaxZs3j+\n+efJzMxUASehpe7UGPPdR5/K8Q8Uu3Llypx00kl8vGcPjBkT9/ixlsj7XlJTohwX69ato3379kya\nNIljjz220NsnSjuiQW0JNxVxktJat27N0OXLIedLRJKTc9C7N3vWraNVq1Z07NiRevXq+c5KpEg0\nJk5S2oYNGzjttNPY0KoVJcuUAc0RlRQ0Jk72MngwPPccfRs2ZM577/HGG2+QlpbmOyuRfGmeOJEC\nOP7446lduzZvlC8P48fDnj2+UxKRaJszBwYN4p3bbuOJsWN55plnVMBJUlARF2O+++hTOX5BY7dq\n1Yph8+bB6afD11/HPX6shGHfS2rxclysWQP/+hc/Dh3KNXffzaRJkzjhhBOK9CuT6fhWW8JNRZyk\nvCuvvJL333+fdRMmgOaKEkkeO3ZA8+Zk3X47VzzyCLfeeiv169f3nZVI1GhMnAjQrl07qlatyl13\n3eU7FYkCjYkTALKzYepUbn7zTX5Yt44XX3yRYsV07UISn8bEiRRC+/bteeqpp2L6GC4RibNixRi7\naRNvzZ7N+PHjVcBJ0tERHWO+++hTOX5hYtepU4esrCwWLlzoJX4shGXfS+qI93GxaNEiunXrxtSp\nUznyyCOj9nuT6fhWW8JNRZwIwaXrnKtxIhJ+33//PRkZGYwZM4YzzjjDdzoiMaExcSIRa9eupVq1\nanw3axaHzZ4NPXv6TkkOksbEpajvv4ddu9hWtiwXXXQRLVq0oEePHr6zEim0gp7DVMSJ5NKkSRNa\nN2rEtffdBytXwtFH+05JDoKKuBS0aRPUrUt2+/b8a8ECSpQowYQJE/RcVAkl3diQIHz30ady/IOJ\n3b59e0a88AJcdhlMnBj3+NEUtn0vyS9mx8Xu3XD11VCrFr3Wr2fNmjWMGjUqZgVcMh3faku4qYgT\nyaVJkyZ8/vnnfNekCTz5ZPC8RRFJXNnZ0LYtlCzJqOrVeX7KFKZPn06pUqV8ZyYSc+pOFcnjzjvv\n5JCSJRkwbRqMGgV16vhOSQpJ3akpwjm4/Xb46CNe69qVtjfdxDvvvMPf//5335mJFInGxOWik6AU\nxrJly0hPT+e7u+6i+OrV8NhjvlOSQlIRl0LGjmXxSSdx+b/+xbRp06hZs6bvjESKTGPiEoTvPvpU\njn+wsatUqcIZZ5zB1BNOgEcfjXv8aAnjvpfkFovj4vMLLqBJq1aMHTs2bgVcMh3faku4qYgTycdN\nN93E8NGjIS3Ndyoisg+rV6+mUaNGPPzwwzRu3Nh3OiJxp+5UkXzs3r2bChUq8Oabb2qi0BCKdXeq\nmdUAOgO1gSwgDXgT6Ouc++kA25YAegMtIttuAro55+bvY32dv/Kxdu1a0tPT6dy5M7fffrvvdESi\nSt2pIkVQokQJOnTowBNPPOE7FUlMzwJlgHOcc9WBS4GGwHwzO9BtkY8BVwN1nHNnAk8Br5vZP2KZ\ncFIYPRq+/JJ169bRoEED2rVrpwJOUpqKuBjz3UefyvGLGvvGG2/k6aefZuvWrV7iF1WY930IZAPd\nnXPbAZxza4FBwKnA5fvayMwqAx2Bgc65nyPbjgFWAv1inbRvRTouBg2C/v35adMmGjRowHXXXUdP\nT09VSabjW20Jt+K+ExBJVCeddBJ16tTh2WefpUPx4nD66XD++b7TksRQ3TmXlWfZD5HvZfazXQZg\nwJw8y+cAnczsMOfctijlmBycgwcfhGefZf2UKVzcpg0tWrSgV69evjMT8U5j4kT249VXX+Wee+5h\nSZs22Pz58PzzvlOSAvAxxYiZ3Q4MASo7577exzrPEHSllsx9UjKzO4GHgfOdc4vzbJO656+sLLjl\nFli4kG9HjaJBy5a0bduWe+65R4/TkqSmMXEiUdCwYUO2bdvGe5Urw+zZwfNURfIwszSgAzB6XwVc\nxHHAtnyqsk2R78fGIr/QeuMNWLGCr8eMoU7z5txyyy3ce++9KuBEIlTExZjvPvpUjh+N2MWKFeP2\n22/n4SefhI4dYciQuMYvirDv+5DpBewE7vCdSCIr9HFx2WUsfPBB6jZuTO/evRPmJoZkOr7VlnDT\nmDiRA7j++uvp3bs3q7p1o+Lll0Pv3vCXv/hOSxKEmbUjmC4kPedGh/34CTjc9u4jPTLy/ef8Nrq6\nYUOq1qoFQJkyZahRowbp6enAH29cyfh6+vTptG7dmh49etChQwfv+eS8zszMTIj9E43XmZmZCZVP\nqr7O+feqVasoDI2JEymAHj16sH37dv67bRucey506uQ7JdmPeI2JM7PWQDfgYufchgKs3x0YAFR0\nzq3Jtfwx4Ebg6Lw3NpiZW1+sGNsnTaJCy5bRbUCCcs4xfPhw+vfvz7Rp0zjvvPN8pyQSV3p2ai4q\n4qSovvvuO6pXr87KZcs46vjjfacjBxCPIs7MWgHdyVXAmVkToJxzblTkdVlgQ84JyMxOA74A2jvn\nxuf6XZ8BK51zTfOJ417r0oWz//tfNg8axMl33hnLZvmxcyf06AHt27PztNPo3LkzCxcuZNq0aVSq\nVMl3diJxpxsbEoTvPvpUjh/N2H/9619p1KgRYyZN8hL/YCTLvk9EZnYdMAoYBzQ0s1aRoq4pcGJk\nndrAWmB4znbOua+AkUBPMzs2sl474GTg3n3FazhkCJn9+1Pi7rv59OabY9OoOMj3uPjmG6hVC9as\nYV2JEtSvX5+NGzeyYMGChC3gkun4VlvCTUWcSAHdcccdDB06lKysvNODSQoaCpQkmOB3Qq6vG4Cc\ny/5bgI0EhVxutwJTCJ7u8Glkm4bOuU/2F/CS7t35Yfp0OrzwAkOGDCH0vQvOwciRcOGF0LYtb3Tq\nxNkNGnDZZZcxZcoUSpcu7TtDkYSn7lSRQqhbty4333wzLVNkbFJY+ZgnLlbynr/WrFnDFVdcwTnn\nnMOwYcM49NBDPWZXBNdeC998w+7Ro+n93HNMnDiRCRMm0KBBA9+ZiXinMXG5qIiTaJk1axbdu3fn\n448/1lxVCSyZiziALVu2cMMNN7B06VKeffZZqlat6im7IvjwQ5YWK0a7G2/k2GOPZfz48Ryv8aYi\ngMbEJQzfffSpHD8WsRs1akRaWhqvvPJK8DDuKVPiGr8wkm3fyx9Kly7N5MmT6dKlC+np6XxyySW4\nWbN8p3VAOcfF7t27eWjmTNIvvZSOHTsyc+bMUBVwyXR8qy3hpiJOpBDMjJ49e9K/f39chQrQqxfs\n2eM7LUlBZkb79u155513GLNyJWubN2drejp8+aXv1P7s008hO/v3l7Nnz+bss89m/vz5fPjhh3Ts\n2FFXtUUOkrpTRQppz549nH766YwaOZJ6994bPNtRY+QSSrJ3p+a1e/duHhs8mF/79qU7UKplS9J6\n9oRTTolPkvlZuBAGDYL582HePFakpXH33Xfz4YcfMnjwYDIyMlS8ieyDxsTloiJOom3MmDFMmTKF\nV7t0gS5dgqsNaWm+05KIVCvicqxevZp7bryRCxcupGbDhtR45hmKF4/jg3l27oRp0+DRR2HdOrjt\nNlZdeikPPfIIU6dO5c4776Rr166UKlUqfjmJhJDGxCUI3330qRw/lrFbt27N0qVLWXLssXDkkfmO\njdO+l3irUKECT7/2Gv+YPp07162jWrVqTJo0iV27dsUngalT4Ykn4K67WPLss7TNzOTcevU48cQT\nWb58ObVr106KAi6Zjm+1JdxUxIkchJIlS9KtWzf69O0L/frBokW+UxL53UUXXcTbb7/N0KFDGTt2\nLH/729+47777WLNmDVx1FXTvDm+8Ab/8UvhfvmsXfPVVvj/6tVEjxl1/PRf+5z80v+YaqlSpwldf\nfUWfPn045phjitgqEclL3akiB2nHjh2cdtppvPDCC5x//vm+05FcUrU7dV+++OILRowYwaSJE7m6\nfHnalCvHWRs3Umr5cqx0aaheHV55BYrl+Vy/Zw8MHAg//ABr18KKFUEBV61aMObNjNWrVzN79mxe\nfPFF3nnnHdLT0+nQoQONGzcmTUMMRA6KxsTloiJOYuXJJ5/kpZde4rXXXvOdiuSiIi5/u3btYs6c\nOUydOpXp06eDczStXp2Ly5enVLNmVKhQgQoVKlCmTJlggz174N57yS5Xjm1HHcXPhx/Op86xdOVK\nPvvsM+bNm8eOHTuoV68ezZo1o0mTJhx55JFRyVUklamIy8VnETd37lzS09O9xE71+PGIvWvXLqpU\nqcK4ceO46KKL4h5/f5J93++PirgDc86xevVq3n//fd5//32WL1/O6tWrWb16Ndu3b+eQQw7hkEMO\nwTnH5s2bKV26NMcddxyVK1emSpUqnH766dSpU4fKlSsX+C5T38dFtCRLO0BtSVQFPYfF8bYlkeRT\nsmRJevfuTa9evZg7d66mTJDQMDMqVqxIxYoV+ec///n7cuccWVlZ7Ny5k507d2JmHHXUUeoaFUlA\nuhInUkRZWVlUrVqV4cOHc8kllwSDxTWI2ytdiRORMNMUIyJxUrx4cR588EHuuecesrdsgapVYfly\n32mJiEiSUxEXY77nrUnl+PGMfc011+Cc47kZM+COO+Cuu7TvRfJIluMiWdoBakvYqYgTiYJixYox\nePBgevbsyfZOnWDpUs0dJyIiMaUxcSJRdNVVV3H++efT44wzoGdPyMyEEiV8p5VyNCZORMIs4acY\nMbPjgUeAcyKLPgXucM59X4BtVwEb8/lRV+fc7HzW10lQ4mL58uXUrFmTz5cu5fjWraFpU7j1Vt9p\npRwVcSISZgl9Y4OZlQTeIJji5IzI11ZgjpkdXoBf4ZxzZ+XztVcB55vvPvpUju8j9qmnnkqrVq14\n4MEHmduuXfCII09Sbd9L4kuW4yJZ2gFqS9j5GhPXBjgT6O6cy3bOZQPdgUrATZ5yEomK3r1788IL\nL7Bi+3YoX953OiIikqS8dKea2atAZefcyXmWfwJsdc7VPMD2K/Nue4D11R0hcfXEE0/w9NNPM2/e\nPE0A7IG6U0UkzBK6OxWoDqzMZ/kqgit0B2Rm/zaz+Wb2pZm9ZmZNo5mgSFF07NiRnTt3Mn78eN+p\niIhIkvJVxB0HbM5n+SbgMDM75ADbbwCWOOdqA1WBacA0M+sc3TSLzncffSrH9xk7LS2NDh060KNH\nD3755RcvOaTqvpfElSzHRbK0A9SWsPNVxBWpb8A5d4Fz7vnIv7Occ48DM4H+BSgAReKicuXKtGjR\ngnvuuSdYcPXVwfxxIiIiUeBrTNz3wJfOuQZ5lk8H6jvnjjiI39kbeAA4xzn3UZ6fuTZt2lCxYkUA\nypQpQ40aNUhPTwf+qN71Wq+j/frXX3/llFNOoW/fvtyclgajRzN3wAAoXjwh8kuW15mZmfz6668A\nrFq1ivHjx2tMnIiEVkLPE2dms4Aq+dzY8Cmw2TlXaz/blgLSnHNb8yy/F+gLnO+cW5znZzoJWksf\nJAAAGVFJREFUijeTJ0+mX79+LFm8mEOaNYPataFXL99pJTXd2CAiYZboNza8BFQwswo5C8ysLFAF\neDH3imZW1v58e98/gcH5/M5zgB3A59FP9+D57qNP5fiJ0vZ//vOfnHrqqTzYpw+MGQOPPQYffhi3\n+D743veSmJLluEiWdoDaEna+irhxBE9o+LeZpZlZMWAgsAIYkbOSmdUG1gLD82zf0szOzbXetcCV\nwH+cc9tinLtIoZgZI0aMYMyYMSxauxaGDIHrr4cdO3ynJiIiIZYIj906l+BGh70eu2Vm1YHZwKPO\nuYdybXcjcAVQAigD/AKMcM6N3kcsdUeId5MnT+ahhx5iyeLFlJo1C668EtLSfKeVlNSdKiJhltBj\n4uJNJ0FJBM45mjdvTuXKlRkwYIDvdJKaijgRCbNEHxOXMnz30ady/ERre0636rhx4+KSWyrve0lM\nyXJcJEs7QG0JOxVxInFUtmxZxo0bR+vWrfnpp598pyMiIiGm7lQRD7p168bnn3/OjBkzgmerbt8O\nhx7qO62koe5UEQkzdaeKJLCHHnqIH3/8kf/+97+QnQ0XXghvvOE7LRERCREVcTHmu48+leMncttL\nlizJ5MmT6d+/PwsXLQrmjmvVClasiEv8WPO97yUxJctxkSztALUl7FTEiXhSqVIlRo8eTYsWLVh3\n2mnQuzc0awZbtvhOTQrIzMqZ2atmlu07FxFJPRoTJ+JZnz59eO2115j91lsc0rkzbNoEzz8PlhRD\nuryIx5g4M7sKeBjYBZzqnCvwpH+Rp9UMBC4AsoDfgL7Ouen5rKvzl0iK0Zg4kZC47777OP7447nt\n9tvh8cfhhx/ggw98pyUH1hVoALwPFLhgjExY/h5QEjjNOXcaQTH4kpk1jkWiIpKcVMTFmO8++lSO\nH5a2FytWjAkTJvDuu+8yfPRomDsXLrggbvFjwfe+j5M6zrlVB7HdLUA5oIdzLgvAOfccQTE4KHrp\nJZ5kOS6SpR2gtoSdijiRBHDEEUcwY8YM+vXrx7RXXvGdjhRAEfo4zwV2OeeW51n+KVDFzE4tWmYi\nkio0Jk4kgSxevJjLL7+c6dOnc+GFF/pOJ7TiOU+cmY0DrnfOFehDsZlNAa5wzh2SZ/lw4KbIz17O\ntVznL5EUozFxIiF07rnnMn78eDIyMvjqq6/++EG2bn5MIh8CJcysep7lNSLfj4xzPiISUiriYsx3\nH30qxw9r2y+77DL69etHo0aN+Pbbb2HDBjjrLPj227jEjwbf+z7BDQPWAo+Y2TFmVszMOgJnRn6+\n3V9qsZUsx0WytAPUlrAr7jsBEdlb+/bt+e2332jQoAFvv/02J7ZpA5dcAvPmQdmyvtOTInDObTaz\nOkAfgpsZtgFzgTuBkcBe1Xrbtm2pWLEiAGXKlKFGjRqkp6cDf7xx6XX8XmdmZiZUPkV5nZmZmVD5\npOrrnH+vWrWKwtCYOJEENmDAACZMmMDcuXMpO2IEvPQSvPkmHH+879QSWiKPidvP7+kG3Av8xTm3\nK9dynb9EUkxBz2G6EieSwHr27MnOnTu5+OKLeevNNymbnQ316weFXLlyvtOTP+yzyjKzssCGnErM\nzA4Fajvn3syzahNgUu4CTkRkfzQmLsZ899Gncvxkafv9999PixYtqHvRRay54Qa47jpYvDhu8Q+G\n733vQb6fmM2sNsH4t+G5FpcFZphZjcg6xczsLuAEoFesE/UpWY6LZGkHqC1hpytxIgnOzHjggQc4\n6qijqFu3Lq+//jqVK1f2nVbKM7PHgcuA4wBnZisJrshVds7tjqy2GdhIUMjl2AjMAP5nZpuAbIIn\nONRyzv0Sr/xFJPw0Jk4kRJ566inuu+8+Xn75Zc4++2zf6SSseI6JizWdv0RSj+aJE0lC7du3Z/jw\n4TRq1Ijp0/d6VrqIiKQQFXEx5ruPPpXjJ2vbMzIyeOWVV7jpppt45JFHcM4Fz1udNi0u8QvC976X\nxJQsx0WytAPUlrBTEScSQueddx4LFixg7Nix3HzzzWSVKgU33QRPPuk7NRERiRONiRMJsU2bNtGy\nZUu2bdvGlIEDOa51a2jSBAYNgrQ03+l5ozFxIhJmGhMnkgKOPPJIpk+fTt26dTmrRQs+GDoUPvkE\nmjaF337znZ6IiMSQirgY891Hn8rxU6XtaWlp9OnThyeeeIKmbdowrHFjXKVKzB07Ni7x8+N730ti\nSpbjIlnaAWpL2KmIE0kSjRs3ZsGCBYyZMIGr161jU6VKvlMSEZEY0pg4kSSzY8cOunfvztSpU5k4\ncSL16tXznVLcaUyciIRZQc9hKuJEktTMmTPp0KEDHTp04P7776dEiRKwZ09K3PCgIk5Ewkw3NiQI\n3330qRw/ldsOcNhhh5GZmcmSJUuoW7cua15+Gc4+G5Yvj3ls322XxJQsx0WytAPUlrBTESeSxMqW\nLcsrr7xCy5YtOadtW94980xc7dowY4bv1EREpIjUnSqSIpYuXUqrVq24pHRpBq5YQVr79vDAA0nZ\nvaruVBEJM3WnisifVK1alYULF1K8Th1q7N7NT//7H7Rv7zstERE5SCriYsx3H30qx0/ltu8rfsmS\nJRkwYACPv/giNTdv5r7t29myZUtcYosky3GRLO0AtSXsVMSJpKC6deuy5JNP+P7wwznrrLN4//33\nfackIiKFpDFxIinuxRdfpHPnznTq1In77rsvmIok5DQmTkTCTPPE5aKToMj+/fDDD7Rv356ff/6Z\naRkZlGvbFsqV853WQVMRJyJhphsbEoTvPvpUjp/KbS9s/HLlyjFz5kzatm3LuIceYssZZ+DefTcu\nsSV1JMtxkSztALUl7FTEiQgQfPK7+eabyViyhHuPO47fLr6YTf36ga4CiYgkJHWnishedu/ezbAu\nXfh/Tz7JofXrc/Irr0CIxsqpO1VEwkxj4nLRSVDk4Hzw5pusuuoq3mvcmL4jR3LEEUf4TqlAVMSJ\nSJhpTFyC8N1Hn8rxU7nt0Yp//iWXcPnatWwtXZp//OMfzJ8/P26xJfkky3GRLO0AtSXsVMSJyH6V\nLl2aUaNG8eijj3LVVVcxbNgwdGVIRMQ/daeKSIGtWLGCZs2acc455zBixAhKlSrlO6V8qTtVRMJM\nY+Jy0UlQJHq2bt3KjAsu4NvNm/nXe+9Rvnx53yntRUWciISZxsQlCN999KkcP5XbHsv4hx9+ONfO\nmEGHrVt5/owz+OTjj+MWW8ItWY6LZGkHqC1hpyJORArNTj6ZY5Yupc0xx7D4wgt56403fKckIpJy\n1J0qIgfvt9/4tV49Zi9bxtYRI2jdrp3vjAB1p4pIuKk7VURi76ijKLNgAelXXcXDvXrxyCOP+M5I\nRCRlqIiLMd999KkcP5XbHtf4hx7KMc88w/T58xk+fDgDBw703nZJTMlyXCRLO0BtCbvivhMQkeRQ\noUIF3n77bS6++GKWLVtGvXr1MEuKHk0RkYSkMXEiElXr16/nkksuoUmTJvTv399LIacxcSISZhoT\nJyJelC1bljlvvcW2p59mQP/+vtMREUlaKuJizHcffSrHT+W2+47/2eLFPFy6NCUHD+bxxx/3lkcs\nmVk5M3vVzLJ95xIWvv8moiVZ2gFqS9h5K+LM7Hgze9rMlkW+pphZgaZ+N7MSZtbXzL4ws0/NbL6Z\n1Y51ziJSQIcdRom33uL2I45gzb33MmnSJN8ZRZWZXQXMByoCherrjBR/oyPnr4/NbKmZ3WdmJWKR\nq4gkLy9j4sysJLAIWAa0jCx+CqgFnOWc23qA7Z8A0oHazrmfzawDMBSo5Zzba/p4jSkR8WTFCnbX\nrEmHnTu59umnady4cVzCxnpMnJnNB64DHgCud84V6AOxmRUDlgBpQD3n3EYzqwG8B4x0zt2RzzY6\nf4mkmEQfE9cGOBPo7pzLds5lA92BSsBN+9vQzCoDHYGBzrmfAZxzY4CVQL+YZi0ihVOpEiVmzGCM\nGYNbt+bjfB7RFVJ1nHOrDmK7KsA/gDHOuY0AzrlM4HXgn9FLT0RSga8irjmwOvdJ0Dm3Hvg88rP9\nyQAMmJNn+RygoZkdFsU8i8x3H30qx0/ltvuO/6fY559PiRdf5LZBg7jiiiv44YcfvOUVLUW4NJYV\n+Z6367QEsPvgMwoH338T0ZIs7QC1Jex8FXHVCa6c5bWK4ArdgbbdA6zJs3wlwbx3ZxQ1uWjKzMxU\n/BSMnerx94rdoAHNOnSgU6dONG3alK1b9ztiImk5574CngE6mVkFADNrADQA7veZWzz4/puIlmRp\nB6gtYeeriDsO2JzP8k3AYWZ2yAG23ZbPJ+FNke/HRiG/qPn1118VPwVjp3r8fcXu2bMn1apV4/rr\nryc7O2Vv6mwDzAKWm9n3wIvALc65p/ymFXu+/yaiJVnaAWpL2Pkq4jRKVyQFmRkjR45k/fr19OuX\nekNYzawUMBc4F6jgnCtPcBXuQTP7r8/cRCR8fBVxPwFH5LP8SGCrc27nAbY93PaeBv7IyPefo5Bf\n1KxatUrxUzB2qsffX+ySJUvywgsvMHLkSF599dX4JZUY2gO1gbudcz8AOOc+Av4D3GpmF/hMLtZ8\n/01ES7K0A9SWsPM1xcgsoIpz7uQ8yz8FNjvnau1n2+7AAKCic25NruWPATcCRzvntuXZRlf+RFJM\nPB67ZWbjKNwUIyOATsAJzrkNuZZfBrwCdHLOjcqzjc5fIimoIOew4vFIJB8vAU+aWQXn3GoAMytL\ncPt9j9wrRpZvyDUGbirQH6gPjM+1an3g9bwFHMTnZC4iKWufRVY+56/1ke8VgA25Vq2Q5+d//HKd\nv0RkH3x1p44DPgX+bWZpkQkwBwIrgBE5K0WewrAWGJ6zLHJ310igp5kdG1mvHXAycG+8GiAiEpFv\nkZXf+Yvg3LcZeMjMSkfW+xtwF/AVkHL9yyJy8LwUcc653cClBFOFfB75Kg00yHMlbTOwkeBEmNut\nwBRgfqQL9gagoXPuk1jnLiJiZo+b2UqCeS2dma00sxV5Hp211/krMjfm+cAvwCIz+5igcHuFYALh\nXfFqg4iEn5cxcRI/ZvYOwUDqP40hlKIzs3LAWIIPEHH/QBS2+GY2CfgXkO6cmxfP2OKX/r8kHlLx\n/S4p/5jM7Hgze9rMlkW+pphZ+TjFrmFmo8zsczP7JPJw6/+a2XHxiJ8nl+YEB3TcK3Uza25m88xs\nsZl9Y2aLzKxVHOKea2azcu3/D8zs2hjEKdAD0M2stJkNixyHS83sNTMr8oTUBYlvZn83syFm9llk\nX3xuZuNyJpmNdfw8659LUMAV+VgsTGwzSzezNyLH4fLIfrizqDnEms9zWLQV9lhJVIl0bi8KMzvF\nzB6O/E0sNrMvI+fqy33nVhQ+3++iwcwqmtkWM/son6+j9rmhcy6pvoCSwMfAcwRFajGCcShfAYfH\nIf4ygq7eQyOvTwS+AL4ESsV5PywHXgaygb/FMXYXgi7yCpHXxYGngadiHLci8BvBDS/FIss6Rdrf\nLMqxct6UxgHZ+1lvFjAv5/8e6EMwoP3EWMcn6KabR3DHNsBRkdcbgLLxaH+u9d8GZkT+Ly6K075v\nAXwPVM+1bCAwO5bHYRSOLa/nsBi0p1DHSqJ+Jcq5PQrtuAX4FqgUeW0ENwtmFfVv02ObvL3fRbEN\nFYE5hd0uGa/EtSF4dFd351y2cy4b6A5UAm6KQ/zsSOztAM65tcAg4FQgnp90OgMLgUVxjImZVSSY\nAuZWF7nz2DmXRTBwe/i+t4yKywnmHxwS+X/HOfckwdM8ov1w8QM+AN3MLgX+H9DbObcjsrgvkAbc\nE+v4BJ9IH3B/PGj9N+ABgqeeXBeH+ACYWQZBIfJCEWMWOLaZHQE8QbDvc4+VHUDiP97K9zks2gp8\nrCS4RDm3F9V3wP3OuRXw+3OA/03wN3qFz8SKwMv7XSJIxiKuObA690nDObee4MpQ8zjEr57zx5FL\nzhO/y8QhPmZ2DEHR1JN93DkXQ60JPtHNzr3QOfeDc25JjGPv9XDxyKTQaUT54eKRE9+BNAd2Ae/m\n2m43wZWJIh2LBYzf1Dk3O8+yqByLBYxPZKD/QKArUToWCxi7GXAMwSfz3Nv+5px7Jxp5xJDvc1hU\nFfRYCQHv5/ZocM79z+39iLec7rof451PUXl+v/MuGYu46sDKfJavIvh0G1ORq055nUZwVaRIg7kL\noTcw0Tn3bZzi5VaL4JPe5WY2JzJ+5D0zax+H2JMJujzuM7PDI1PX3ENQwA2OQ/y8qgNr8zkmVgFl\nYz2WZj/HIgSPfoqHzsBHzrkP4hQvRy1gJ3Cymb0aGb+0xMzujhwXiczrOUzylyDn9qiLjLUcDiwh\n9r0lseDz/S7ayprZRDNbGBmr+LSZVdvfBr4m+42l4whu7c9rE3CYmR3i9v9Yr6gyszSgAzDaOfd1\nHOKdClxNMHGyDydFvh4ArnTOrY0MbH7OzE5wzvWPVWDn3GYzu5hg7M1PwBaCqRwaO+cyYxV3P/Z3\nLAIcS5BnPN1IMCl23it0UWdmRwPdCAqqeDuJ4Pw2jmA85DIzu4hgXN6pBPshUSXUOUzyF+9ze7SZ\n2SnAawTd9DOBDOfcFr9ZFU4CvN9F0x6C3qQhzrmPIkNCHgMWmlk959zi/DZK9E+kByPRLt33Irgi\ncEec4v0bGOCcy+9NIB5KAYcC90bGjOCcewmYBtxjZofGKrCZVSYYE7GSYDD/Xwg+pb1pZi1jFTcs\nzKwtcDrBmKt46AU842k8VCmCbvQhzrllAC6Y1mQU0CEydjNRJdo5TPIX73N7VDnnvnHO/Z2gK3U5\n8LEFE1SHie/3u6hxzn3rnKvugmcpE2nT/wFbCW48yVcyFnE/EQxuz+tIYGucr8K1I7hD7rKcwbAx\njlcXqEowoHuvH8c6fsRmgjehvFe+MoHDCIqIWOlL8P98e86NBM655wg+bY6wP0/EGg/7OxYBfo5X\nImbWkODqaMPI+KpYxzsFaAk8lN+PYx2fP65k5XccGnB2HHI4WAlzDpP8xfvcHkvOuc3OuS4Ej3x7\n3Hc+BZUg73cxFXkf+wy4cF/rJGN36ifkf2n1ZIJHfcWFmbUG7iR4CkW8uswuIbj6sCgYzw/ACZHv\nM81sF9DTORfLR/ssA/7B3h8Q9kS+x/KDw5nAd/m8yS0nGOheMfLvePkEOMfMiucZT3MysC5ex4WZ\nXULwOLuGcez2qQ/sAObkOhaPiXwfbWZbgMfyGWAdLcuAK/FzHBZVQpzDJH+ezu1RY2alct0tn9tn\nQHMzKxG5ASvRJcL7XdSY2ZHA9nz2/R72c75K5BPZwXoJqJB7QlMLHkJdBXgxHglYMKltN+Bi59yG\nyLImZtYxlnGdc/c75/7unDsr54s/PqVcFlkW6wN6euR79TzLqwHbgKUxjL0eODEyViW3CgTTA8Tq\nzqt9dX+9SHCn7O9dFGZWMvI6msfi/iYbvhh4kuD//6vIsnPMrHcs4zvnRjvnTs5zLObE7BBZFo0C\nbl9t399x6IB8x5ckCO/nsBgKdVexr3N7lL1qZvld2akI/BaSAi5R3u+iaSh57j6PvF+cCXy4r42S\nsYgbR/Bp9d9mlha5E20gsILgakRMmdl1BONuxgENzaxV5A+/KcHkkPFmeb7H2nME49Luj3yywMzq\nEByc/WLc9fAYQZdTn5wFZlYfyAAmOed+jVHcfPetc+4Ngq7cvrnGAt5LcLdsNG/w2NcD2BsQFDPP\nAOfnOhavIriqE9P4+1kvmsfivvb9AmAq0NWCRz5hZqcT3NAwOsHnLRuHx3NYjIW2mysBz+0HywEP\nRqbmwAK3AecSFBJhFu/3u2hywN1mdgL8fuPMIIIb4B7c91YJMFNxtL+A4wmeEPAlf8yyXT5OsX8m\nuPyZnedrD8HEo/HaB80IBvhvjMT+FlgRp9hHAyOB1ZH9/zHB1Zd4xG5IMEfd5wTdUpkEA4+LRznO\n45H9uzmyf1cSvMmWyLPe4cCwyLH4OUFRd3o84hNMGbCvY7FIT88oaPsj654b+fmPkXV/iKx7UE+t\nKMS+LwX8J/LzLyJf3Yg8MzqRv3yew2LQlgIfK4n8lSjn9ii0oxbwFMEHhY8ifxfvAC1951aENnl7\nv4tiG6oRXIjIjHx9B7wO1NvfdhbZWERERERCJBm7U0VERESSnoo4ERERkRBSESciIiISQiriRERE\nREJIRZyIiIhICKmIExEREQkhFXEiIiIiIaQiTkRERCSEVMSJiIiIhJCKOBEREZEQUhEnIiIiEkIq\n4kRERERCSEWciIiISAipiBMREREJoeK+ExCJJjM7FLgV2AGcBzwBXAjUBHo75z73mJ6IyD7p/CWF\nZc453zmIRI2ZdQMec85tN7P/AZuA9sDPQAvn3BteExQR2Qedv6SwdCVOkoaZGTDfObc9sqgycKdz\nLgs4yl9mIiL7p/OXHAxdiZOkZGblgZXA0c65rb7zEREpKJ2/pKB0Y4MkFTPLOaYvBpbknADNrI6/\nrEREDkznLyksFXGSNMysBbA28rIZ8FVkeWmglq+8REQOROcvORjqTpWkYWYXAncCC4H3Ce7yehs4\nDBjunNvhMT0RkX3S+UsOhoo4ERERkRBSd6qIiIhICKmIExEREQkhFXEiIiIiIaQiTkRERCSEVMSJ\niIiIhJCKOBEREZEQUhEnIiIiEkIq4kRERERCSEWciIiISAipiBMREREJof8Pe6cegU7kETIAAAAA\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(10,6))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler[:idx_ground_euler], y_euler[:idx_ground_euler], 'k-', label='Euler')\n", + "pyplot.plot(x_rk2[:idx_ground_rk2], y_rk2[:idx_ground_rk2], 'r--', label='RK2')\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_rk2[idx_ground_rk2-1]))\n", + "pyplot.legend();\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler, y_euler, 'k-', label='Euler')\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From far away, the Euler and RK2 methods seem to be producing similar answers. However, if we take a closer look, small differences become evident. Keep in mind that we are solving the same equation and both methods will converge to the same solution as we refine the grid. However, they converge to that solution at different rates: RK2 gets more accurate faster, as you make $\\Delta t$ smaller." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grid-convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we want to do a grid-convergence study with RK2, to see if we indeed observe the expected rate of convergence. It is always an important step in a numerical solution to investigate whether the method is behaving the way we expect it to: this needs to be confirmed experimentally for every new problem we solve and for every new method we apply!\n", + "\n", + "In the code below, a `for`-loop computes the solution on different time grids, with the coarsest and finest grid differing by 100x. We can use the difference between solutions to investigate convergence, as before." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for-loop to compute the solution on different grids\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once those runs are done, we compute the difference between each numerical solution and the fine-grid solution." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# compute diffgrid\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "for i, dt in enumerate(dt_values):\n", + "\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we plot!" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nicaKFSu44YYbWLVqFR9//HHU4UgBmUymza7Dqqy9lhRJb+kkfdpm0qUpfxdffDGTJk3iuOOO449/\n/GPU4VQs6bkLe/aaiEjNNDc3M2XKFMyMa665JupwpEJq6RSR9JaOSByMGDGCX/3qV5x++un86le/\nijocKYFaOiISW4cffji9e/fm6quvjjoUCYGKToql+VmBJEhL/i666CKam5vp27dv1KGEJi25y6cq\nRcfMZlfjviKSTttsU9FEW6kjpeynE2QTt0nu3rWSwOqBmfn48eM1ZVpEpAQtU6YnTJgQfMFPbeKm\niQQiIuWodCLB+8BRwODcayjwMnAHMILspm1H5/77DmAx2U3fpM6luV85CZKav08++YR7772XjRsT\ntcDJpyQ1d6UopaP0L+7+RMsbM5tEdhO3+/NcO93MTia7idvvQopRRFLkrrvu4vzzz+f444/noYce\nijocCZk2cStC3WsitbVmzRoGDhzIkiVLuOeee/j2t78ddUgSQNjP6ewCFJsk0BXYKcB9RSTlbrnl\nFpYsWcLBBx/Mt771rajDkSrQJm4pluZ+5SRIWv7ef/99Jk6cCMA111xDu3axn4tUUNJyV44gk98v\nAR4nu4nbUmAp2WnSPYCewCqgIawARSQdpk6dygcffMBRRx3FMcccE3U4UiWB1l4zs32AnwDHAZ1z\nh1cDTcA4d58bWoQR0piOSO1s2rSJe+65h/32249DDjkk6nCkAsXGdLSJWxF6OFREpHShPBwahJmd\n4e6xXw426S2dpO/pkXTKX3wlPXdRrDJ9Q5XuKyIiMVbKMjiNwM7uPir3vpnia7EZ0NvdO4QVZFSS\n3tIREamGisZ0zOxtYEdgF3dfa2brgafb+MzD3b1ToGjriIqOSPW4O8OHD+dLX/oSF154IZ06xf5X\nhuRUWnR6AB3d/c3c+6Xu3rONr2nzmjhIetFJer9y0sU9fzNnzuS4445jp512YuHChXTtGvuF6UsW\n99y1paIxHXdf1lJwcjqa2VQz+1qRL/t+uUGKSHps2rSJyy+/HIAxY8akquCkXZC11zYB04Hr3P2V\nqkRVJ5Le0hGJyvTp0znjjDPo3bs38+bNU9dawoT6nI6ZLXP3HqFEVudUdETCt379evbdd1+am5u5\n4447OPfcc6MOSUIW9pTpV8ysVxsfeFeA+0qNpXn9pySIa/5WrFhB79692X///TnzzDOjDicScc1d\n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\nzP8H50NbGbioopAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot using the matplotlib function loglog()\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel(r'$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.xlim(1e-4,1)\n", + "pyplot.ylim(1e-4,1)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='--', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking good! The difference relative to our fine-grid solution is decreasing with the mesh size at a faster rate than in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), but *how much faster?* When we computed the observed order of convergence with Euler's method, we got a value close to 1—it's a first-order method. Can you guess what we'll get now with RK2?\n", + "\n", + "To compute the observed order of convergence, we use three grid resolutions that are refined at a constant rate, in this case $r=2$. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 1.983\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " ### call rk2_step() ###\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Probably you're not too surprised to see that the observed order of convergence is close to $2$. Because we used a second-order method! This means that the numerical solution is converging with the grid resolution twice as fast compared with Euler's method in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), or in other words, the error scales as ${\\mathcal O}(\\Delta t^2)$. That is a lot faster! However, we are paying a price here: second-order Runge-Kutta requires more computations per iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How much longer does it take to get the solution with RK2, compared to Euler's method? Run the same solution (same time grid, same parameters), but find a way to *time* the calculation with Python, and compare the runtimes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multi-step methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The screencast *\"Euler's method is a first-order method\"* motivated graphically an idea to get increased accuracy: using intermediate points between $u_{n}$ and $u_{n+1}$ and evaluating the right-hand side of the differential equation at those intermediate points. The idea is to somehow get a better approximation using more data from the function $f(u)$.\n", + "\n", + "Another way to bring more information about $f(u)$ into the numerical solution is to look at time data $t\\lt t_{n}$. For example, we can involve in the calculation of the solution $u_{n+1}$ the known solution at $u_{n-1}$, in addition to $u_{n}$. Schemes that use this idea are called _multi-step methods_.\n", + "\n", + "\n", + "A classical multi-step method achieves second order by applying a _centered difference_ approximation of the derivative $u'$:\n", + "\n", + "$$ u'(t) \\approx \\frac{u_{n+1} - u_{n-1}}{2\\Delta t}.$$\n", + "\n", + "Isolate the future value of the solution $u_{n+1}$ and apply the differential equation $u'=f(u)$, to get the following formula for this method:\n", + "\n", + "$$ u_{n+1} = u_{n-1} + 2\\Delta t \\, f(u_n),$$\n", + "\n", + "This scheme is known as the **leapfrog method**. Notice that it is using the right-hand side of the differential equation, $f(u)$, evaluated at the _midpoint_ between $u_{n-1}$ and $u_{n+1}$, where the time interval between these two solutions is $2\\Delta t$. Why is it called \"leapfrog\"? If you imagine for a moment all of the _even_ indices $n$ of the numerical solution, you notice that these solution values are computed using the slope estimated from _odd_ values $n$, and vice-versa.\n", + "\n", + "Let's define a function that computes the numerical solution using the leapfrog method:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def leapfrog_step(unm1, u, f, dt):\n", + " \"\"\"Returns the solution time-step n+1) using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " unm1 : array of float\n", + " solution at time-step n-1.\n", + " u : array of float\n", + " solution at time-step n.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at time-step n+1.\n", + " \"\"\"\n", + " return unm1 + 2.0*dt*f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But wait ... what will we do at the _initial_ time step, when we don't have information for $u_{n-1}$? This is an issue with all multi-step methods: we say that they are _not self-starting_. In the first time step, we need to use another method to get the first \"kick\"—either Euler's method or 2nd-order Runge Kutta could do: let's use RK2, since it's also second order.\n", + "\n", + "For this calculation, we are going to re-enter the model parameters in the code cell below, so that later on we can experiment here using the leapfrog method and different starting values. At the end of this notebook, we'll give you some other model parameters to try that will create a very interesting situation!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude\n", + "\n", + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# set initial conditions\n", + "u_leapfrog = numpy.empty((N, 4))\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_leapfrog[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "# first step using RK2\n", + "u_leapfrog[1] = rk2_step(u_leapfrog[0], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the required information to loop in time using the leapfrog method. The code cell below calls the leapfrog function for each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for loop to call the function leapfrog_step()\n", + "for n in range(1,N-1):\n", + " \n", + " u_leapfrog[n+1] = leapfrog_step(u_leapfrog[n-1], u_leapfrog[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we extract from the solution array the information about the glider's position in time and find where it reaches the ground." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider position in time\n", + "x_leapfrog = u_leapfrog[:,2]\n", + "y_leapfrog = u_leapfrog[:,3]\n", + "\n", + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_leapfrog = numpy.where(y_leapfrog<0.0)[0]\n", + "\n", + "if len(idx_negative_leapfrog)==0:\n", + " idx_ground_leapfrog = N-1\n", + " print ('The glider has not reached the ground yet!')\n", + "else:\n", + " idx_ground_leapfrog = idx_negative_leapfrog[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the glider's trajectory with both the leapfrog and RK2 methods, we find that the solutions are very close to each other now: we don't see the differences that were apparent when we compared Euler's method and RK2." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nz6bl5ZdTu3btDKbcO/nLlrHoxBMpW7069WbMgAMO8B1JpMTQiVMhFaYeE2WJLxNZKlasmNAJVCXt\ndUlUmLKUZGaGVaoEL7/MotataTtoEPuMHOk71i7t2LGDhfPmwQMPkHPyyaw85xzm3XtvZAvUqP+e\naHwlg4pUEQ8uv/xyAF544QU2bNjgOY1IMZix/003sWr0aCrVqQPAokWLWLp0qedg/2vx55+z9YQT\n2DJhAsycSaUePbjgwgt9xxKR3dDhfhFPmjdvzowZM3jyySd3Fq2SXUry4f5dcc7RqlUrunfvzmWX\nXZaGZImbN28eBx10ENWqVQNg+LXXctTFF3NSs2Zec4mUZDrcL5IFrrzySgAee+wx9EeURMXmzZtp\n06YNPXv2BMDl5/P4gw+yZcuWjGd58sknue+++3Y+7vHooypQRbKIitQMClOPibLEl8ksF1xwAbVr\n12bBggW8//77XrPsibJIoipUqMDdd99NqVKlAPho6FC63HorZQcNgm+/Zfv27Wn7o2zJ4sW82LMn\nDBoEwB133LHL651GfR5pfNkt6uNLlIpUEU/Kli3LFVdcAcCjjz7qOY1IelRq2ZIlw4Zha9bAUUex\nqmlThrVtC+vXF/tr79ixg1defhlmzYKbbuKIM87guJEjWVe5MgC1a9fm3nvvLfb3ERE/1JMq4tH3\n33/PwQcfzLZt21i2bBmHH36470iSBPWkJumnn3iyQwfO3rqVOtdeC927c+ONN9KoUSO6desGwKxZ\nszjooIOoWbMmACtWrKBGjRpUjhWegwcP5oorrqBy5co455hdrhyN69ShTJcucOGFvL9mDc1btKBc\nuXKpzS4iKaGeVJEsccABB9ClSxecczz22GO+44ik13770WfGDA749FPo3h2AadOmkZubu/Mpq889\nFzvrLOjaFS6+mJUnncSmDh3giy8AePPNN/n000+B4M3us1tuYdGbb8K990KTJrQ5/XQVqCIRoSI1\ng8LUY6Is8fnIcs011wDw3HPPsb7QIdCS/rrsSpiySPJycnIoXbr0zscTJkygWaGTmb5o3ZqtffpA\nhw7QqROLjz6anzp02Hk90xtuuGHnXlaAy+++m8Z7cUOMqM8jjS+7RX18iSq956eISDodd9xxtGzZ\nkmnTpjF8+HCuvvpq35FEMqborUhvKXJDgCu6dPmfx+eee27aM4lIOKgnVSQExowZwwUXXMARRxzB\n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\nB0lEQVTo/D9EAVodDt65OwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(11,8))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls='-', lw=2)\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_leapfrog[idx_ground_leapfrog-1]), fontsize=18);\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls=':', lw=2)\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about the observed order of convergence? We'll repeat the process we have used before, with a grid-refinement ratio $r=2$ ... here we go:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 2.186\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " u[1] = rk2_step(u[0], f, dt)\n", + " for n in range(1, N-1):\n", + " u[n+1] = leapfrog_step(u[n-1], u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical evidence that our calculation with the leapfrog method indeed exhibits second-order convergence, i.e., the method is ${\\mathcal O}(\\Delta t^2)$. _The leapfrog method is a second-order method_. Good job!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### But chew on this ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go back to the cell that re-enters the model parameters, just above the leapfrog-method time loop, and change the following: the initial height `y0` to 25, and the final time `T` to 36. Now re-run the leapfrog calculation and the two code cells below that, which extract the glider's position and plot it.\n", + "\n", + "_What is going on?_\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tobies, R. \"Iris Runge: A life at the crossroads of mathematics, science and industry,\" Springer Basel, 1st ed. (2012). [Read on Google books, page 73](http://books.google.com/books?id=EDm0eQqFUQ4C&lpg=PA73&dq=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&pg=PA73#v=onepage&q=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&f=false)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/01_01_Phugoid_Theory.ipynb b/01_phugoid/01_01_Phugoid_Theory.ipynb new file mode 100644 index 0000000..902854f --- /dev/null +++ b/01_phugoid/01_01_Phugoid_Theory.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, C. Cooper, G.F. Forsyth, A. Krishnan." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Motion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome to [**\"Practical Numerical Methods with Python!\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) This course is a collaborative, online, open education project, where we aim to give a foundation in scientific computing. The focus is on numerical solution of problems modeled by ordinary and partial differential equations.\n", + "\n", + "This IPython Notebook introduces the problem we'll be studying in the **first module** of the course: the _phugoid model of glider flight_. We'll start with some background, explaining the physics, and working out the mathematical model. \n", + "\n", + "First, we'll look at an idealized motion where there is no drag, resulting in a simple harmonic motion. We can plot some interesting trajectories that will pique your imagination. In the next notebook, you'll learn to numerically integrate the differential equation using Euler's method. But hang on ... first things first. \n", + "\n", + "The term \"phugoid\" is used in aeronautics to refer to a motion pattern where an aircraft oscillates up and down —nose-up and climb, then nose-down and descend— around an equilibrium trajectory. The aircraft oscillates in altitude, speed and pitch, with only small (neglected) variations in the angle of attack, as it repeatedly exchanges kinetic and potential energy.\n", + "\n", + "A low-amplitude phugoid motion can be just a nuisance, as the aircraft does not exceed the stall angle of attack and nothing bad happens. But the mode can also be unstable leading to a stall or even a loop!\n", + "\n", + "Look at this video showing a Cessna single-engine airplane in phugoid motion:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAaAAACAwEBAAAAAAAAAAAAAAACAwABBAUG/8QAQBAAAgIBAwEDCAgFBAIDAQEBAQIAAxEE\nEiExE0FRBRQiMmFxgZEjQlJTcpKhsRUzYsHRBkOC4SRjovDxNMIW/8QAGQEBAQEBAQEAAAAAAAAA\nAAAAAAECAwQF/8QAKBEBAAIBBAICAQQDAQAAAAAAAAERAgMSMVETIUFhBCJSgaEyYnEU/9oADAMB\nAAIRAxEAPwBlFdfYp9GnqjuEcKqvu0/KJKax2Nf4R+0PYRPpxEU8coKaj/tp8oa01/dp8oPIlhyI\nqCzeyr+6r/KJfY0/cp+UQFsEMWCZ2ra+yp+7T8oliuof7SflkyDB57o2wWaqUfdp+UQxXQf9tPyi\nZt57xJvPuk2ltfYUn/bT8ok7Cn7pPyiZO1Yd8IXtG0to7CodKk/KJDVWf9tPyiKF5MMOTJtLEtVQ\n/wBqv8olGmvORUn5RJuMm4xULYjXSRg1Jn8IgCmjPNSflEvcZecxUFgfT6furT8ok7Cnb/Lr/KIR\nJlFj4RSWUdPVn+Un5RJ2FQ/20/KIRfxEE2CWi1dnV91X+USdjT92n5RL3r3S+090UWX2NP3SflEr\nsqvu0/KI4FD1/SUwTuYy1BZRqq+6T8ogNp6T/tp+URpU9xEEhx3RUJZLaav7tPyiLOnr+7X5TTk+\nEHM0WzHTp92v5RKFNf3a/lmk+6TEIQKqe+tPkIxaqs/yk+Qh9lmEtWIqF9qFFP3afljFop+7T8ol\npXHKoHSZmlL83p7qk/KJR09XdUn5RNG2Q5EgStNXfWn5RD83p+6T8olk5lB8SUWIU1D/AGk/KIa1\n1fdJ+USltHfGKymSltBVV90n5RC7Kr7pPyiECJczRYOwp+6T8ok83q+6T8ohyRRYOwq+6T8ok7Cn\n7pPyiMzKigs0VfdJ+USjRT90n5RG5lEiKCeyo+6T8oldjV90n5RGnEA++WiwGqr7qv8AKJR09P3a\n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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('ysdU4mnRYdM')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That doesn't look too good! What's happening? \n", + "\n", + "It can get a lot worse when an aircraft enters one of these modes that is unstable. For example, one of [NASA's Helios Solar Powered Aircraft](http://www.nasa.gov/centers/dryden/history/pastprojects/Helios/) prototype broke up in mid air due to extreme phugoid oscillations!\n", + "\n", + "Helios was a proof-of-concept solar electric-powered flying wing that broke the world altitude record for a non-rocket-powered aircraft in August 2001. But in June 26, 2003, it broke something else. The aircraft entered phugoid motion after encountering turbulence near the Hawaiian Island of Kauai. The high speed in the oscillatory movement exceeded the design limits, and it ended up wrecked in the Pacific Ocean. Luckily, the Helios was remotely operated, and nobody got hurt." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The physics of phugoids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The phugoid oscillation has the aircraft pitching up and down, as it decelerates and accelerates. The trajectory might look like a sinusoid, as in the figure below. The assumption is that the forward velocity of the aircraft, $v$, varies in such a way that the angle of attack remains (nearly) constant, which means that we can assume a constant lift coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/oscillatory_trajectory.png)\n", + "#### Figure 1. Trajectory of an aircraft in phugoid motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the descending portion of the trajectory, the aircraft's velocity increases as it proceeds from a peak to the minimum height—gaining kinetic energy at the expense of potential energy. The contrary happens in the upward segment, as its velocity decreases there.\n", + "\n", + "We measure the pitch angle (between the aircraft's longitudinal axis and the horizontal) as positive when the aircraft's nose is pointing up. In the portion of the trajectory below the center-line, where it curves upwards, the pitch angle $\\theta$ is increasing: $\\dot{\\theta}>0$. And where the trajectory curves down, the pitch angle is decreasing: $\\dot{\\theta}<0$, as shown in the figure.\n", + "\n", + "Let's remind ourselves of the forces affecting an aircraft in a downward glide. Look at the figure below: we show the flight path, the forces on the glider (no thrust), and the _glide angle_ or flight path angle, $\\gamma$, between the flight path and the horizontal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces.png)\n", + "#### Figure 2. Forces on a glider." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The force of lift, $L$ —created by the airflow around the wings— is perpendicular to the trajectory, and the force of drag, $D$, is parallel to the trajectory. Both forces are expressed in terms of coefficients of lift and drag, $C_L$ and $C_D$, respectively, that depend on the wing design and _angle of attack_—the angle between the wing chord and the flight path.\n", + "\n", + "If you are not familiar with airplane aerodynamics, you might be getting confused with some terms here ... and all those angles! But be patient and look things up, if you need to. We're giving you a quick summary here.\n", + "\n", + "Lift and drag are proportional to a surface area, $S$, and the dynamic pressure: $1/2 \\rho v^2$, where $\\rho$ is the density of air, and $v$ the forward velocity of the aircraft. The equations for lift and drag are:\n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "If the glider were in equilibrium, the forces would balance each other. We can equate the forces in the directions perpendicular and parallel to the trajectory, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "L = W \\cos \\gamma \\quad \\text{and} \\quad D = W \\sin \\gamma\n", + "\\end{equation}$$\n", + "\n", + "where $W$ repesents the weight of the glider.\n", + "\n", + "In the figure, we've drawn the angle $\\gamma$ as the _glide angle_, formed between the direction of motion and the horizontal. We are not bothered with the _sign_ of the angle, because we draw a free-body diagram and take the direction of the forces into account in writing our balance equations. But later on, we will need to be careful with the sign of the angles. It can cause you a real headache to keep this straight, so be patient!\n", + "\n", + "It looks like we've set this up to do a little bit of mathematics. Are you ready?\n", + "\n", + "But before, a short glimpse of the history." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lanchester's Aerodonetics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Phugoid theory\" was first described by the British engineer Frederick W. Lanchester in _\"Aerodonetics\"_ (1909). This book is so old that it is now in the public domain, so you can actually download [from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&dq=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&pg=PA37#v=onepage&q=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&f=false) a PDF file of a scan, or read it online. \n", + "\n", + "Lanchester defines phugoid theory as the study of longitudinal stability of a flying machine (aerodone). He first considered the simplification where drag and moment of inertia are neglected. Then he included these effects, obtaining an equation of stability. In addition to describing many experiments by himself and others, Lanchester also reports on _\"numerical work ... done by the aid of an ordinary 25-cm slide rule.\"_ Go figure!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ideal case of zero drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section, we follow the derivation given by Milne-Thompson (1966), which we find a little bit easier than that of the original in \"Aerodonetics\"!\n", + "\n", + "An aircraft flying in a steady, straight horizontal flight has a lift equal to its weight. The velocity in this condition is sometimes called _trim velocity_ (\"trim\" is what pilots do to set the controls to just stay in a steady flight). Let's use $v_t$ for the trim velocity, and from $L=W$ deduce that:\n", + "\n", + "$$\\begin{equation}\n", + "W = C_L S \\times\\frac{1}{2} \\rho v_t^2\n", + "\\end{equation}$$\n", + "\n", + "The weight $W$ is constant for the aircraft, but the lift at any other flight condition depends on the flight speed, $v$. We can use the expression for the weight in terms of $v_t$ to obtain the ratio $L/W$ at any other flight velocity, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}= \\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "Imagine that the aircraft experienced a little upset, a wind gust, and it finds itself off the \"trim\" level, in a curved path with an instantaneous angle $\\theta$. In the sketch below, we exaggerate the curved trajectory of flight to help you visualize what we'll do next. The angle $\\theta$ (using the same name as Milne-Thompson) is between the _trajectory_ and the horizontal, positive up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### Figure 3. Curved trajectory of the aircraft going up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can form a free body diagram to determine the balance of forces. \n", + "\n", + "\n", + "\n", + "#### Figure 4. Free body diagram of the aircraft trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the free body diagram, we can see that\n", + "\n", + "\\begin{equation}\n", + "\\vec{L} + \\vec{W} = m\\vec{a} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "where $\\frac{v^2}{R}$ is the centripetal acceleration and $R$ is the radius of curvature of the trajectory.\n", + "If we decompose the lift and weight into their normal and tangential components we get\n", + "\n", + "\\begin{equation}\n", + "L\\hat{n} + W_n\\hat{n} + W_t\\hat{t} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "The component of the weight in the normal direction ($W_n$) is\n", + "\n", + "\\begin{equation}\n", + "W_n = -W \\cos \\theta\n", + "\\end{equation}\n", + "\n", + "If we then consider that all of the components in $\\hat{n}$ must balance out, we arrive at\n", + "\n", + "\\begin{equation}\n", + "L - W \\cos \\theta = \\frac{mv^2}{R}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as\n", + "\n", + "$$\\begin{equation}\n", + "L- W \\cos \\theta = \\frac{W}{g} \\frac{v^2}{R}\n", + "\\end{equation}$$\n", + "\n", + "where $g$ is the acceleration due to gravity. Rearrange this by dividing the equation by the weight, and use the expression we found for $L/W$, above. The following equation results:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{v^2}{v_t^2}-\\cos \\theta = \\frac{v^2}{g R}\n", + "\\end{equation}$$\n", + "\n", + "Recall that we simplified the problem assuming that there is no friction, which means that the total energy is constant (the lift does no work). If $z$ represents the depth below a reference horizontal line, the energy per unit mass is (kinetic plus potential energy):\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{2}v^2-g z = \\text{constant}\n", + "\\end{equation}$$\n", + "\n", + "To get rid of that pesky constant, we can choose the reference horizontal line at the level that makes the constant energy equal to zero, so $v^2 = 2 g z$. That helps us re-write the phugoid equation in terms of $z$ as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z}{z_t}-\\cos \\theta = \\frac{2z}{R}\n", + "\\end{equation}$$\n", + "\n", + "Let $ds$ represent a small arc-length of the trajectory. We can write \n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} \\quad \\text{and}\\quad \\sin\\theta = -\\frac{dz}{ds}\n", + "\\end{equation}$$\n", + "\n", + "Employing the chain rule of calculus,\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} = \\frac{dz}{ds}\\frac{d\\theta}{dz} = -\\sin \\theta\\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "Multiply the phugoid equation by $\\frac{1}{2\\sqrt{z}}$ to get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} - \\frac{\\cos\\theta}{2\\sqrt{z}} = \\frac{\\sqrt{z}}{R}\n", + "\\end{equation}$$\n", + "\n", + "Substituting for $1/R$ on the right hand side and bringing the cosine term over to the right, we get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} = \\frac{\\cos \\theta}{2 \\sqrt{z}} - \\sqrt{z} \\sin \\theta \\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "The right-hand-side is an exact derivative! We can rewrite it as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d}{dz} \\left(\\sqrt{z}\\cos\\theta \\right) = \\frac{\\sqrt{z}}{2z_t}\n", + "\\end{equation}$$\n", + "\n", + "Integrating this equation, we add an arbitrary constant, chosen as $C\\sqrt{z_t}$ which (after dividing through by $\\sqrt{z}$) gives:\n", + "\n", + "$$\\begin{equation}\n", + "\\cos \\theta = \\frac{1}{3}\\frac{z}{z_t} + C\\sqrt{\\frac{z_t}{z}}\n", + "\\end{equation}$$\n", + "\n", + "Taking the derivative of both sides of equation (15) and applying the relations from equation (10) yields:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z_t}{R} = \\frac{1}{3} - \\frac{C}{2}\\sqrt{\\frac{z_t^3}{z^3}}\n", + "\\end{equation}$$\n", + "\n", + "Make sure you have followed the derivation, and perhaps write it out on paper!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Phugoid Curves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equation (15) is non-linear, which usually means we are hard-pressed to write a clean expression for the variable of interest, $z$. In fact, Lanchester himself said that he was unable to _\"reduce this expression to a form suitable for co-ordinate plotting.\"_ If the great polymath couldn't do it, we can't either!\n", + "\n", + "But Lanchester _was_ able to plot a suitable approximation of the phugoid flight path using what he called the \"trammel\" method. If you're interested in seeing how he did it, his explanation begins on page [48 of Aerodonetics](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PA49&lpg=PA48&dq=aerodonetics+the+use+of+the+trammel&source=bl&ots=lB6EVKYQuT&sig=aVE2kiDWZoWftaWczMIrcYftMOs&hl=en&sa=X&ei=gTD_U82fGYjzgwT3moGwCQ&ved=0CCAQ6AEwAA#v=onepage&q=aerodonetics%20the%20use%20of%20the%20trammel&f=false). It's a trip.\n", + "\n", + "Lanchester used Equations (15) and (16) to solve for the constant $C$ and the radius of curvature $R$ and then iteratively plotted small arcs of the phugoid path. By hand.\n", + "\n", + "We wrote a neat little code that duplicates the manual trammel method, but it might be a bit much for you to absorb in the first lesson. If you want to look it over, you are more than welcome to. If you are just starting with Python, skip it for the moment and we'll return to it at the end of this module. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting the flight path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned, we wrote a Python code to reproduce programmatically what Lanchester did graphically. Here's a neat feature of IPython Notebooks: you can run external programs with the magical keyword ... wait for it ... `run`. And the jargon of IPython _is_ to call this \"magic.\" In fact, there are a bunch of [magic functions](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) that you will learn about. They will make you a happy camper.\n", + "\n", + "Let's do it:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%run phugoid.py\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This code cell loaded our simulated-trammel code, `phugoid.py`. The code defined a function for you in the background, called `plot_flight_path`, taking three inputs: $z_t$, $z$ and $\\theta$. \n", + "\n", + "Look again at Equation (15), where we take the positive square root. There are several possibilities, depending on the value that the constant $C$ takes. \n", + "\n", + "* There are no physical solutions for $C>2/3$, because it would result in $\\cos\\theta>1$. \n", + "\n", + "* If $C=2/3$, then the solution is a horizontal straight line, because $\\cos\\theta=1$, $\\theta=0$ and $R=\\infty$.\n", + "\n", + "* Any value of $C$ for which $0 < C < \\frac{2}{3}$ will produce \"trochoidal\"-like paths. What does this look like? Let's use our custom function `plot_flight_path` to find out!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n5MgRihQpQt++fQE4fPgw+fLlo1SpUpw8eTLV19+1axfFihULPC5WrBixsbFZ10G/zPQzNefrf0oy\n2tfBgwczdOhQALZu3UpERESq22amn+mtL7XtixcvniM/0wtR4BMRkWxlluFzxf7JuT/a6bV69WqG\nDx9OxYoVyZcvH506daJHjx5/2q5atWqMGDEiQ6+xf/9+Nm7cyJQpUwBo27Ytbdq0oXr16syYMYP7\n77+fCRMmnHcfR44c4aKLLgo8joyM5Pfff0/T66e1j5C5fqbmfP1PSUb6unfvXr799lu+++471qxZ\nw6RJk3j++edT3T4z/UxvfefbPqM/06ykKV0REfG8Zs2a8dVXX9GoUSMKFChAjx49eP3119m/f3+W\nvUaRIkVo0KBB4HHlypWJjo7m22+/5aqrrkrzPoJD7R9//EGJEiXS9L3J+xgVFcXIkSMZP3483333\nXfo6kwGp9f9826e3r4sWLaJr16488MAD3HXXXezZs4cOHTpkSz/TW19q22fmZ5qVNMInIiLZKqOj\nclnt5ZdfZv/+/bz99tuAbzqwbNmySbYJngIMlpYpwHr16rFs2bLA43z58pGQkMC3337LqVOnmDt3\nLsuXL+f06dPMnj07xf1cccUVrFmzJvD48OHDNGnSJEN9fP3112nfvj1NmjShT58+fPrpp1nSz9Sk\n1v/UZKSvO3fupE6dOoBv5Wvnzp355JNPsqWf6a0vte2LFSuWqZ9plsnMio/cfEMrykREsky4/059\n+eWX3bPPPuucc27jxo1u6dKl7oYbbnArVqzIstc4ffq0a9GiReBxq1at3LZt25JsM3z48CSrdH/6\n6SeXmJgYeHzy5EnXoEGDwOOGDRu6/fv3O+eci42NTbJtcsn7+PDDD7tff/3VOefcDTfckImepWz8\n+PGub9++gcfn63/yfjqXsb6OHTvWjR071jnnXOfOnd2OHTvcI488ki39PF996enP+faTktT+L5HJ\nVbrmwuSTV04zM5dX+y4iktVSu+B7OPjPf/7Db7/9RtGiRRk2bBjXXHMNd911F59//jmDBg3K0tea\nP38+y5cvxzlH7dq1ueOOOwLPTZs2jREjRmBmDB06lJtvvpkmTZowbtw4GjduHNhu0qRJbN++Hecc\n1apVC+yjTp06vPXWW1x//fVp6uO+fft45plnqFChAp07d2bOnDlZ1s933nmHqVOnsnPnTvr27cuT\nTz5JkSJFUu1/Sv3MSF+PHz/O888/T4MGDahfvz4tWrTg4Ycf5tlnn82WfqZWX3r7k1p7SlL7v+Rv\nz/ABsQp8IiKSaeEc+FIyefJkqlSpQuXKlbnssstCXU6aJCYm8s0331zw1C7nvP3227Rt25Y6derQ\nt29fPvvss2yuMOukp6+5uZ8pUeDLYgp8IiJZJ7cFvlmzZhEXF0ezZs3Oe664cDJ16lS6devGxRdf\nnKbtDx8+zMcff0yxYsWoX78+LVu2zOYKs056+pqb+5kSBb4spsAnIpJ1clvgy41OnjzJJZdcEuoy\nckRe6mtyCnxZTIFPRCTrKPCJZI3sCnw6D5+IiIiIxynwiYiIiHicAp+IiIiIxynwiYiIiHicAp+I\niIiIx+lauiIikmlVqlT50/VKRST9suu8kDoti4iIiEiY02lZREREROS8FPhEREREPE6BT0RERMTj\nFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RE\nRMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6B\nT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjwj7wmdk4\nM9tvZhuC2oqbWbSZbTGz+WZWNOi5oWYWa2abzKxDaKoWERERCR9hH/iAfwIdk7UNARY652oBi4Ch\nAGZWF+gF1AFuAN4zM8vBWkVERETCTtgHPufcMuBIsubuwAT//QlAD//9G4Epzrl459x2IBZonhN1\nioiIiISrsA98qSjjnNsP4JzbB5Txt1cEdgZtt9vfJiIiIpJn5dbAl5wLdQEiIiIi4Sp/qAvIoP1m\nVtY5t9/MygEH/O27gcuCtqvkb0vR8OHDA/ejoqKIiorK+kpFRERE0ikmJoaYmJgs2585F/6DY2ZW\nFfjSOdfA/3gk8JtzbqSZDQaKO+eG+BdtfApchW8qdwFQw6XQSTNLqVlEREQk7JgZzrkML0QN+xE+\nM5sMRAElzexXYBjwCjDNzO4FduBbmYtz7kczmwr8CMQBDynViYiISF6XK0b4soNG+ERERCS3yOwI\nn1cWbYiIiIhIKhT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9E\nRETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxO\ngU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERE\nRDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4zwZ+Mysk5ltNrOtZjY41PWIiIiIhJI550JdQ5Yys3zAVuBaYA+wGrjVObc52XbOa30XERERbzIz\nnHOW0e/34ghfcyDWObfDORcHTAG6h7gmERERkZDxYuCrCOwMerzL3yYiIiKSJ3kx8ImIiIhIkPyh\nLiAb7AYqBz2u5G/7k+HDhwfuR0VFERUVlZ11iYiIiKRJTEwMMTExWbY/Ly7aiAC24Fu0sRf4FrjN\nObcp2XZatCEiIiK5QmYXbXhuhM85l2BmjwDR+KasxyUPeyIiIiJ5iedG+NJKI3wiIiKSW+i0LCIi\nIiJyXgp8IiIiIh6nwCciIiLicQp8IiIiIh7nuVW66ZGYmEi+fMq8IuI9Z86c4ddff2Xnzp3s27eP\ns2fPEh8fT6FChShdujTly5enZs2aREZGhrpUEckBeTrwRUREUKJECa644gqqV69O06ZNadWqFU2b\nNtUvQRHJVU6dOsXXX3/N/PnzWbVqFevXrycuLu6835M/f37q1KlDy5Yt6dixI9dccw3FihXLoYpF\nJCfl6dOypPZc4cKF6dy5Mz179qR79+5cfPHFOVmaiEiaJCQksGDBAsaOHctXX33F6dOnA8+ZGZUr\nV6Zy5cpUqFCBiy66iIiICE6ePMmBAwfYtWsX27ZtI/hvQIECBejSpQt33nknN954IwUKFAhFt0Qk\nBZk9LUueDnzx8fEcOnSIn376ic2bN7Ny5UqWLVvGpk3/O09z8eLFufvuu3nwwQepU6dOCCsWEfE5\nfvw477//Pu+++y47d+4MtDdr1oyuXbvStm1bmjZtyqWXXnre/Zw8eZINGzawePFi5s+fz7Jly0hM\nTASgUqVKDBgwgPvvv5+iRYtma39E5MIU+DLofCde/uWXX5g1axaffvopa9asCbR3796d559/nqZN\nm+ZUmSIiAceOHeP111/nzTff5OjRowBUq1aNfv360adPHypWrJip/e/du5fPPvuMsWPHBj74FilS\nhIEDB/LEE09QuHDhTPdBRDJGgS+D0nqljbVr1/LBBx8wceLEwHRJ165defXVVzXiJyI5Ij4+nrFj\nx/K3v/2NgwcPAtC2bVueeeYZOnTokOWLzxITE5k3bx6vvfZa4OLtZcuW5cUXX6Rfv35ERERk6euJ\nyIUp8GVQei+ttm/fPkaPHs17773HqVOniIiI4OGHH2bYsGGUKFEiGysVkbxs8eLFPProo2zcuBHw\nBb2///3vtG3bNkdePyYmhkGDBrF69WoAmjdvzgcffECjRo1y5PVFxEeBL4Myei3dAwcO8PzzzzN2\n7FgSExMpUaIE//jHP7j77rsxy/DPQUQkiaNHjzJo0CA++ugjAC6//HJee+01brrpphz/XeOcY+rU\nqTz55JPs2bOHiIgInnjiCV588UUtahPJIQp8GZTRwHfO+vXreeKJJ1i8eDEAHTt25IMPPqBKlSpZ\nVaKI5FGzZ8+mf//+7Nmzh8jISJ577jkGDhzIRRddFNK6jh8/zvPPP88777xDYmIidevWZdKkSTRu\n3DikdYnkBQp8GZTZwAe+T70TJ07kiSee4MiRIxQuXJhXX32Vv/71rxrtE5F0+/3333n00UcZP348\nAC1atGDcuHHUrVs3tIUls3r1au6++242b95MgQIFePHFFxk4cKCO7RPJRgp8GZQVge+cffv28cgj\njzB9+nQAunXrxscff0ypUqWyZP8i4n1r1qzh9ttvJzY2losuuogRI0bw6KOPhm2IOnXqFIMHD+ad\nd94BICoqis8++4xy5cqFuDIRb1Lgy6CsDHznTJ06lQcffJCjR49Svnx5Jk6cyHXXXZelryEi3pKY\nmMjo0aN59tlniYuLo379+nz22WfUr18/1KWlybx58+jbty/79++nfPnyfP755zm2oEQkL8ls4NOF\nZLNQr169WL9+PW3btmXv3r1cf/31DB48mPj4+FCXJiJh6Pjx49x0000MGjSIuLg4Hn30Ub799ttc\n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\n9dVXqf4eVOBT4Atrq1atcj179nRmluSP++zZs11CQkKoy5MckpiY6ObOnZvkQ4CZuW7durmlS5eG\nujyRTImPj3eTJ092derUCby/K1eu7N566y134sSJUJcnYeTIkSPu73//uytdunTgvVK/fn03c+bM\nC37gVeBT4MsVfvrpJzdgwABXuHDhJFfuGDVqlM5m72GHDx92r7/+epIrYxQqVMg99NBDujqGeE58\nfLybMmWKq1u3buD9Xrx4cffMM8+4PXv2hLo8CaHdu3e7gQMHBhZjAK5p06Zu2rRpaR78UOBT4MtV\njh496kaNGuUqV66cZLr31ltv1ZSeRyQmJrqlS5e6O++8M8m0bYUKFdyIESO0kEc8LyEhwU2fPt21\natUqye+5e+65x/3www+hLk9y0MqVK92dd97pIiMjA++Fa6+91i1YsCDdf+8yG/jC/jx82cXMXF7t\neziIj49nzpw5fPjhh8yZM+dcCKdGjRr069eP22+/ncsuuyzEVUp67NmzhylTpjBu3Dh+/PFHAMyM\nDh068MADD9CtWzcKFCgQ4ipFctZ//vMfRo8ezcyZMwO/59q1a0f//v3p2bMnkZGRIa5QstqZM2f4\n/PPPeeedd1i92ne113z58tGzZ0+GDBnClVdemaH9mhkuE+fhU+CTkPv1118ZN24c48aNC1yqzcxo\n164dd9xxBzfffDPFihULcZWSkuPHjzNjxgw+/fRTvv7668AftHLlynHvvfdy3333cfnll4e4SpHQ\n27ZtG2+88Qbjx4/n5MmTAJQpU4Z+/frxwAMPULVq1dAWKJkWGxvLP//5T8aOHcvBgwcBKFGiBPfd\ndx/9+/fP9M9YgS+DFPjCT3x8PHPnzuWTTz5h9uzZnDlzBoDIyEi6du1K7969ueGGGyhSpEiIK83b\nTp48ybx585g6dSqzZ88OXPYnMjKSLl26cOedd2o0TyQVx48f59NPP+X999/nhx9+AP43Et6nTx+6\nd+9OoUKFQlylpNXvv//OtGnT+Pjjj1m2bFmgvVGjRjz66KPcdtttXHzxxVnyWgp8GaTAF96OHTsW\nGDlatGhRYOQoMjKS6667jp49e9KtWzfKli0b4krzhkOHDvHll1/yxRdfEB0dneTajldffTV33nkn\nN998M8WLFw9hlSK5h3OO//znP4wZM4apU6dy9uxZAIoUKcLNN9/MXXfdRbt27ciXL6SXvJcUJCQk\n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\nKVasGMWKFaNo0aIUK1aMMmXKUL58eSpUqEDx4sU9H+guRIEvgxT4REREJLfIbODTsj0RERERj1Pg\nExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERER\nj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4R\nERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4\nBT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExER\nEfE4BT4RERERjwvbwGdmr5rZJjP73symm9mlQc8NNbNY//MdgtqbmNkGM9tqZm+EpnIRERGR8BK2\ngQ+IBuo55xoBscBQADOrC/QC6gA3AO+Zmfm/532gn3OuJlDTzDrmfNkiIiIi4SVsA59zbqFzLtH/\ncCVQyX//RmCKcy7eObcdXxhsbmblgCLOudX+7SYCPXKyZhEREZFwFLaBL5l7gTn++xWBnUHP7fa3\nVQR2BbXv8reJiIiI5Gn5Q/niZrYAKBvcBDjgWefcl/5tngXinHOfhaBEERERkVwvpIHPOXf9+Z43\ns75AZ+CaoObdwGVBjyv521JrT9Xw4cMD96OiooiKirpw0SIiIiLZLCYmhpiYmCzbnznnsmxnWcnM\nOgGjgaudc4eD2usCnwJX4ZuyXQDUcM45M1sJPAasBr4C3nLOzUtl/y5c+y4iIiISzMxwztmFt0xZ\nSEf4LuBtIBJY4F+Eu9I595Bz7kczmwr8CMQBDwUlt4eB8cBFwJzUwp6IiIhIXhK2I3zZTSN8IiIi\nkltkdoQvt6zSFREREZEMUuATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER\n8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+AT\nERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGP\nU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPC9vAZ2Yvmtl6M1tnZvPMrFzQc0PNLNbMNplZh6D2Jma2wcy2mtkboalcREREJLyYcy7U\nNaTIzAo75373338UqOuc629mdYFPgWZAJWAhUMM558xsFfCIc261mc0B3nTOzU9l/y5c+y4iIiIS\nzMxwzllGvz9sR/jOhT2/S4BE//0bgSnOuXjn3HYgFmjuHwEs4pxb7d9uItAjp+oVERERCVf5Q13A\n+ZjZS8DdwFGgvb+5IrAiaLPd/rZ4YFdQ+y5/u4iIiEieFtIRPjNb4D/m7tztB//XbgDOueecc5Xx\nTeE+GspaRURERHKrkI7wOeeuT+Omk4GvgOH4RvQuC3qukr8ttfZUDR8+PHA/KiqKqKioNJYjIiIi\nkn1iYmKIiYnJsv2F86KN6s65bf77jwJtnXO9ghZtXIVvynYB/1u0sRJ4DFiNLyC+5Zybl8r+tWhD\nREREcoXMLtoI52P4XjGzmvgWa+wA/grgnPvRzKYCPwJxwENBye1hYDxwETAntbAnIiIikpeE7Qhf\ndtMIn4iIiOQWnj0ti4iIiIhkDQU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T\n4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+ERER\nEY9T4BMRERHxOAU+EREREY9T4BMRERHxOAW+PCYmJibUJYSE+p23qN95i/qdt+TVfmeWAl8ek1f/\no6jfeYv6nbeo33lLXu13ZinwiYiIiHicAp+IiIiIx5lzLtQ1hISZ5c2Oi4iISK7knLOMfm+eDXwi\nIiIieYWmdEVEREQ8ToFPRERExOPyXOAzs05mttnMtprZ4FDXk5XMbJyZ7TezDUFtxc0s2sy2mNl8\nMysa9NxQM4s1s01m1iE0VWeemVUys0VmttHMfjCzx/ztnu67mRU0s1Vmts7f72H+dk/3+xwzy2dm\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#zt = 64, z = 16, theta=0\n", + "plot_flight_path(64, 16, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cool! Note that the plot title tells us what the calculated value of $C$ was for our input conditions. We have a value of $C$ between $0$ and $\\frac{2}{3}$ and our path is trochoidal, like we announced it would be.\n", + "\n", + "* For negative values of $C$, the resultant flight path consists of a series of loops. Let's try it out!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUqZMGcLCwrjpppvo0KHDX9arWLEigwYNytZ77Nu3j/Xr1zNlyhQAWrRoQfPmzalcuTKffvop999/\nP2PHjj3nNo4cOUKBAgWSP4+KiiI2NjZT75/ZfYTz28/0nGv/05Kdfd2zZw/Lli1j5cqVrFixggkT\nJvD888+nu34w9nPy5MnMmDGDN998M9vbyOz3Pzs0tSoiInleo0aN+O9//0u9evWIjIykQ4cOvPXW\nW+zbty9o7xEdHU3t2rWTPy9XrhxfffUVy5Yto3HjxpneRsqyGhcXR4kSJTL12tT72LJlS4YMGcKY\nMWOSj0PLSent/7nWz+q+zps3j/bt29OrVy+6du3K7t27adWqVY7uZ6dOnfjggw+46aabsnUbuqx8\n/7NDI3IiIpKjQuXWXa+99hr79u1j2LBhgG9a7pJLLvnTOimn4lLKzFRczZo1+e6775I/DwsLIzEx\nkWXLlnHq1CnmzJnD4sWLOX36NJ9//nma26lUqRIrVqxI/vzQoUM0aNAgW/v41ltvcd1119GgQQO6\nd+/OxIkTg7Kf6Ulv/9OTnX3dtWsX1atXB3xnvLZt25bx48fnyH5+8cUXvPrqqyxevJjo6GguueQS\nPvnkkwzPxE1t6dKlxMXFZer7ny3W2nz58O26iIgEQ6j/m/raa6/Z5557zlpr7fr16+2iRYtsmzZt\n7Pfffx+09zh9+rRt0qRJ8ufNmjWzv/7665/WGThwoH3ppZeSP9+yZYtNSkpK/vzkyZO2du3ayZ/X\nrVvX7tu3z1pr7ebNm/+0bmqp97FPnz52586d1lpr27Rpcx57lrYxY8bYHj16JH9+rv1PvZ/WZm9f\nR48ebUePHm2ttbZt27Z2x44dtm/fvjmyn3PmzEn+eiYlJdmyZcvar776Kt39CUj9dUkp9fc/Len9\nXfIv/0ufMTZEflPKbcYYm1/3PSNnz55l8+bN7Nixg507d7J3715OnDjBmTNnKF26dPJBpiIiAend\n6DsULFmyhMOHD1OsWDFefPFFrr/+erp27crUqVN56qmngvpeX375JYsXL8ZaS7Vq1ejSpUvyc9Om\nTWPQoEEYY+jfvz8dO3akQYMGfPDBB9SvXz95vQkTJrB9+3astVSsWDF5G9WrV+edd97hxhtvzNQ+\n7t27l2effZbLLruMtm3b8sUXXwRtP999910+/vhjdu3aRY8ePejXrx/R0dHp7n9a+5mdfT1+/DjP\nP/88tWvXplatWjRp0oQ+ffrw3HPP5ch+jhw5koSEBHbs2EGVKlV44IEHzrk/6X1dIO3vf1rS+7vk\nX/6XA05V5ITjx4/z7bffMnfuXJYtW8batWuJj49Pc93atWuzdu3aXE4oIqEulItcWiZNmkT58uUp\nV64cZcuWdR0nU5KSkliwYEGmL2ExbNgwWrRoQfXq1enRoweTJ0/O4YTBk5V99fJ+pkVFLpPye5E7\nfvw4M2bMYNKkScybN4+EhIQ/PV+hQgUqVapEuXLlKF26NEWLFuWCCy6gVKlSdOrUyVFqEQlVXity\nn332GWfPnqVRo0bnvNZZKPn444+5+eabKViwYKbWP3ToEB9++CHFixenVq1aNG3aNIcTBk9W9tXL\n+5kWFblMyq9FbsOGDbzzzjuMGzeOuLg4AMLDw2nSpAmtWrWiRYsW1K9fP0euki0ieZfXipwXnTx5\nksKFC7uOkSvy076mpiKXSfmtyK1evZoXXniB2bNnJy9r0aIFXbp0oWPHjiF3+xcR8RYVOZHgyGqR\n0+VH8rjt27fz5JNPJt/CpFChQnTv3p2+fftSo0YNx+lERETkfKjI5VHx8fEMHjyYwYMHc/r0aQoU\nKECfPn146qmnKFWqlOt4IiIiEgQqcnnQmjVr6Nq1K+vWrQOgc+fOvP7665QpU8ZxMhEREQkm3aIr\nD0lMTGTIkCE0atSIdevWUblyZRYsWMDEiRNV4kRERPIgjcjlEYcOHeKuu+7i66+/BuDBBx/kjTfe\nyLdn/YiIiOQHKnJ5wPr167nlllvYunUrpUqVYuzYsdx0002uY4lIPlK+fPm/3M9SRLIuq9c11NSq\nx82ePZsmTZqwdetWGjRowIoVK1TiRCTXBW6z5IXH8OHDk0vnI488wtmzZ51nyu7j+PHjtG/fHoCI\niAjGjx/vPJMe5/fYvn17lv7uqch52Pjx4+nQoQOxsbF06tSJRYsWeeZWMyIiLgwaNIg+ffpgreX1\n11/n7bffJiLCu5NT0dHRzJw5k8cff5yEhAS6devG6NGjXceSXKQi51EjRoygW7duJCYmMmDAACZO\nnEihQoVcxxIRCVmvvfYazz77LMYY/vOf//Dkk0+6jhQU4eHhDB06lNdeew1rLffffz/Dhw93HUty\nie7s4EFDhw5N/gfojTfe4IknnnCcSEQktI0cOZKHHnoIYwwTJkygc+fOriPliLfffpvHHnsM8O1z\n7969HSeSYNEtulLxapH7z3/+Q+/evTHG8N5779GrVy/XkUREQtqkSZO4++67sdby/vvvc//997uO\nlKNSltaPP/6Yjh07uo4kQaAil4oXi9yUKVPo3Lkz1lpGjBjBgw8+6DqSiEhIW7BgAX/7299ISEhg\nyJAhPPXUU64j5YpXX32VAQMGEBUVxZw5c7j++utdR5LzpCKXiteK3Ny5c2nbti0JCQm8+uqrPPvs\ns64jiYiEtG3bttGoUSMOHTrEY489xptvvuk6Uq6x1vLII48wbNgwoqOjWbp0KdWrV3cdS86Dilwq\nXipyv/zyC40bN+bYsWM8/vjjvPHGG7pek4jIOcTGxtKsWTPWrVvHTTfdxOzZswkPD3cdK1clJSVx\n1113MW3aNKpUqcLSpUu58MILXceSbFKRS8UrRe7IkSM0adKETZs2cdttt/HJJ58QFqaTjUVE0mOt\n5a677uLjjz+matWq/PDDDxQvXtx1LCdOnjxJ8+bN+fHHH2ndujX//e9/812hzSvSK3JqBCEsMTGR\nTp06sWnTJurUqcO4ceNU4kREMjB69Gg+/vhjihQpwueff55vSxxA4cKFmTlzJiVLluTLL7/k+eef\ndx1JgkytIIQNGjSIL7/8kosvvpjPP/+cIkWKuI4kIhLSNmzYwCOPPALAe++9R0xMjONE7pUvXz55\nNmfw4MF88803riNJEKnIhahFixbx4osvAjBhwoQs33tNRCS/iY+P56677iIuLo7u3bvTpUsX15FC\nxrXXXssLL7yAtZauXbty4MAB15EkSFTkQtChQ4fo3LkzSUlJPPPMM7Rq1cp1JBGRkPfqq6+ybt06\nKleuzLBhw1zHCTnPPfccLVq0YM+ePdx777144ThxyZhOdghBnTp1YsqUKTRt2pQFCxYQGRnpOpKI\nSEhbs2YNDRs2JCEhgYULF9KiRQvXkULSzp07qVu3LkePHmXcuHF07drVdSTJJJ3s4BGffvopU6ZM\noXDhwkyYMEElTkQkAwkJCdx7770kJCTQp08flbhzKFeuHG+99RYAjzzyCHv37nWcSM6XilwIOXTo\nUPLdGoYMGULFihUdJxIRCX0jRoxg1apVlC9fnkGDBrmOE/K6d+9O69atOXLkCH379nUdR86TplZD\nSPfu3Rk3bhzXXnst8+bN06VGREQycODAAapUqcKxY8f47LPPuOWWW1xH8oQdO3ZQq1YtYmNjmT17\n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\nli5dyh133MG0adNCqiilnFIdNWoU9913n+tIkgs0tZoPXHnllTzxxBNYa+nevbtu3yUikg0RERFM\nmjSJ6Ohopk+fzujRo11HSpZ6SrVnz56uI4ljGpHLY06fPs2VV17Jhg0bPHGwrohIqJo4cSJ33303\nBQsWZOXKlVSvXt11JCZNmkSXLl2Ijo7mp59+oly5cq4jSS5Jb0RORS4PWr16NY0bN+bs2bPMmTOH\nm266yXUkERFP6tatG+PHj6du3br88MMPFChQwFmWnTt3UrduXY4ePaop1XxIU6v5SP369Xn55ZcB\nuPfeezl06JDjRCIi3jR8+HAqVarEmjVreOqpp5zlSExMpFu3bhw9epT27dtrSlWSqcjlUU8++STN\nmzdnz5499O7dW/diFRHJhujoaCZPnkxkZCTDhg3j448/dpLj9ddfZ8GCBVxyySV88MEHIXXyhbil\nqdU8bNu2bdSpU4fY2FjGjBlD9+7dXUcSEfGkYcOG8fDDD1OkSBGWL19OtWrVcu29ly9fTrNmzUhI\nSNDhMvmYplbzoQoVKjBs2DAAHnroIX7++WfHiUREvKlv377cddddxMbG0rFjx1y78HpsbCxdunQh\nISGBRx55RCVO/kIjcnmctZZu3boxYcIEateuzdKlSylYsKDrWCIinhMbG0ujRo34+eef6dKlC+PH\nj8/xKc577rmHMWPGULt2bZYtW+b0ZAtxSyNy+ZQxhhEjRhATE8O6det47LHHXEcSEfGkIkWKMH36\ndAoXLszEiRMZOXJkjr7fRx99xJgxYyhQoACTJk1SiZM0aUQun/jxxx9p0qQJ8fHxTJkyhX/84x+u\nI4mIeNLkyZPp3LkzERERfPPNN1xzzTVBf4+1a9fSuHFjTp8+zYcffsg999wT9PcQb9GIXD5Xr149\n3nrrLQDuv/9+fv31V8eJRES8qVOnTvTr14+EhATuuOMOduzYEdTtHz9+nL///e+cPn2ae+65RyVO\nzkkjcvmItZY777yTTz75hNq1a/P9999TuHBh17FERDwnISGB9u3b8+WXX1KnTh0WL15MkSJFznu7\n1lo6derE1KlTqV27Nj/88AOFChUKQmLxOo3ICcYYPvjgg+Tj5e6//35dX05EJBsiIiKYMmUKMTEx\nrF27lh49epCUlHTe2x0xYgRTp06lSJEiTJs2TSVOMqQil88ULVqUmTNnUqRIESZPnszbb7/tOpKI\niCcVL16czz//nGLFijF9+vTkO+pk18KFC3n00UcBGD16NFWrVg1GTMnjNLWaT3366afccccdhIeH\n8yGE+i0AACAASURBVPXXX9OyZUvXkUREPGnOnDm0a9cOay0TJ06kc+fOWd7Gzp07adiwIQcOHODx\nxx9n6NChOZBUvExTq/Int99+O8888wyJiYnceeed7Nq1y3UkERFPatOmDW+++Sbgu+7bggULsvT6\nU6dO0aFDBw4cOMCNN97I4MGDcyKm5FEakcvHEhMTadOmDXPnzqV+/fosWrRIJz+IiGTTI488wjvv\nvEPx4sVZsmQJ1atXz/A11lq6dOnC5MmTqVixIsuXL6dEiRK5kFa8RiNy8hfh4eFMnjyZypUrs3r1\narp16xaUg3VFRPKjN998kw4dOnD06FHatGnD3r17M3zN0KFDmTx5MkWKFOHzzz9XiZMsU5HL5y66\n6CJmzZpFsWLF+PTTTxkwYIDrSCIinhQeHs7EiRNp3LgxO3bsoF27dsTGxqa7/syZM3n66acBGD9+\nPDVr1sytqJKHqMgJ1apV45NPPiE8PJxBgwYxduxY15FERDypUKFCfP7551SsWJFVq1Zxxx13cObM\nmb+st3z5cjp37oy1lldeeYUOHTo4SCt5gY6Rk2TvvfceDz74IJGRkXzzzTe0aNHCdSQREU/atGkT\nzZs358CBA9x5551MmjSJ8PBwAHbs2EHjxo3Zt28f99xzDx988AHG/OXQJ5E/Se8YORU5+ZPAwbol\nSpRg8eLFVKtWzXUkERFPWrVqFddddx3Hjx+nV69evPfeexw/fpyrr76a9evXc/311zNnzhyioqJc\nRxUPUJFLRUUubQkJCdx2223Mnj2b8uXLs2TJEi677DLXsUREPGnhwoW0bt2a06dP8/jjj7NmzRq+\n/vprqlevzpIlSyhevLjriOIRKnKpqMil7+TJk9xwww0sXbqUunXrsmDBAooVK+Y6loiIJ82ePZtb\nb701+aoApUqVYunSpVxxxRVug4mn6PIjkmmFCxdm9uzZxMTEsGbNGm6//Xbi4+NdxxIR8aR27dpx\n0UUXJX9+0003qcRJ0KjISZpKlizJ//73Py699FLmzZsXtBtCi4jkN4MHD+bAgQPJn48bN46RI0c6\nTCR5iYqcpKtChQrMmTOH6OhopkyZwsMPP4ymo0VEMm/UqFE8++yzGGOYOnUqw4YNA+Chhx7i/fff\n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\nnfuBvr+KXDIqcpLRXL9+nY0bN7J69Wo2btzIkSNH7nm8YMGCNGrUiKeffhofHx9q1qypk9zTIZfL\nxaFDh9zF7bvvvuPcuXP3PKdYsWL4+vri6+tL8+bNdUhdJB2LiooiIiKCyMhI+vbt+8DfR0UuGRU5\nyehOnz7Nt99+y8aNG9m4cSMnT5685/Hs2bNTu3ZtfHx88PHxoW7duhQvXlwzYtPYxYsXCQ8Pd99+\n+OEH9yXd7nrooYdo2LAhDRs2pEmTJjzxxBP6dxLJZFTkklGRk8zEWsvx48cJDQ1l27ZthIWF3XMt\nwruKFClCzZo177mVKVNGpSEFWGs5e/Yse/bsYe/evezdu5ft27ffc57jXcWLF6dBgwY0atSIRo0a\nUalSJf0biGRyKnLJqMhJZnf58mXCw8MJCwsjLCyMnTt3Eh0d/ZvneXt7U6VKFapUqULlypXdH4sV\nK6ZycR9RUVEcPnyYQ4cOsX//fndxu3Tp0m+emydPHmrXrk29evWoV68edevWpWTJkg6kFpH0TEUu\nGRU5kXtZa4mMjGTXrl3u286dO7l48eLvPt/b25uKFSvy2GOP8eijj/LYY4+5b0WLFs3QJc9aS1RU\nFJGRkURGRnL8+HGOHDnCoUOHOHTo0O8WNoACBQpQrVo1qlevTrVq1ahZsyaVK1fW7GIR+UMqcsmo\nyIn8MWst58+fZ//+/Rw4cOCej5cvX77v1+XKlYtSpUpRokQJSpYsSYkSJdz3ixcvTuHChSlcuDD5\n8uVLd4UvNjaW8+fPc+7cud98PH36tLu8xcTE3Pd75M2bl4oVK7pvTz75JNWrV6dkyZLp7r9XRDyD\nilwyKnIiD+5uwTt69Cg///wzP//8M8eOHXPfv98eqeSyZcvmLnWFCxfG29ubvHnzki9fvns+5s2b\nlxw5cpAtWzb3LXv27GTLlo2sWbPicrlwuVzcuXPHfd/lchEbG0tMTAwxMTHcvHnTfT8mJobo6Ggu\nX77M5cuX+fXXX933r1+//qeye3t7U6ZMGcqUKUPp0qUpX748FStWpEKFCpo0IiIpTkUuGRU5kdRz\n9epVTp8+zenTpzlz5gxnzpxx3z979iyXLl0iKiqKGzduOB31N7y8vHj44YcpVqwYxYoVo2jRou77\nxYsXp2zZspQuXRpvb2+no4pIJqIil4yKnIjzbt68yaVLl7h06RIXL17kypUrXL9+nWvXrnHt2jX3\n/evXrxMbG0tcXBxxcXH33L9z5w5eXl54eXmRJUuWez5my5aN3Llzkzt3bnLlynXP/fz581OgB62D\n5wAABfpJREFUQAH3rWDBghQoUIB8+fJpQV0RSXdU5JJRkRMRERFPcb8ipz87RURERDyUipyIiIiI\nh0q3Rc4YM8EYc9AYs8cY8/+MMf9IHC9tjIkxxuxKvM1I8jU1jTH7jDFHjDFTnUsvIiIikvrSbZED\n1gFVrLXVgaPAqCSP/WStrZl4eyXJ+Eygv7W2PFDeGOObhnkzhU2bNjkdQdIhbRfye7RdyO/RdpGy\n0m2Rs9ZusNa6Ej/9Hkh6zZrfztowpiiQz1q7PXFoPtAhdVNmPvoFlN+j7UJ+j7YL+T3aLlJWui1y\nyfQDVif5vEziYdVvjTH1E8dKAKeTPOd04piIiIhIhuToBf6MMeuBh5MOARYYba39KvE5o4E4a+2i\nxOecBR6x1l42xtQEvjTGVE7L3CIiIiLpQbpeR84Y0wcYADS11t6+z3O+BYaRUPC+tdZWShzvDjSy\n1g68z9el3/9wERERkWR+bx05R/fI/SfGmJbACKBh0hJnjCkM/GqtdRljHgUeB45Za6ONMVeMMXWB\n7cDzQOD9vv/v/c8QERER8STpdo+cMeYokB24e/Xt7621rxhjOgHvArGAC/iXtXZV4tfUAv4N5ARW\nWWsHp3lwERERkTSSbouciIiIiPxnnjJrVRxmjGlpjDmUuNhygNN5JO0YY+YYYy4YY/YlGStgjFln\njDlsjFlrjMmf5LFRxpijiQt6P+NMakltxpiSxpiNxpj9xpgIY8ygxHFtG5mYMSaHMSbcGLM7cbt4\nJ3Fc20Uq0R45+UPGGC/gCNCMhEkl24Hu1tpDjgaTNJG4xM91YL619snEsQ+AS9baCYnFvoC19p+J\nM8hDgDokrP24AShn9UKT4SSu3VnUWrvHGJMX2Am0B/qibSNTM8bkttbGGGOyAFuBQUBntF2kCu2R\nkz+jLnDUWnvCWhsHfEbCC7ZkAtbaLcDlZMPtgXmJ9+fxf4tvtwM+s9bGW2sjSbgqS920yClpy1p7\n3lq7J/H+deAgCW/E2jYyOWttTOLdHCRMqrRou0g1KnLyZ5QATiX5XIstSxFr7QVIeEMHiiSOJ99W\nzqBtJcMzxpQBqpNwFZ6HtW1kbsYYL2PMbuA8sD7xikvaLlKJipyIpAQdBsmkEg+rLgUGJ+6ZS74t\naNvIZKy1LmttDRL20NY1xlRB20WqUZGTP+MM8EiSz0smjknmdcEY8zC4z5X6JXH8DFAqyfO0rWRg\nxpisJJS4Bdba5YnD2jYEAGvtVWAT0BJtF6lGRU7+jO3A48aY0saY7EB3YIXDmSRtmcTbXSuAPon3\n/YHlSca7G2OyG2PKkrBg9w9pFVLS3FzggLV2WpIxbRuZmDGm8N0ZqcaYXEALEs6f1HaRStLtlR0k\n/bDW3jHGvAasI6H8z7HWHnQ4lqQRY8wioDFQyBhzEngHGA98YYzpB5wAugJYaw8YYz4HDgBxwCua\nfZYxGWOeBnoBEYnnQ1ngTeAD4HNtG5lWMWBe4moHXsASa+0qY8z3aLtIFVp+RERERMRD6dCqiIiI\niIdSkRMRERHxUCpyIiIiIh5KRU5ERETEQ6nIiYiIiHgoFTkRERERD6UiJyIiIuKhVOREREREPJSK\nnIiIiIiHUpETERER8VAqciIiIiIeSkVORERExENldTqAiIinM8a8CBQGKgALgNJAEeAJYKS19oyD\n8UQkAzPWWqcziIh4LGPMAGCftTbcGFMHWA/0AW4Aa4DW1tq1DkYUkQxMe+RERP6eQtba8MT7jwB3\nrLVfGmNyAY2ttZsdzCYiGZz2yImIpBBjTCBQylrb0eksIpI5aLKDiEjKaQJscjqEiGQeKnIiIg/I\nGONljGluEhQBqpCkyBljRjoWTkQyBRU5EZEH9xKwDigHdAVigNMAxph2wI/ORRORzEDnyImIPCBj\nTDVgBHAI2Av8A2gKRALHrbULnUsnIpmBipyIiIiIh9KhVREREREPpSInIiIi4qFU5EREREQ8lIqc\niIiIiIdSkRMRERHxUCpyIiIiIh5KRU5ERETEQ6nIiYiIiHgoFTkRERERD6UiJyIiIuKh/j8YT825\n8zlOaAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,numpy.pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can play around with the input values and see what kind of behavior results. Just note that any value of $C > \\frac{2}{3}$ will result in $\\cos \\theta > 1$, which doesn't exist. Python will probably throw a few errors if you hit that condition, but just try again!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The last case is $C = 0$. Take another look at Equation (16) and plug in $C = 0$, what should happen? It looks like it will just reduce to \n", + "\n", + "$$R = 3z_t$$\n", + "\n", + "It's a constant radius of curvature! In fact, this solution is a series of semi-circles, with a cusp between them. One way to force $C = 0$ that we can figure out from Equation (15), is to make:\n", + "\n", + "\n", + "$$z = 3z_t\\ \\ \\ ,\\ \\ \\ \\theta = 0$$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\npZeYNm0a1atXp1mzZpx11lkVUfZWef/99xk5ciQ33ngjAMOHD+eLL75g7dq1tGjRgpNOOmmz70/7\nsZa2vuL6l+txJv29WeX8nVxRklQ2/H/q/9x3332xT58+sX///t9pP++88+LcuXNjjDG2a9cuzpkz\np8j3r1ixInbs2HHT88MOOywuXbq0/AreBvn5+fH444+Pv/rVr2KMMc6fPz/ec889m14///zz4zff\nfFPs+7flWCdMmBAff/zxeO+998avv/56K49g80pbX3H9S7Of4n6Xsu1FZhqnRCVJKqVrrrmGE088\n8Ttts2fPZuHChbRo0QKAUaNG0bJlyyLf/+abb9KuXbtNzzt06MA///nP8it4GwwbNoxu3bptev7l\nl18yZswY1q9fD0C9evXYbrvtin3/1h7r559/zpNPPsl5551HixYteP7557fhKIpX2vqK61/e59Qp\nUUlSlTNr1iz+/Oc/f2c9rI2PQwgcdthh9OrVq1T7fOONN2jYsCGDBg3i66+/pn79+px77rlF9v3i\niy9o1KjRpueNGjVi5syZW308xdnW41y2bBnVqlVjxx13ZNWqVQAceOCB5Ofn88Mf/pALLriAY445\nhpo1axa7j6091p///OfcdNNNAHz66adUr169XI6ztPUV13+HHXYo13NqYJMklYkQilzvs9Q2/oW7\nNSZNmsSAAQNo3rw51apV4yc/+Qm9e/f+Xr899tiDu+66a1vK/J7Fixczbdo0hgwZAsCRRx7Jj370\nI9q0afO9vl9//TXbb7/9pufbbbcd33zzTYk+p6THCNt+nH//+9/52c9+xlNPPfWd9htvvJGBAwdy\n/fXX87vf/W6z+9iaY/3Pf/7DO++8w7vvvsvkyZMZNGgQt956a7H9t+U4S1vf5vpv7TktCadEJUmV\nxsEHH8yrr77KD37wA2rWrEnv3r154IEHWLx4cbl/dv369TnggAM2PW/RogWjRo0qtm/BYLpmzRoa\nN25cos8pfIxdu3blt7/9LU8++STvvvvuth1EAe+88w6HHnro99pnzpzJuHHjGDVqFC+//DK33347\nb7/9drH72ZpjfeONNzjhhBO44IILOOuss1i4cCHHHHNMuRxnaesrrv+2nNOScIRNklQmtmVkrCzd\neeedLF68mIcffhjITKc1bdr0O30KTqEVtC1Tou3atWP8+PGbnlerVo28vLwi++65555Mnjx50/Nl\n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\nSZISMm/ePPr160d+fj633norJ5xwQtIlSZVKoiNsIYTRIYQpBbap2Z89AWKMv4gxtiAzBXp5krVK\nkor27bffcsopp7B06VKOPfZYbrvttqRLkiqdREfYYoxHl7DrYOBVYACZEbXdC7y2W7atSAMGDNj0\nuGvXrnTt2rWUVUqSihNj5IILLmDSpEm0atWKwYMHU7169aTLknLC2LFjGTt2bIn6pvmmgzYxxs+y\njy8Hjowx9i1w08GhZKZCR+NNB5KUiPvuu4/rrruOunXrMnHiRNq3b590SVLO2txNB2m+hm1gCGFv\nMjcbzAUuAogxfhxCGAp8DKwHLjGVSVLFe+2117jhhhsA+Otf/2pYk8pRakfYyoIjbJJUPj755BMO\nPfRQVqxYwW233fady08kbZ3NjbAZ2CRJpbJs2TIOO+wwPvvsM/r06cPzzz9PtWqpXSVKyhkGNklS\nmVi7di1HH300b731FgceeCBvvvkm9erVS7osqVLIyYVzJUnpEmPkZz/7GW+99RbNmjVj+PDhhjWp\nghjYJEklcscdd/D0009Tt25dXnnlFZo3d81yqaI4JSpJ2qJBgwZx1llnEULgpZdeomfPnkmXJFU6\nTolKkrba6NGj6d+/PwAPPPCAYU1KgCNskqRivf/++3Tu3JlvvvmG6667jnvuuSfpkqRKy7tEJUml\nNmfOHDp16sSiRYvo168fgwYNcvkOqRwZ2CRJpfLll19y5JFH8sknn3DUUUcxYsQIatWqlXRZUqVm\nYJMkldjKlSvp1q0b7733Hu3bt+fNN9+kYcOGSZclVXredCBJKpE1a9bQq1cv3nvvPfbcc09Gjhxp\nWJNSwMAmSQJgw4YNnH766YwbN45mzZoxevRodtlll6TLkoSBTZIE5OXl0b9/f15++WUaN27MqFGj\naN26ddJlScoysElSFZefn89FF13EoEGDqFu3LiNGjKBdu3ZJlyWpAAObJFVhMUauvPJKHnvsMWrX\nrs2rr77KoYcemnRZkgoxsElSFRVj5Prrr+eRRx5hu+2248UXX6RLly5JlyWpCAY2SaqCYozccsst\n3HfffdSoUYNhw4ZxzDHHJF2WpGLUSLoASVLFijFy8803M3DgQKpXr86QIUM44YQTki5L0mYY2CSp\nCokxcuONN3L33XdvCmsnn3xy0mVJ2gIDmyRVETFGbrjhBu69915q1KhhWJNyiIFNkqqAGCNXX301\nDz74IDVq1GDo0KH06dMn6bIklZCBTZIquby8PC688EIef/xxatasydChQ+ndu3fSZUkqBQObJFVi\n69ev5+yzz2bIkCFsv/32vPDCC/zkJz9JuixJpWRgk6RK6ttvv+W0007j5Zdfpn79+rzyyit07tw5\n6bIkbQUDmyRVQitXrqRPnz688cYb7LDDDowcOZKDDz446bIkbSUDmyRVMosXL6ZHjx6899577LLL\nLowcOZL27dsnXZakbWBgk6RKZPbs2RxzzDF89tlntGnThpEjR7LHHnskXZakbeRXU0lSJfHhhx9y\n+OGH89lnn3HggQcyfvx4w5pUSRjYJKkSGD16NEceeSSLFi2iW7dujB07lqZNmyZdlqQyYmCTpBz3\n5JNP0qNHD/773//St29fRowYQYMGDZIuS1IZMrBJUo6KMfKrX/2K/v37s2HDBm644QaeffZZtt9+\n+6RLk1TGvOlAknLQunXruOCCC3jqqaeoVq0aDz/8MJdccknSZUkqJwY2ScoxS5cu5aSTTuKtt96i\nTp06DBkyhJ49eyZdlqRyZGCTpBzy8ccf07NnT2bNmkWzZs0YPnw4HTt2TLosSeXMa9gkKUeMHDmS\nTp06MWvWLA466CAmTZpkWJOqCAObJKVcjJH777+fHj16sHLlSk455RTefPNNmjVrlnRpkiqIgU2S\nUmz16tWcddZZXHvtteTn5/OLX/yC5557jjp16iRdmqQK5DVskpRSc+fOpU+fPrz//vvUrVuXp556\nipNPPjnpsiQlwMAmSSn0z3/+k759+7J06VL23HNPXnzxRfbff/+ky5KUEKdEJSlF8vPzueuuu+je\nvTtLly7l2GOPZdKkSYY1qYozsElSSnz99deceOKJ3HzzzZuuV3v11VfZYYcdki5NUsKcEpWkFHjv\nvfc45ZRTmD17NjvssANPP/00xx9/fNJlSUoJR9gkKUExRh5++GE6derE7NmzOeigg3jvvfcMa5K+\nw8AmSQn56quvOOmkk7jiiitYt24dF110EePHj6dVq1ZJlyYpZZwSlaQETJw4kX79+jFv3jwaNmzI\nn//8Z0499dSky5KUUo6wSVIF2rBhA7fffjudO3dm3rx5HHroobz//vuGNUmb5QibJFWQ2bNnc9ZZ\nZzFhwgQArr/+eu644w5q1qyZcGWS0i71I2whhGtDCPkhhMYF2m4KIcwMIUwPIRyTZH2StCUxRp56\n6ik6dOjAhAkTaNasGaNHj+buu+82rEkqkVSPsIUQdgOOBuYWaNsX6AvsC+wGjAkh7BVjjMlUKUnF\nW7p0KRdffDHPP/88ACeffDJ/+tOfaNKkScKVScolaR9hewC4vlDbicCQGOOGGOMcYCZwSEUXJklb\n8uKLL9KuXTuef/556tWrxxNPPMHf/vY3w5qkUkttYAsh9ALmxxinFnqpOTC/wPMF2TZJSoWvv/6a\ns846iz59+rBkyRK6dOnChx9+yLnnnksIIenyJOWgRKdEQwijgaYFm4AI/AK4mcx0qCTljFdeeYUL\nL7yQhQsXUrt2bQYOHMhll11GtWqp/fexpByQaGCLMRYZyEII+wOtgA9D5p+juwHvhRAOITOi1qJA\n992ybUUaMGDApsddu3ala9eu21q2JH3PkiVLuPLKKxkyZAgAnTp14sknn2TvvfdOuDJJaTV27FjG\njh1bor4hF67VDyHMBjrGGL8OIewHPAMcSmYqdDRQ5E0HIQTvRZBUrmKMPPPMM1x11VUsW7aM2rVr\nc/vtt3PllVdSvXr1pMuTlENCCMQYi7xuItV3iRYQyUyXEmP8OIQwFPgYWA9cYiqTlITZs2dz6aWX\n8o9//AOA7t2786c//Yk99tgj4cokVTY5McK2tRxhk1Qe1q1bx3333cdvfvMb1qxZQ6NGjbj//vu9\nqUDSNqkMI2ySlArjxo3j4osvZvr06QD069eP+++/n1122SXhyiRVZt62JEklsGjRIs455xy6du3K\n9OnT2WuvvRg9ejSDBw82rEkqdwY2SdqMjdOfe++9N3/961+pVasWAwYMYMqUKXTv3j3p8iRVEU6J\nSlIxRo0axZVXXsmMGTMAOOGEE3jggQdo06ZNwpVJqmocYZOkQj799FN69+7Nsccey4wZM9hrr714\n9dVXGT58uGFNUiIMbJKUtWzZMq644gratWvHSy+9RN26dRk4cCBTp06lR48eSZcnqQpzSlRSlbd2\n7VoeeeQRbr/9dpYvX04IgfPPP5/f/OY37LrrrkmXJ0kGNklVV15eHoMHD+aXv/wlc+bMATKL3953\n3320b98+2eIkqQADm6QqJ8bIq6++ys0338zUqVMB2G+//bjnnns47rjjXPxWUup4DZukKuWtt96i\nc+fO9OzZk6lTp7L77rvzxBNPMGXKFHr06GFYk5RKjrBJqhImTpzIbbfdxpgxYwBo0qQJv/jFL7jo\noovYfvvtE65OkjbPwCapUvv3v//NbbfdxsiRIwFo0KABV199Nddccw0NGjRIuDpJKhkDm6RKafz4\n8dxxxx289tprANSvX58rr7ySa665hh122CHh6iSpdAxskiqNGCOjRo3ijjvu4K233gKgbt26XHHF\nFVx77bU0adIk4QolaesY2CTlvLy8PF588UUGDhzI5MmTAWjUqBFXXHEFV1xxhUFNUs4zsEnKWatX\nr+bJJ5/k/vvv5/PPPwdgp5124pprruGSSy7xGjVJlYaBTVLOWbJkCY8++iiPPvooy5YtA6B169Zc\nc801nHfeedSpUyfhCiWpbBnYJOWM9957j4ceeohnn32WdevWAXDwwQdz/fXXc9JJJ1G9evWEK5Sk\n8mFgk5Rq69ev54UXXuChhx5iwoQJAIQQ6NmzJ9dddx1HHnmki91KqvQMbJJSaf78+Tz22GM89thj\nLFy4EMisoXb++edz2WWXscceeyRcoSRVHAObpNTIy8tj1KhR/PGPf+SVV14hPz8fgLZt23L55Zdz\n9tlnU69evYSrlKSKZ2CTlLg5c+bw5JNP8uSTTzJ37lwAatasyamnnspFF11Ely5dnPaUVKUZ2CQl\nYvXq1bzwwgv85S9/4Y033tjU3rp1ay688EL69+/PzjvvnGCFkpQeBjZJFSY/P59x48YxaNAgnn/+\neVauXAnA9ttvz8knn8x5551H165dqVatWsKVSlK6GNgklasYI1OnTmXQoEEMHjyYBQsWbHrt4IMP\n5vzzz+e0006jUaNGCVYpSelmYJNULqZNm8bQoUMZOnQoM2bM2NTeqlUrzjzzTM444wzatm2bYIWS\nlDsMbJLKRIyRjz76iGHDhjF06FCmT5++6bXGjRtz2mmnceaZZ9KpUydvIJCkUjKwSdpqeXl5TJw4\nkRdffJEXX3yRWbNmbXqtcePG9OnTh759+9KtWzdq1qyZYKWSlNsMbJJKZcWKFYwePZoRI0YwfPhw\nli5duum1nXbaiZ49e9K3b1+OOuooQ5oklREDm6TNijEybdo0RowYwYgRI5gwYQIbNmzY9Pqee+5J\n79696d27N506dfL7PCWpHBjYJH3PggULeP311xkzZgxjxozhP//5z6bXqlevTufOnenRowfHH388\n7dq185o0SSpnBjZJLF68mDfffJM333yTN954g48//vg7rzdt2pTjjjuOHj16cPTRR7sEhyRVMAOb\nVMXEGJkzZw4TJ07kzTffZNy4cXzyySff6VO3bl26du1K9+7d6d69u6NokpQwA5tUya1atYp3332X\nt99+m7fffpt//etfLF68+Dt96tSpw+GHH06XLl3o0qULhx56KNttt11CFUuSCjOwSZXI6tWr+eCD\nD3j33XeZPHky7777LtOnTyc/P/87/Zo0aUKnTp340Y9+RJcuXTjooIO8o1OSUszAJuWg/Px85syZ\nw5QpU5gyZQpTp05lypQpzJw5kxjjd/pWr16dDh060KlTp01bmzZtnOKUpBxiYJNS7JtvvuHzzz/n\nk08+YcaMGUyfPp0ZM2bwySefsGbNmu/1r169Ou3ateOggw7ihz/8IQcddBDt27endu3aCVQvSSor\nBjYpQWvWrOGLL75g3rx5zJ8/nzlz5vD5559v2pYsWVLse3fddVcOOOAA2rdvv2lr27YttWrVqsAj\nkCRVBAObVMa+/fZbli1bxldffcWyZcv48ssvWbRo0Xe2//znP3zxxRd8+eWXm91XrVq1aN26Nfvs\nsw9t27albdu27Lvvvuyzzz4urSFJVYiBTVXe119/zauvvkp+fj55eXmbtvz8fDZs2MDatWv59ttv\nv7OtWrWKlStX8t///nfTzxUrVvDVV18VOVVZnBo1arDbbrvRokULdt99d1q0aMGee+65aWvevDnV\nqlUrx6OXJOWCUPgC5cokhBAr8/GpbEyZMoUOHTqU2f5q1qxJkyZNaNKkCY0bN2bHHXdk1113ZZdd\ndtm0NW3alN13352mTZsayCRJAIQQiDEWeUeYI2yq8ho3bswZZ5xB9erVqVat2nd+Vq9ene233/57\nW506dWjQoAH169f/zs/GjRtTt25d78CUJJUpR9gkSZJSYHMjbM7FSJIkpZyBTZIkKeUMbJIkSSln\nYJMkSUq51Aa2EMJtIYQvQgjvZbefFHjtphDCzBDC9BDCMUnWKUmSVN5SG9iy7o8xdsxurwGEEPYF\n+gL7AscBvw8pWUNh7NixSZegbeD5y12eu9zm+cttnr+KkfbAVlQQOxEYEmPcEGOcA8wEDqnQqorh\nH9rc5vnLXZ673Ob5y22ev4qR9sB2WQjhgxDCYyGEhtm25sD8An0WZNskSZIqpUQDWwhhdAhhSoFt\navZnT+D3wB4xxh8Ai4D7kqxVkiQpKTnxTQchhJbA8Bhj+xDCjUCMMf42+9prwG0xxn8X8b70H5wk\nSVJWzn2XaAhhlxjjouzTk4CPso9fBp4JITxAZiq0DfBOUfso7qAlSZJySWoDG3B3COEHQD4wB7gQ\nIMb4cQhhKPAxsB64xC8MlSRJlVlOTIlKkiRVZWm/SzQnhBDuzi7i+0EIYVgIoUGB11zkN+VCCD8J\nIcwIIXwaQvh50vVo80IIu4UQ3gghTMveqHRFtn2HEMKoEMInIYSRBe4sV8qEEKplF0R/Ofvcc5cj\nQggNQwh/y/6dNi2EcKjnr2IY2MrGKKBd9o7WmcBNACGE/UjpIr/KCCFUAx4BjgXaAf1CCG2TrUpb\nsAG4JsbYDugEXJo9ZzcCY2KM+wBvkP09VCpdSeaylo08d7njQWBEjHFfoAMwA89fhTCwlYEY45gY\nY3726b+A3bKPe5HSRX61ySHAzBjj3BjjemAImcWZlVIxxkUxxg+yj78BppP5nTsReCrb7SmgdzIV\nanNCCLsBPYDHCjR77nJAdvboyBjjEwDZv9tW4PmrEAa2snceMCL72EV+06/wOfoCz1HOCCG0An5A\n5h9KTWOMiyET6oCdk6tMm/EAcD1Q8AJqz11uaA0sDSE8kZ3S/n8hhDp4/iqEga2EtrDI78Y+twDr\nY4zPJliqVCWEEOoBzwNXZkfaCt9B5R1VKRNCOB5YnB0h3dzlIZ67dKoBdAQejTF2BFaRmQ71d68C\npHlZj1SJMR69uddDCOeSGeY/qkDzAmD3As93y7YpPRYALQo89xzlgBBCDTJh7ekY40vZ5sUhhKYx\nxsUhhF2AJclVqGIcAfQKIfQAagP1QwhPA4s8dznhC2B+jHFy9vkwMoHN370K4AhbGQgh/ITMEH+v\nGOPaAi+9DJweQtguhNCazSzyq8RMAtqEEFqGELYDTidz3pRufwE+jjE+WKDtZeDc7ONzgJcKv0nJ\nijHeHGNsEWPcg8zv2hsxxrOA4XjuUi877Tk/hLB3tunHwDT83asQrsNWBkIIM4HtgGXZpn/FGC/J\nvnYTcD6ZRX6vjDGOSqZKFScbuB8k8w+Yx2OMAxMuSZsRQjgCeBOYSmbqJQI3k/nH0FAyo9pzgb4x\nxuVJ1anNCyF0Aa6NMfYKITTGc5cTQggdyNwwUhOYBfQHquP5K3cGNkmSpJRzSlSSJCnlDGySJEkp\nZ2CTJElKOQObJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElK\nOQObJElSytVIugBJyhUhhAuAHYF9gKeBlsDOwP7ADTHGBQmWJ6kSCzHGpGuQpNQLIfwMmBJj/HcI\n4WBgNHAusAp4DegRYxyZYImSKjFH2CSpZJrEGP+dfdwCyIsxvhhCqA10jTG+lWBtkio5R9gkqZRC\nCA8Bu8cY+yRdi6SqwZsOJKn0ugFjky5CUtVhYJOkLQghVAshdA8ZOwPtKBDYQgg3JFacpCrBwCZJ\nW3YhMArYC+gLrAa+AAgh9AI+Sq40SVWB17BJ0haEEDoA1wMzgA+BBsBRwBxgdoxxUHLVSaoKDGyS\nJEkp55SoJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElKOQOb\nJElSyhnYJEmSUu7/A9i2e0jPCtaoAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(16,48,0.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks an awful lot like a quarter circle. And what's the radius of the arc? It's $$r = 48 = 3z_t.$$\n", + "\n", + "We can also get a semi-circle out of our simulated trammel by changing to another configuration where $C$ is (near) zero. Here's one example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nvS8Z0/tyPr0nGdP7kjG9LznDb4/STXNNdhERERGvZozBXsZBG357lK6IiJyvQoUKxMTEOB1DxG+V\nL1+e/fv3e3y9GuETEZFU7lEEp2OI+K3M/g1e7gif9uETERER8XEqfCIiIiI+ToVPRERExMep8ImI\niIj4OBU+ERERkcu0du1aEhISOHv2LOvWrXM6znl0WhYREZF0Tp06xbhx4wgLC+PPP//k2Wef/dfj\nW7duJTIyksGDB2e6jsWLF7Nz504CAwO56qqr6Ny5c07HzpZt27Yxc+ZMJkyYkLrsYtufXl7Z1uzI\n6P3JSEREBDExMZQuXZp33nkHAGstxYsXJyAgIPXI22bNmjF37twcz52eCp+IiEg6Tz75JCNHjiQs\nLIyqVavywAMPUL58ecD1S3z48OHUrl07068/efIkL730Eps3bwagbt263HvvvZQoUSJX8mfV//3f\n/7F+/XqKFSv2r+UX2v70LmdbN2zYwI8//siJEyfo2rXreTmcltn7k5GhQ4fSokULypYtS2BgIAD7\n9+/nrbfe4o477iAgIIBFixZx991353TsDGlKV0REJI1ffvmFw4cPExYWBsDKlSv/VXYWLFhA48aN\nL7iOtWvXUqVKldT7t956K6tXr86ZwJfhmWeeoXXr1v9adrHtTy+727pv3z7ef/99nnjiCcLCwpg/\nf342tyLnZPT+ZCY4OJirr746tewB5M+fn7Zt21KhQgWKFi1KcHAwlStXzqm4F6QRPhER8Tk///wz\n77777r9OYpvyuTGG22+/nVatWmX4tV9++SWhoaF8+OGHnDhxgiJFitClSxcA4uLiCAgIoGTJkpw6\ndSrT1//111//NSpUrFgx9uzZ47kNdLuc7czMhbY/I9nd1ueff54XXngBgN27d/+rKKWXE9vpadHR\n0VhriYuL44YbbqBVq1aULVs29fHJkyfz9NNPO5ZPhU9ERLLEmGyf5P882b2ax8aNGxk1ahTlypUj\nICCAFi1a0KZNm/OeV7FiRcaMGZOt14iNjWXnzp3MmTMHgPr163PnnXdy/fXXs3DhQrp3784HH3xw\nwXWcOHGC/Pnzp97Ply8f8fHxWXr9rG4jXN52ZuZC25+R7Gzrb7/9RnR0NJs3b2bTpk18+OGHDB8+\nPNPn58R2elq3bt2oUaMGANWrV6dhw4aEhoYCrvcoLi6OkJAQx/Kp8ImISJ5x2223sWzZMt566y12\n7dpFmzZteO211+jUqRNXXnmlR16jSJEiVKtWLfV+WFgYK1eu5Pjx49SpUyfL6zh+/Hjq/TNnzlCm\nTJksfW36bWzUqBHjxo3jyiuvpFq1atSsWfPSNugSZbb9mRW+7Gzrl19+yf3330+PHj04ffo0gwYN\nolmzZjm+na+++ioJCQn/WpYyShgREXHBqeuLufXWW1M/L168OFFRUanTwXPnznVsKjeFCp+IiGSJ\nt1xjd/To0cTGxvLGG28ArunA9GUv7RRgWlmZAqxSpQrr169PvR8QEEBSUhLR0dGcPn2a5cuX89VX\nX5GQkMCnn36a4Xquu+46Nm3alHo/Li6O8PDwbG3ja6+9RuPGjQkPDyciIoJZs2Z5ZDszk9n2ZyY7\n23rw4MHUArR48WLuvfdeZs6cmePbOWjQoIs+JztmzZrFZ599lpo5Pj7+X1PUX375JY899liOvHaW\nWWv98ubadBERScvb/28cPXq0HTp0qLXW2p07d9p169bZe+65x3799dcee42EhAR7++23p96/4447\n7N69e//1nFGjRtkXX3wx9f6+fftscnJy6v1Tp07ZatWqpd6/9dZbbWxsrLXW2j179vzrueml38a+\nffvaAwcOWGutveeeey5jyzL2/vvv2y5duqTev9D2p99Oa7O3rVOnTrVTp0611lp777332piYGNuv\nX78c3c7sSv/+WHv++7B+/Xq7Zs0aa6218fHxtkKFCvbUqVOpj1evXt2uWrUqS6+X2b9B9/Js9x4d\npSsiInnChg0bqFatGs2bN6dJkyYsXLiQa665hkaNGnH77bd77HVCQkIYNWoUI0aMYPjw4fTp04fr\nrrsu9fGPP/6YxYsXs3jx4tQjSx944AG+++671OcULFiQQYMG8Z///IeXX36ZgQMHUrp0aQBatmzJ\nqlWrsryNwAUPaLgcb775JtOmTSMqKooXX3yRv/7664Lbn347s7utDz74INu3b2fq1KkMHz6csLAw\nkpOTc2w7syuj9wfOfx/q1avHwYMHmThxIkOHDmXOnDkULFgw9fESJUpQrly5XM+flrFeMkSf24wx\n1l+3XUQkM2mPgswLZs+eTfny5QkLC+Oaa65xOk6WJCcns2bNmoue2iXFG2+8Qf369alcuTJdunTh\no48+yuGEnnMp25qXt9OTMvs36F6e7SOnVPhERCRVXit8ixcvJjExkdtuu+2ydrjPTfPmzaNly5YU\n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\npozTkbyGRvjysB49elC9enUOHDjA2LFjnY4jIiLimISEhNRrz7/44osqex6mET6HffXVV9x5552E\nhITwww8/ULFiRacjiYiI5LqXX36ZESNGULVqVbZu3UpQkKNnjvM6GuHL4+rVq0fnzp05e/Ys/fv3\nxxtKqIiISG7av38/o0ePBuDNN99U2csBKnxe4NVXXyU0NJTPPvuM+fPnOx1HREQk11hr6d27NwkJ\nCXTs2JGGDRs6HcknaUrXS7zzzjv06tWLMmXKsGvXLooVK+Z0JBERkRw3Z84cOnbsSLFixdi1a5f2\n3cuEpnR9RPfu3alXrx6///47gwcPdjqOiIhIjjtx4kTqgRrjx49X2ctBGuHzIjt37qRGjRokJiay\nfv166tWr53QkERGRHNO9e3emTp1KgwYNWL16NQEBGofKjEb4fEiVKlUYNGgQ4Dply99//+1wIhER\nkZyxZs0apk6dSr58+XjnnXdU9nKY3l0vM3ToUK6//np++OEHxowZ43QcERERj0tISKBnz54ADBky\nhJtuusnhRL5PU7peaM2aNTRq1IigoCA2btxI9erVnY4kIiLiMYMGDWL8+PHcdNNNfPfdd4SEhDgd\nyetpStcHNWzYkH79+nHu3Dm6dOlCYmKi05FEREQ8YsOGDUyYMIGAgADef/99lb1cosLnpcaMGcO1\n117Ltm3bUk9GKSIikpedPn2aLl26YK1l0KBB1KlTx+lIfkNTul4sKiqKxo0ba2pXRER8wjPPPMNr\nr71GlSpV2Lx5s0b3LoGmdH1Yo0aN/jW1q6N2RUQkr1q/fj0TJ04kMDBQU7kOUOHzcmPGjKFixYps\n27aNUaNGOR1HRETkksXHx6dO5b7wwgvUqlXL6Uh+R1O6ecD69etp2LAh1lqioqJo0KCB05FERESy\nrFu3bkybNo1bbrmFjRs3ki9fPqcj5Tma0vUDd955Jy+88ALWWjp37swff/zhdCQREZEsWbBgAdOm\nTSN//vzMnj1bZc8hKnx5xMiRI7nttts4cOAAffv2dTqOiIjIRR06dIju3bsDrmvlVqlSxeFE/ktT\nunnI7t27qVGjBqdPn2bWrFl06tTJ6UgiIiIZSk5OplmzZnzxxRfce++9LF26FGOyPSPp9zSl60cq\nVarE66+/DkDv3r3Zv3+/s4FEREQy8dprr/HFF19QqlQppk+frrLnMI3w5THWWtq3b88nn3xC7dq1\nWbdunfaHEBERr7Jx40bq1atHYmIiS5Ys4f7773c6Up6nET4/Y4xh6tSphIWFER0dzeDBg52OJCIi\nkuqPP/6gQ4cOJCYm0q9fP5U9L6ERvjzqm2++oX79+pw7d47FixfTqlUrpyOJiIifSzsLVbNmTb76\n6iudYNlDNMLnp26//XbGjh0LQJcuXYiJiXE4kYiI+LtJkybxySefULRoUebNm6ey50U0wpeHWWtp\n1aoVS5cu5fbbb2ft2rUEBwc7HUtERPxQdHQ0d955J4mJicyfP5/27ds7HcmnaITPjxljeP/997nm\nmmv45ptvGDhwoNORRETEDx0/fpyHHnqIxMREnnzySZU9L6QRPh/w9ddf07BhQxITE3V+PhERyVVJ\nSUncd999REZGUqtWLdavX6+p3BygET6hbt26qefn69atG9u3b3c4kYiI+IsRI0YQGRlJyZIlmT9/\nvsqel9IIn4+w1vLEE0/w/vvvU7FiRTZt2kTx4sWdjiUiIj7sk08+oV27dgQEBPD555/TpEkTpyP5\nLI3wCeD6QXjrrbcIDw/n559/5pFHHiEpKcnpWCIi4qN27drFY489BsCrr76qsuflVPh8SIECBVi4\ncCElSpRg+fLljBw50ulIIiLig/7880/atm1LfHw8Dz/8MM8884zTkeQiNKXrg1atWkXz5s1JTk7m\no48+4uGHH3Y6koiI+IikpCRat27NsmXLuOWWW9iwYQOFChVyOpbP05SunKdp06a89tprADz++ONE\nR0c7nEhERHzFoEGDWLZsGSVKlOCTTz5R2csjNMLno6y19OrViylTplCmTBk2btzI1Vdf7XQsERHJ\nw6ZOnUr37t0JDg5m1apVNGjQwOlIfuNyR/hU+HxYYmIizZo1IyoqivDwcNauXau/xEREJFtWr15N\ns2bNOHfuHNOmTeOJJ55wOpJf0ZSuZCo4OJj58+dz3XXXsWXLFiIiIkhOTnY6loiI5DF79uyhffv2\nnDt3jueee05lLw9S4fNxJUqUYOnSpYSGhrJgwQIGDx7sdCQREclD4uLiuP/++zlx4gQtW7Zk7Nix\nTkeSbFDh8wM33XQT8+fPJygoiPHjx/Pmm286HUlERPKAM2fO0KpVK3bv3s0tt9zCrFmzCAwMdDqW\nZIMKn59o2rQpU6dOBeDJJ59k0aJFDicSERFvlpSUxKOPPsqGDRu4+uqr+eyzzyhSpIjTsSSbVPj8\nSEREBC+99BLWWjp27MjXX3/tdCQREfFC1lqefvppFi5cSGhoKCtWrKBcuXJOx5LLoKN0/Yy1lh49\nejB16lRKlCjB119/zQ033OB0LBER8SITJkxg4MCB5MuXj8jISBo1auR0JL+n07Jkk78WPoBz587R\nqlUrli9fzrXXXsv69eu56qqrnI4lIiJeYPbs2TzyyCMAulqTF9FpWeSSBQUFMW/ePGrVqsUvv/xC\n8+bNOX78uNOxRETEYcuWLSMiIgKA8ePHq+z5EBU+P1W4cGGWL1/OTTfdxI4dO7jvvvs4deqU07FE\nRMQh69at44EHHuDcuXMMHDiQZ5991ulI4kGa0vVzv/76K/Xq1ePAgQM0a9aMTz/9lJCQEKdjiYhI\nLtqyZQuNGzfm5MmTdO/enXfeeQdjsj17KDlAU7pyWa6++mo+//xzSpUqxcqVK+ncuTNJSUlOxxIR\nkVzy008/0aJFC06ePEmHDh14++23VfZ8kAqfUKlSJSIjIylatCgff/wx3bt31yXYRET8QExMDHff\nfTdHjx6lRYsWzJw5UydW9lEqfAJAjRo1WLp0KQUKFOC9996jV69eKn0iIj7swIEDNG7cmIMHD1Kv\nXj0WLFhAvnz5nI4lOUSFT1LVr1+fpUuXkj9/ft5991369euH9nMUEfE9v/76K40bN+aXX36hdu3a\nLFu2jIIFCzodS3KQCp/8S5MmTVIP3Hj77bcZMGCASp+IiA85dOgQjRs35ueff6ZWrVpERkYSGhrq\ndCzJYSp8cp67776bRYsWkS9fPt544w2eeeYZlT4RER9w+PBhmjRpwt69ewkPD2flypUUK1bM6ViS\nC1T4JEMtWrRg4cKFBAcHM3HiRAYNGqTSJyKSh/322280adKE3bt3U716dT7//HOKFy/udCzJJSp8\nkqn77ruP+fPnExQUxIQJE3juuedU+kRE8qDffvuNu+66i59++olbbrmFVatWccUVVzgdS3KRCp9c\nUKtWrZg3bx7BwcH83//9H3369NHRuyIieUhMTAwNGjRg165dVKtWjS+++IISJUo4HUtyma60IVny\n2Wef0b59exISEujcuTPTp08nKCjI6VgiInIBu3fvpmnTphw8eJDw8HAiIyMpWbKk07EkGy73Shsq\nfJJlq1evpmXLlpw6dYr27dsze/ZsnbNJRMRLbd++nWbNmhEbG0u9evVYtmyZjsbNw3RpNck1jRs3\n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\nvMsjiwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,-numpy.pi/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is so nice. We have reproduced the trajectories that Lanchester found more than a hundred years ago, painstakingly drawing them by hand with a contraption called a \"trammel.\" It must have taken him days!\n", + "\n", + "Here is how the different phugoid curves are drawn in von Kármán's book, _Aerodynamics_ (1957). He never says _how_ he drew them, but we're guessing by hand, also. We did pretty good!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/vonKarman-phugoids.png)\n", + "\n", + "#### Figure 4. Phugoid curves in von Kármán (1957)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next notebook of this series, we'll look at the differential equation that arises when you consider small perturbations on the horizontal phugoid, and we'll learn to numerically integrate that to get the flight paths." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Lanchester, F. W. _Aerodonetics_, D. van Nostrand Company: New York, 1909. On the public domain. [Get it from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PP1#v=onepage&q&f=false).\n", + "\n", + "2. Milne-Thompson, L. M. _Theoretical Aerodynamics_, Dover 2012 reprint of the revised 1966 edition. [Read on Google Books](http://books.google.com/books?id=EMfCAgAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see section 18.5)\n", + "\n", + "3. Sinha, N. K. and Ananthkrishnan, N. _Elementary Flight Dynamics with an introduction to Bifurcation and Continuation Methods_, CRC Press, 2013. [Read on Google Books](http://books.google.com/books?id=yXL6AQAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see chapter 5)\n", + "\n", + "4. von Kármán, T. _Aerodynamics_, Dover 2004 reprint of the 1957 2nd edition. (see pages 149–151)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Execute this cell to load the notebook's style sheet, then ignore it\n", + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/01_02_Phugoid_Oscillation.ipynb b/01_phugoid/01_02_Phugoid_Oscillation.ipynb new file mode 100644 index 0000000..eb6283b --- /dev/null +++ b/01_phugoid/01_02_Phugoid_Oscillation.ipynb @@ -0,0 +1,949 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth. Partly based on David Ketcheson's pendulum lesson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Oscillation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome back! This is the second IPython Notebook of the series _\"The phugoid model of glider flight\"_, the first learning module of the course [**\"Practical Numerical Methods with Python.\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about)\n", + "\n", + "In the first notebook, _\"Phugoid Motion\"_, we described the physics of an aircraft's oscillatory trajectory, seen as an exchange of kinetic and potential energy. This analysis goes back to Frederick Lanchester, who published his book _\"Aerodonetics\"_ on aircraft stability in 1909. We concluded that first exposure to our problem of interest by plotting the flight paths predicted by Lanchester's analysis, known as _phugoids_.\n", + "\n", + "Here, we will look at the situation when an aircraft is initially moving on the straight-line phugoid (obtained with the parameters $C=2/3$, $\\cos\\theta=1$, and $z=z_t$ in the previous analysis), and experiences a small upset, a wind gust that slightly perturbs its path. It will then enter into a gentle oscillation around the previous straight-line path: a _phugoid oscillation_.\n", + "\n", + "If the aircraft experiences an upward acceleration of $-d^2z/dt^2$, and we assume that the perturbation is small, then $\\cos\\theta=1$ is a good approximation and Newton's second law in the vertical direction is:\n", + "\n", + "$$\\begin{equation}\n", + "L - W = - \\frac{W}{g}\\frac{d^2 z}{dt^2}\n", + "\\end{equation}$$\n", + "\n", + "In the previous notebook, we saw that the following relation holds for the ratio of lift to weight, in terms of the trim velocity $v_t$:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}=\\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "This will be useful: we can divide Equation (1) by the weight and use Equation (2) to replace $L/W$. Another useful relation from the previous notebook expressed the conservation of energy (per unit mass) as $v^2 = 2 gz$. With this, Equation (1) is rearranged as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d^2z}{dt^2} + \\frac{gz}{z_t} = g\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look at Equation (3) for a moment. Does it ring a bell? Do you recognize it?\n", + "\n", + "If you remember from your physics courses the equation for _simple harmonic motion_, you should see the similarity! \n", + "\n", + "Take the case of a simple spring. Hooke's law is $F=-kx$, where $F$ is a restoring force, $x$ the displacement from a position of equilibrium and $k$ the spring constant. This results in the following ordinary differential equation for the displacement:\n", + "\n", + "$$\\begin{equation}\n", + " \\frac{d^2 x}{dt^2}= -\\frac{k}{m}x\n", + "\\end{equation}$$\n", + "\n", + "which has the solution $x(t) = A \\cos(\\omega t- \\phi)$, representing simple harmonic motion with an angular frequency $\\omega=\\sqrt{k/m}=2\\pi f$ and phase angle $\\phi$.\n", + "\n", + "Now look back at Equation (3): it has nearly the same form and it represents simple harmonic motion with angular frequency $\\omega=\\sqrt{g/z_t}$ around mean height $z_t$. \n", + "\n", + "Think about this for a moment ... we can immediately say what the period of the oscillation is: exactly $2 \\pi \\sqrt{z_t/g}$ — or, in terms of the trim velocity, $\\pi \\sqrt{2} v_t/g$.\n", + "\n", + "_This is a remarkable result!_ Think about it: we know nothing about the aircraft, or the flight altitude, yet we can obtain the period of the phugoid oscillation simply as a function of the trim velocity. For example, if trim velocity is 200 knots, we get a phugoid period of about 47 seconds—over that time, you really would not notice anything if you were flying in that aircraft.\n", + "\n", + "Next, we want to be able to compute the trajectory of the aircraft for a given initial perturbance. We will do this by numerically integrating the equation of motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare to integrate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to integrate the differential equation and plot the trajectory of the aircraft. Are you ready?\n", + "\n", + "The equation for the phugoid oscillation is a second-order, ordinary differential equation (ODE). Let's represent the time derivative with a prime, and write it like this:\n", + "\n", + "$$\\begin{equation}\n", + "z(t)'' + \\frac{g \\,z(t)}{z_t}=g\n", + "\\end{equation}$$\n", + "\n", + "There's a convenient trick when we work with ODEs: we can turn this 2nd-order equation into a system of two 1st-order equations. Like this:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z'(t) &=& b(t)\\\\\n", + "b'(t) &=& g\\left(1-\\frac{z(t)}{z_t}\\right)\n", + "\\end{eqnarray}$$\n", + "\n", + "Are you following? Make sure you are following the derivations, even if it means writing the equations down in your own notes! (Yes, the old-fashioned paper way.)\n", + "\n", + "Another way to look at a system of two 1st-order ODEs is by using vectors. You can make a vector with your two independent variables, \n", + "\n", + "$$\\begin{equation}\n", + "\\vec{u} = \\begin{pmatrix} z \\\\ b \\end{pmatrix}\n", + "\\end{equation}$$\n", + "\n", + "and write the differential system as a single vector equation:\n", + "\n", + "\\begin{equation}\n", + "\\vec{u}'(t) = \\begin{pmatrix} b\\\\ g-g\\frac{z(t)}{z_t} \\end{pmatrix}\n", + "\\end{equation}\n", + "\n", + "If you call the right-hand-side $\\vec{f}(\\vec{u})$, then the equation is very short: $\\vec{u}'(t) = \\vec{f}(\\vec{u})$—but let's drop those arrows to denote vectors from now on, as they are a bit cumbersome: just remember that $u$ and $f$ are vectors in the phugoid equation of motion.\n", + "\n", + "Next, we'll prepare to solve this problem numerically." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial value problems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's step back for a moment. Suppose we have a first-order ODE $u'=f(u)$. You know that if we were to integrate this, there would be an arbitrary constant of integration. To find its value, we do need to know one point on the curve $(t, u)$. When the derivative in the ODE is with respect to time, we call that point the _initial value_ and write something like this:\n", + "\n", + "$$u(t=0)=u_0$$\n", + "\n", + "In the case of a second-order ODE, we already saw how to write it as a system of first-order ODEs, and we would need an initial value for each equation: two conditions are needed to determine our constants of integration. The same applies for higher-order ODEs: if it is of order $n$, we can write it as $n$ first-order equations, and we need $n$ known values. If we have that data, we call the problem an _initial value problem_.\n", + "\n", + "Remember the definition of a derivative? The derivative represents the slope of the tangent at a point of the curve $u=u(t)$, and the definition of the derivative $u'$ for a function is:\n", + "\n", + "$$u'(t) = \\lim_{\\Delta t\\rightarrow 0} \\frac{u(t+\\Delta t)-u(t)}{\\Delta t}$$\n", + "\n", + "If the step $\\Delta t$ is already very small, we can _approximate_ the derivative by dropping the limit. We can write:\n", + "\n", + "$$\\begin{equation}\n", + "u(t+\\Delta t) \\approx u(t) + u'(t) \\Delta t\n", + "\\end{equation}$$\n", + "\n", + "With this equation, and because we know $u'(t)=f(u)$, if we have an initial value, we can step by $\\Delta t$ and find the value of $u(t+\\Delta t)$, then we can take this value, and find $u(t+2\\Delta t)$, and so on: we say that we _step in time_, numerically finding the solution $u(t)$ for a range of values: $t_1, t_2, t_3 \\cdots$, each separated by $\\Delta t$. The numerical solution of the ODE is simply the table of values $t_i, u_i$ that results from this process." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to execute the process described above and find the numerical solution of the ODE, we start by choosing the values $t_1,t_2,t_3 \\cdots t_n$—we call these values our *grid* in time. The first point of the grid is given by our _initial value_, and the small difference between two consecutive times is called the _time step_, denoted by $\\Delta t$. The solution value at time $t_n$ is denoted by $u_n$.\n", + "\n", + "Let's build a time grid for our problem. We first choose a final time $T$ and the time step $\\Delta t$. In code, we'll use readily identifiable variable names: `T` and `dt`, respectively. With those values set, we can calculate the number of time steps that will be needed to reach the final time; we call that variable `N`. \n", + "\n", + "Let's write some code. The first thing we do in Python is load our favorite libraries: NumPy for array operations, and the Pyplot module in Matplotlib, to later on be able to plot the numerical solution. The line `%matplotlib inline` tells IPython Notebook to show the plots inline." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy \n", + "from matplotlib import pyplot\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, initialize `T` and `dt`, calculate `N` and build a NumPy array with all the values of time that make up the grid." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100.0\n", + "dt = 0.02\n", + "N = int(T/dt)+1\n", + "t = numpy.linspace(0.0, T, N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have our grid! Now it's time to apply the numerical time stepping represented by Equation (10)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Write the code above using the NumPy function `arange()` instead of `linspace()`. If you need to, read the documentation for these functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Enter a question mark followed by any function, e.g., `?numpy.linspace`, into a code cell and execute it, to get a help pane on the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The approximate solution at time $t_n$ is $u_n$, and the numerical solution of the differential equation consists of computing a sequence of approximate solutions by the following formula, based on Equation (10):\n", + "\n", + "$$u_{n+1} = u_n + \\Delta t \\,f(u_n).$$\n", + "\n", + "This formula is called **Euler's method**.\n", + "\n", + "For the equations of the phugoid oscillation, Euler's method gives the following algorithm that we need to implement in code:\n", + "\n", + "\\begin{align}\n", + "z_{n+1} & = z_n + \\Delta t \\, b_n \\\\\n", + "b_{n+1} & = b_n + \\Delta t \\left(g - \\frac{g}{z_t} \\, z_n \\right).\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To apply the numerical solution method, we need to set things up in code: define the parameter values needed in the model, initialize a NumPy array to hold the discrete solution values, and initialize another array for the elevation values." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# initial conditions\n", + "z0 = 100. #altitude\n", + "b0 = 10. #upward velocity resulting from gust\n", + "zt = 100.\n", + "g = 9.81\n", + "\n", + "u = numpy.array([z0, b0])\n", + "\n", + "# initialize an array to hold the changing elevation values\n", + "z = numpy.zeros(N)\n", + "z[0] = z0 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should pay attention to a couple of things: (1) See how there is a dot after the numbers used to define our parameters? We just want to be explicit (as a good habit) that these variables are real numbers, called \"floats.\" (2) We both _created_ and _initialized_ with zeros everywhere the solution vector `z`. Look up the documentation for the handy NumPy function `zeros()`, if you need to. (3) In the last line above, we assign the _initial value_ to the first element of the solution vector: `z[0]`.\n", + "\n", + "Now we can step in time using Euler's method. Notice how we are time stepping the two independent variables at once in the time iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-loop using Euler's method\n", + "for n in range(1,N):\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make sure you understand what this code is doing. This is a basic pattern in numerical methods: iterations in a time variable that apply a numerical scheme at each step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the code is correct, we have stored in the array `z` the position of the glider at each time. Let's use Matplotlib to examine the flight path of the aircraft.\n", + "\n", + "You should explore the [Matplotlib tutorial](http://matplotlib.org/users/pyplot_tutorial.html) (if you need to) and familiarize yourself with the command-style functions that control the size, labels, line style, and so on. Creating good plots is a useful skill: it is about communicating your results effectively. \n", + "\n", + "Here, we set the figure size, the limits of the vertical axis, the format of tick-marks, and axis labels. The final line actually produces the plot, with our chosen line style (continuous black line)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4)) #set plot size\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z, 'k-');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Explore and think" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try changing the value of `v` in the initial conditions. \n", + "\n", + "* What happens when you have a larger gust? \n", + "* What about a smaller gust? \n", + "* What happens if there isn't a gust (`v = 0`)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equation for phugoid oscillations is a 2nd-order, linear ODE and it has an exact solution of the following form:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z(t) = A \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + B \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $A$ and $B$ are constants that we solve for using initial conditions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our numerical solution used the initial conditions:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z(0) = z_0 \\\\\n", + "b(0) = b_0\n", + "\\end{eqnarray}$$\n", + "\n", + "Applying these to the exact solution and solving for $A$ and $B$, we get:\n", + "\n", + "$$\\begin{equation}\n", + "z(t) = b_0 \\sqrt{\\frac{z_t}{g}} \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + (z_0-z_t) \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We already defined all of these variables for our numerical solution, so we can immediately compute the exact solution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The expression is a bit long —if you don't feel like scrolling left and right, you can insert a line break in the code using a backslash '\\' _(without any trailing spaces)_ and Python will treat the next line as a continuation of the first." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot our exact solution! Even better, we can plot _both_ the numerical solution *and* the exact solution to see how well Euler's method approximated the phugoid oscillations.\n", + "\n", + "To add another curve to a plot, simply type a second `pyplot.plot()` statement. We also added a legend using the format\n", + "\n", + "```Python\n", + "pyplot.legend([\"line 1\",\"line 2\"])\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXZ3JngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4))\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z)\n", + "pyplot.plot(t, z_exact)\n", + "pyplot.legend(['Numerical Solution','Analytical Solution']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks like pretty good agreement, but what's happening towards the end? We'll come back to this. For now, re-run the previous steps with a different timestep, say $dt=0.01$ and pay attention to the difference.\n", + "\n", + "Euler's method, like all numerical methods, introduces some errors. If the method is *convergent*, the approximation will get closer and closer to the exact solution as we reduce the size of the step, $\\Delta t$. The error in the numerical method should tend to zero, in fact, when $\\Delta t\\rightarrow 0$—when this happens, we call the method _consistent_. We'll define these terms more carefully in the theory components of this course. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To compare the two solutions, we need to use a **norm** of the difference, like the $L_1$ norm, for example.\n", + "\n", + "$$ E = \\Delta t \\sum_{n=0}^N \\left|z(t_n) - z_n\\right|$$\n", + "\n", + "The $L_1$ norm is the sum of the individual differences between the exact and the numerical solutions, at each mesh point. In other words, $E$ is the discrete representation of the integral over the interval $T$ of the (absolute) difference between the computed $z$ and $z_{\\rm exact}$:\n", + "\n", + "$$ E = \\int \\vert z-z_\\rm{exact}\\vert dt $$\n", + "\n", + "We check for convergence by calculating the numerical solution using progressively smaller values of `dt`. We already have most of the code that we need. We just need to add an extra loop and an array of different $\\Delta t$ values to iterate through. \n", + "\n", + "You should read the documentation for the function [enumerate](https://docs.python.org/2/library/functions.html#enumerate) and make sure you understand how we're using it below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Warning" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below can take a little while to finish (the last $\\Delta t$ value alone requires 1 million iterations!). If the cell is still running, the input label will say `In [*]`. When it finishes, the `*` will be replaced by a number." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-increment array\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001, 0.0001])\n", + "\n", + "# array that will contain solution of each grid\n", + "z_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " N = int(T/dt)+1 # number of time-steps\n", + " ### discretize the time using numpy.linspace() ###\n", + " t = numpy.linspace(0.0, T, N)\n", + "\n", + " # initial conditions\n", + " u = numpy.array([z0, b0])\n", + " z = numpy.empty_like(t)\n", + " z[0] = z0\n", + " \n", + " # time loop - Euler method\n", + " for n in range(1,N):\n", + " ### compute next solution using Euler method ###\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0] # store the elevation at time-step n+1\n", + " \n", + " z_values[i] = z.copy() # store the total elevation calculation grid i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate the error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical solutions for each $\\Delta t$ in the array `z_values`. To calculate the error corresponding to each $\\Delta t$, we can write a function! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_error(z, dt):\n", + " \"\"\"Returns the error relative to analytical solution using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array of float\n", + " numerical solution.\n", + " dt : float\n", + " time increment.\n", + " \n", + " Returns\n", + " -------\n", + " err : float\n", + " L_{1} norm of the error with respect to the exact solution.\n", + " \"\"\"\n", + " N = len(z)\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt\n", + " \n", + " return dt * numpy.sum(numpy.abs(z-z_exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: in the last line of the function, we perform an 'array operation': \n", + "\n", + "`z - z_exact`\n", + "\n", + "We are *not* subtracting one value from another. Instead, we are taking the difference between elements at each corresponding index in both arrays. Here is a quick example:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2, 1])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = numpy.array([1, 2, 3])\n", + "b = numpy.array([4, 4, 4])\n", + "\n", + "b - a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we iterate through each $\\Delta t$ value and calculate the corresponding error. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "error_values = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " ### call the function get_error() ###\n", + " error_values[i] = get_error(z_values[i], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember, *if* the method is convergent then the error should get smaller as $\\Delta t$ gets smaller. To visualize this, let's plot $\\Delta t$ vs. error. If you use `pyplot.plot` you won't get a very useful result. Instead, use `pyplot.loglog` to create the same plot with a log-log scale. This is what we do almost always to assess the errors of a numerical scheme graphically." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nWtIESavUofkys59KukjSFElDJT0gaaGZbStJ7n6pu+/s7ru4e3Pbl4Yssi9f7eb72p626+75rp7r\nuL6z7aL42rq3P7OQ14XOM591Scqy0Nf2Ns9C1pdLnqX4Xe9sHXnm91xf1hVbnP/uZN/s3XaF5tmV\nSJo4d1/o7pPd/XZJ6zvZ5AxJ17n7Ne7+vLuPl/S6pJO7ek8zu1vSrZJGm9krZrZnX+uMw//ZpWri\nVqxY0W0dIcT5L6KunuvNX0RxzrLQ18bhL/a05BmXJo48wzVxpciyqzpCv47f9XCvLWUTF/klRsxs\npaRT3X1mbrm/pI8lHZlr8lq3u1jSTu6e6ePP45ArAABIjK4uMdKv1IXkYUtJG0t6s8P6tyRt3dc3\n7yoIAACAJOHsVAAAgASKYxP3jqR1kgZ3WD9YLXNxAAAAZS92TZy7r5H0uKQDOjy1v1rOUgUAACh7\nkczEmdlASTvkFjeS9BUzGyrpXXd/RdL/SLrezB5RS+N2klrm4S6Pol4AAIC4ieTsVDPLSGrKLbr+\ndX236e7+s9w2J0s6U9IQSX+SdLq731fiUgEAAGIp8kuMIBnMbIWkD9RyXb/33H2/aCtKPjPbRNKz\nkm51919GXU9SmdkgSYvVcmShv6TL3P3iaKtKptwF1a+X9AVJn0j6jbvfFm1VyWZmsyUNl9To7kdE\nXU8SmdlBki5Uy5G789z9mohLig2aOOTFzF6S9C13/39R15IWZvZbSZWSXnb3M6OuJ6nMbCNJ/d29\nOdcYPyNpD3d/O+LSEsfMtpa0lbs/bWaD1TKfvIO7r4q4tMQys+GSNpV0HE1c4cysn1p+pzOSVkp6\nQtL33P29KOuKi9id2IBY4xp7gZjZDpK+LmmhyLVP3H19m9vvfVbSaknN3bwEXXD3N9z96dyf31TL\n1QK2iLaqZHP3pZI+irqOBNtD0jPu/rq7fyRpgTY88bFs0cQhXy7pXjN7xMyOirqYFLhA0llRF5EW\nZraZmT0l6WVJU919ZdQ1JZ2Z7SppI3d/LepaUNa2kdR2H3xV0hcjqiV24njHBsTTD9z99dzhlrvN\n7E/u/qeoi0oiMztE0gvu/lcz2zvqetLA3T+Q9F0z20rSEjNrcPe/Rl1XUpnZFpJmSBoXdS0oe8x8\ndYNv4lLIzIaZ2Vwze9XM1pvZcZ1sc4qZvWRmq8zssbbNRO65ZWb2hJlVSJK7v5773zfU8nX2LqX6\nPFErQp57SjoyN2d4gaQTzGxy6T5RtIqxf7Zy97ckZSUNLfoHiYFiZGlmAyTNlnSuuz9Uuk8TvSLu\nm2XbiPQ1U0n/UPtv3r6k9t/MlTWauHQaKOlpSRMkrVKHv0DM7KeSLpI0RS3/sXtA0sLcmWly90vd\nfWd336V1WNzMNs299nOSfijpzyX7NNELmqe7n+3uX3b3r0r6v5KucvcpJfw8UQu9f27VZv/cTNI+\nufcvB6GzNEnTJTW5+42l+xixETTPti8tRfEx1adMJT0qaScz2yb3358DJd1Votrjz915pPihlrN5\nju2w7mFJV3RY94Kk33XxHl+V9GTu8SdJ1VF/riTn2WG74ySdH/XnSnKeknaXtCy3fy7r+H7l8giU\n5d5que3hE7ksl6nlrPTIP18S88w9f7ektyR9LOkVSXtG/dmSlqmkgyU9L+lFSeOi/hxxejATV2bM\nrL9aDoWe3+GpBkl7dfYad39JZXJ4qlC9ybMtd59RjLqSqpf756OSdi5yaYnTyyzvk7RxkUtLpN7+\nrrv7iGLWlWT5Zuru8yTNK2FpicHh1PKzpVr+kn6zw/q31HJrMxSGPMMiz3DIMizyDI9M+4gmDgAA\nIIFo4srPO2qZeRncYf1gSa+XvpzEI8+wyDMcsgyLPMMj0z6iiSsz7r5GLbfS6XjF6/3VclYQCkCe\nYZFnOGQZFnmGR6Z9x4kNKWRmAyXtkFvcSNJXzGyopHfd/RVJ/yPpejN7RC2/KCepZf7g8ijqjTvy\nDIs8wyHLsMgzPDItsqhPj+UR/qGWGwWvzz3WtfnztW22OVnSS2q5x+SjkvaOuu64PsiTPOP6IEvy\njPuDTIv7sFyAAAAASBBm4gAAABKIJg4AACCBaOIAAAASiCYOAAAggWjiAAAAEogmDgAAIIFo4gAA\nABKIJg4AACCBaOIAAAASiCYOAApkZgPM7AUz+0HUtQAoXzRxAFC4EyVtLmlKdxuZ2cZm9pyZbVOa\nsgCUE5o4ACiAmW0i6euSzpY03MxGdLP5rpK2cPd/lKQ4AGWFJg4ACnOKpEskXStpuaTfdLPtvpKa\nSlEUgPJDEwcAeTKz/yPpi+7+rLuvk1QnaU8zO6jDdj82s/+VdLqkz5nZ/5rZ1yMoGUCKmbtHXQMA\nJIKZ/UrSLe7+t9yySfqTpDXuvkuHbftLek/SLu7+QsmLBZB6fBMHAHkwsy0kbd7awEmSt/wr+BxJ\nQ81sTIeX/EDShzRwAIqFJg4A8lMt6Q8dV7r7HZKekFSX+2au1f6SsqUpDUA5ookDgB6Y2WBJ/d39\ntS42+S9J35R0VJt1I5Rr4sxsbzMbUNQiAZQdZuIAoAe5kxQelPRWN5tNl7RG0o7uvs7MPpa0l6Tn\nJE109/OKXiiAskITBwDdMLOtJb0kKZ9v0lzSz9x9hpldKGmtpLclXeHuHxexTABliCYOAAAggZiJ\nAwAASCCaOAAAgASiiQMAAEggmjgAAIAEookDAABIIJo4AACABKKJAwAASCCaOAAAgAT6/wsNBajn\noDeVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase tick font size\n", + "pyplot.grid(True) #turn on grid lines\n", + "pyplot.xlabel('$\\Delta t$', fontsize=16) #x label\n", + "pyplot.ylabel('Error', fontsize=16) #y label\n", + "pyplot.loglog(dt_values, error_values, 'ko-') #log-log plot\n", + "pyplot.axis('equal') #make axes scale equally;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the kind of result we like to see! As $\\Delta t$ shrinks (towards the left), the error gets smaller and smaller, like it should." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We calculated the error for several different timestep sizes using two nested `for` loops. That worked, but whenever possible, we like to re-use code (and not just copy and paste it!). \n", + "\n", + "Create a function that implements Euler's method and re-write the error analysis cell to use your function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/01_03_PhugoidFullModel.ipynb b/01_phugoid/01_03_PhugoidFullModel.ipynb new file mode 100644 index 0000000..87184de --- /dev/null +++ b/01_phugoid/01_03_PhugoidFullModel.ipynb @@ -0,0 +1,943 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, I. Hawke. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Full phugoid model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the third IPython Notebook of the series on the _phugoid model of glider flight_, our first learning module of the course [\"Practical Numerical Methods with Python\"](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about). In the first notebook, we described the physics of the trajectories known as phugoids obtained from an exchange of potential and kinetic energy in an idealized motion with no drag. We gave you a neat little code to play with and plot various phugoid curves.\n", + "\n", + "In the second notebook, we looked at the equation representing small perturbations on the straight-line phugoid, resulting in simple harmonic motion. This is a second-order ordinary differential equation, and we solved it numerically using **Euler's method**: the simplest numerical method of all. We learned about convergence and calculated the error of the numerical solution, comparing with an analytical solution. That is a good foundation!\n", + "\n", + "Now, let's go back to the dynamical model, and take away the idealization of no-drag. Let's remind ourselves of the forces affecting an aircraft, considering now that it may be accelerating, with an instantaneous upward trajectory. We use the designation $\\theta$ for the angle, and consider it positive upwards." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces-lesson3.png)\n", + "#### Figure 1. Forces with a positive trajectory angle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Figure 1, $L$ is the lift, $W$ is the weight, $D$ is the drag, and $\\theta$ the positive angle of the trajectory, instantaneously. \n", + "\n", + "In lesson 1, we wrote the force balance in the directions perpendicular and parallel to the trajectory for a glider in _equilibrium_. What if the forces are _not_ in balance? Well, there will be acceleration terms in the equations of motion, and we would have in that case:\n", + "\n", + "\\begin{align}\n", + "m \\frac{dv}{dt} & = - W \\sin\\theta - D \\\\\n", + "m v \\, \\frac{d\\theta}{dt} & = - W \\cos\\theta + L\n", + "\\end{align}\n", + "\n", + "We can use a few little tricks to make these equations more pleasing. First, use primes to denote the time derivatives and divide through by the weight:\n", + "\n", + "\\begin{align}\n", + " \\frac{v'}{g} & = - \\sin\\theta - D/W \\\\\n", + "\\frac{v}{g} \\, \\theta' & = - \\cos\\theta + L/W\n", + "\\end{align}\n", + "\n", + "\n", + "Recall, from our first lesson, that the ratio of lift to weight is known from the trim conditions—$L/W=v^2/v_t^2$— and also from the definitions of lift and drag, \n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "we see that $L/D=C_L/C_D$. The system of equations can be re-written:\n", + "\n", + "\\begin{align}\n", + " v' & = - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\\n", + " \\theta' & = - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v\n", + "\\end{align}\n", + "\n", + "It is very interesting that the first equation has the factor $C_D/C_L$, which is the inverse of a measure of the aerodynamic efficiency of the aircraft. It turns out, this is the term that contributes damping to the phugoid model: if drag is zero, there is no damping. Drag is never zero in real life, but as engineers design more aerodynam-ically efficient aircraft, they make the phugoid mode more weakly damped. At altitude, this is nothing but a slight bother, but vertical oscillations are unsafe during final approach to land, so this is something to watch out for!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The initial value problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to visualize the flight trajectories predicted by this model, we are going to need to integrate the spatial coordinates, which depend on both the forward velocity (tangential to the trajectory) and the trajectory angle. The position of the glider on a vertical plane will be designated by coordinates $(x, y)$ with respect to an inertial frame of reference, and are obtained from:\n", + "\n", + "\\begin{align}\n", + "x'(t) & = v \\cos(\\theta) \\\\\n", + "y'(t) & = v \\sin(\\theta).\n", + "\\end{align}\n", + "\n", + "Augmenting our original two differential equations by the two equations above, we have a system of four first-order differential equations to solve. We will use a time-stepping approach, like in the previous lesson. To do so, we do need *initial values* for every unknown:\n", + "\n", + "$$\n", + "v(0) = v_0 \\quad \\text{and} \\quad \\theta(0) = \\theta_0\\\\\n", + "x(0) = x_0 \\quad \\text{and} \\quad y(0) = y_0\n", + "$$\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve with Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We know how to apply Euler's method from the previous lesson. We replace each of the time derivatives by an approximation of the form:\n", + "\n", + "$$v'(t) \\approx \\frac{v^{n+1} - v^n}{\\Delta t},$$\n", + "\n", + "where we are now using a superscript $n$ to indicate the $n$-th value in the time iterations. The first differential equation, for example, gives:\n", + "\n", + "$$\\frac{v^{n+1} - v^n}{\\Delta t} = - g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2$$\n", + "\n", + "Alright, we know where this is going. At each time iteration $t^n$, we want to evaluate all the known data of our system to obtain the state at $t^{n+1}$—the next time step. We say that we are _stepping in time_ or _time marching_.\n", + "\n", + "The full system of equations discretized with Euler's method is:\n", + "\n", + "\\begin{align}\n", + "v^{n+1} & = v^n + \\Delta t \\left(- g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2 \\right) \\\\\n", + "\\theta^{n+1} & = \\theta^n + \\Delta t \\left(- \\frac{g}{v^n}\\,\\cos\\theta^n + \\frac{g}{v_t^2}\\, v^n \\right) \\\\\n", + "x^{n+1} & = x^n + \\Delta t \\, v^n \\cos\\theta^n \\\\\n", + "y^{n+1} & = y^n + \\Delta t \\, v^n \\sin\\theta^n.\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we've learned before, the system of differential equations can also be written as a vector equation:\n", + "\n", + "$$u'(t) = f(u)$$\n", + "\n", + "where\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix}.\n", + "\\end{align}\n", + "\n", + "It's a bit tricky to code the solution using a NumPy array holding all your independent variables. But if you do, a function for the Euler step can be written that takes any number of simultaneous equations. It simply steps in time using the same line of code:\n", + "\n", + "```Python\n", + "def euler_step(u, f, dt):\n", + " return u + dt * f(u)\n", + "```\n", + "\n", + "This function can take a NumPy array `u` with any number of components. All we need to do is create an appropriate function `f(u)` describing our system of differential equations. Notice how we are passing a _function_ as part of the arguments list to `euler_step()`. Neat!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we start by loading the modules and libraries that we need for this problem. We'll need a few transcendental functions, including the $\\log$ for a convergence study later on. And remember: the line `%matplotlib inline` is a magic function that tells Matplotlib to give us the plots in the notebook (the default behavior of Matplotlib is to open a pop-up window). In addition, we are importing the module `rcParams` to define notebook-wide plotting parameters: font family and size. Here we go!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log, ceil\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to set things up to start our numerical solution: the parameter \n", + "values and the _initial values_. You know what the acceleration of gravity is: 9.8 m/s$^2$, but what are good values for $C_D/C_L$, the inverse of the aerodynamic efficiency? Some possible values are given on a table in the Wikipedia entry for [lift-to-drag ratio](http://en.wikipedia.org/wiki/Lift-to-drag_ratio): a modern sailplane can have $L/D$ of 40 to 60, depending on span (and, in case you're interested, a flying squirrel has $L/D$ close to 2).\n", + "\n", + "For the _trim velocity_, the speed range for typical sailplanes is between 65 and 280 km/hr, according to Wikipedia (it must be right!). Let's convert that to meters per second: 18 to 78 m/s. We'll pick a value somewhere in the middle of this range.\n", + "\n", + "Here's a possible set of parameters for the simulation, but be sure to come back and change some of these, and see what happens!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 30.0 # trim velocity in m s^{-1} \n", + "C_D = 1/40 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = v_t # start at the trim velocity (or add a delta)\n", + "theta0 = 0 # initial angle of trajectory\n", + "x0 = 0 # horizotal position is arbitrary\n", + "y0 = 1000 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll define a function `f()` to match the right-hand side of Equation (15), the full differential system in vector form. This function assumes that we have available the parameters defined above. If you re-execute the cell above with different parameter values, you can just run the solution without re-executing the function definition." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare the code defining function `f(u)` with the differential equations, and convince yourself that it's right!\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix} \\nonumber\n", + "\\end{align}\n", + "\n", + "Now, Euler's method is implemented in a simple function `euler_step()`:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equations.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After defining a final time for the solution, and the time step $\\Delta t$, we can construct the grid in time using the NumPy function [`linspace()`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html). Make sure you study the decisions we made here to build the time grid: why do we add 1 to the definition of `N`, for example?\n", + "\n", + "Look at the code below, and make sure you understand the following aspects of it.\n", + "\n", + "* The NumPy array `u` contains the solution at every time-step, consisting of the velocity, angle and location of the glider. \n", + "* The first element of the array `u` is set to contain the initial conditions. \n", + "* In the `for`-loop, the function `euler_step()` is called to get the solution at time-step $n+1$. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100 # final time\n", + "dt = 0.1 # time increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u = numpy.empty((N, 4))\n", + "u[0] = numpy.array([v0, theta0, x0, y0])# fill 1st element with initial values\n", + "\n", + "# time loop - Euler method\n", + "for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to plot the path of the glider, we need the location (`x`, `y`) with respect to time. That information is already contained in our NumPy array containing the solution; we just need to pluck it out. \n", + "\n", + "Make sure you understand the indices to `u`, below, and the use of the colon notation. If any of it is confusing, read the Python documentation on [Indexing](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 3.00000000e+01 -1.11022302e-17 6.00000000e+00 1.00000000e+03]\n", + "[ 1000. 1000. 1000. ..., 1000. 1000. 1000.]\n", + "[ 3.00000000e+01 -1.11022302e-17 6.00000000e+00 1.00000000e+03]\n" + ] + } + ], + "source": [ + "# get the glider's position with respect to the time\n", + "print u[2]\n", + "x = u[:,2]\n", + "y = u[:,3]\n", + "print y\n", + "u[2]=euler_step(u[1],f,dt)\n", + "print u[2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to plot the path of the glider and get the distance travelled!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nfEtJjyq+OtMP69J+V0lXFvNcrPSG/neSjlf66Pa0bssvtd9K0meLeS5ROmJ0oKR/VLpQd42kiyRt\nU2qzQ9GvE0vLfpWkFUrnWQ4pnZq0WtI3pvAc7FIs733F8n4oab/S9j+qmG/b4venldb7GqUC6B+L\n7T5R0p8k/aq0/F8X835W6Z/MkNI5qV8slvN9Sdt2eV6q6+r2/D1W0m+VjiC/U9LhShd5LlQqqP4s\n6eU12328pLuUPiJ/TfG8HyZpgaSbO89Faf6/Kfr0m6I/ry8/R5L2rCz/cKUL1SYkLZJ0cPH15mK9\nt0p6cqXNnqUsVkv6pqQLJJ0j6amSDpL0kaJvZxfz/qqYd7TIbZfS8jqZvbfIZajazz7/bnYqlvsv\nRV/+VHnN7F6ad/9Shg/skvFwafpQl3XtpXTB7BpJX5b0jOK1doLSTvt5pfaHFMvcqtR+u9L01xev\nt38o1jtP0qpi+usr671fsayRLsvvfG0/hefKXbbzeZXlPKCYd3bx+/8U851ZWVZ1+jlKf/cnF9k+\nR9JVpdfH9sVzdkKx/hO19rW9sKa/MyV9qZjn68UyD5T0Qkk/Lh6/UNKWG/P9fVN9KRWsqyVdOIV5\nfzHZvEoXcndyPan0+BZKf/vr5Vhp/6xS+6c02I69Su1e1WO++aX59i49fmjp8ef0aP+uYr57JN2v\n7fz4mvpX6x3gi6+pfklaXHpD+ruNtMyuBX5lnl4Ffucf4XclzahMe6BSMdirQP1AMf2bklyZNkPS\neNH2/V3aPrm07O9X33yLImDSAr80/6JieT3bVJ6zayTtUJn+Ia1b4F8r6fM1y/pksZx3Ns2n9Pyu\nljSvS9vHFdP+LOmQyrQnSrq3mHZQTdt7JI13mXZtsdwX93iOHqF0XmvXf55KI2msUdq5mN0ji3sl\nvbcybUtJd0h6Y/H7a4t5b5G0dU1/fiHpPzfG30xluUcV6769xzxdC/zS9HIB3q3A/3Yx/Wtdpu1e\nbPdUl/8rVYpypZ3NNUo7XOsVMJP1v8Fz1XM7K/N+Rj0Kw2J65/VxRGXafsW0P0v6L0mPrkx/dun1\nsl6RrnTR6BpJX+wy7X6Sfl70bWkfz8F/Srqhz69fbqTXbJMC/+5i3mU95tm9lOsbS4/v0e3xLu0P\nLs13QoPtePxU2mnte81qSU8qPf6P3R7v0v61pfkesjEy4GvTfHGKDqaT8njDd7TWi4LTaD7PVPqI\n9N8jYnV5eqQL5N7Xo/0jJb1MNRdgFct7p9IRwHnuPd7y0oiongf9AqU38fvS2RFxe+WxBUoFdMcZ\nSgVrNx9S2r4X9bHuBSqO7kbEeqedRDp/9OtKR9JeW5n8LqUdqC9GxKU1bb/VR5863qp09PSKiPh8\nl+Wfr/QJzw7FvHUs6W2Vtn+R9Eilo/JSOv3sHqWj6sevtwD7GZIerh6vxVzZfqrSJzKhLs9TpNMv\nPthgkR+N9Uc6ubj4vqOk2uEOM/XriPhq+YGI+LlSQbyF0qc5V1bafE3p+dxJldFkilNMXlhMX+/C\n9uI95t1Kr8tXuMfwizV2krRbn19TGm9+Y3E6dbBzjcl656eXlKftUPr5/jXzTLX9ZDZ0+fd1/9Ay\nCnygfyOln79VM88lPdo/X+kf5d1Kp+N007kw7H5Kp4/U+W71gYi4NSJu6tFmY+i23tsj4nel38+M\niP+taX998X03Nx/nvjM8Y6/neKXSc/yUzgO2H6J0qouUdgDqnCxpvXOzJ+M0lvtI0bdey7+o6NvR\nrr8ZzdURcXP1wYj4XWfHKiJWKZ3+5Jr+vkLSpRHx46lvRTY6f2N/VpfXWqFX/lXrnQsdEXconUoh\nlYbSnSbGah6/qW56pIspOzvle1YmH1t8/2NEXFGz7M570rZKp3lMWUQ8PyJm9Pm1Y5N1AZs7xsHH\ndFIudHoeSbB9s9LRorKIiI15I51HFd9XRf0FWL/v0f6xxfdtJN1VXBNXFVo7pFuvO+GuVwRuIpOu\ntyh4X6p0Lu/+Srl0e+/ZXumUlUk5Xfz6MKXnZp7tk+pmLebZ3vYDIo2lXz5q+avuzaSI+KUaXJhd\n8gilTKPX8pVO9ZFSofQIpVMfqqaa6/uVjrwO2T6o86lEsTNzpKbvCBidv7HfVj8hK+n1N1Z1S83j\ndynlsE2DZbUtVL89fym+TzZ968rjnfeknWzXjYw01fekaS0i/mz7XqWDK71eF+Vp5U8z76iZZ6rt\nJ7Ohy7+v+4eWUeBjOikfUdpH6fz0Ok9UOgVDSkdiX66Nf3Oizk7GXT3m6TV8YOeI1I1KF2RONnRe\n7WgQ1dN7NqG6okvSX8eR/qbSzaquUvrY/+da+49iL6Uj2VKzoQPLR/M+pCkMmVpaZ7ltr+z6NdXl\nl3cK645O9nx+OyLi+7Z/orTz8gqt/UToX5R2mj4zleVkaEP/xqqm9HxOI2s2cHpV53V4rdK5+pP9\nTd7QcPnTzfVKp7f1Oj2oPO3/Sj/fpPTp7NZ9tp9K37otY6rLb9r+L2q2M42WUeBjOvmG0j/zLZU+\nGv5U3YxRGvPY9n11mkqnYJzZY571hoAs6Qybt01x3uwgWqxU3N+qdCHXqvJE93+n39tKP98dET/r\ns+22fa5/qsvv9dooT7utdq6pe7/Szs7zbZ+qdIRunqSPxEa8Q+wmtqF/Y2im8zrc6r54T7L9n0qj\nxvTjzoj4m43Znym4Qmn0rL17zFOe9teDUBGxxvbPlEZ8mmr7ulMZ1xMRv7N9i9JgA1NZ/h0R8evK\nuqIyT6/2V3W5zgsZ4xx8TBsR8UdJH1U6qnScu4yfvol1isqdXRovvaLXOb2d8bV3tL1b3Uy2D7T9\nEncZN30a+HulfyLfrxb3GyIi7tTa01/27TWv7eNtH1t66Celnx/Wo939ijHMm96U6GqtPeJcu/zS\ntImizYb6pFKBto3SDWyeqzQEapOLUHPT+Rvby/aMmnmm23nzOev8bezV4z1Ntg8p3pMe2HD50+Yi\n20LnTsz72q7byTyw+H5DRFQ/Vf6y0v+rx/VYR6f9pRFRd0pVna9Mcfmhtdsi6a/XnnSua+nV/nFF\n+y827BtaNm0LfNuHOt2cpvYGOBhIiyX9TqlweWPvWe9z5TsbPrVmnl4XxnaGupN6H9X6oNKIKf0e\n7Z6qznm56xS0to+zPdznMjvvMXVF8t59LleSzi+We5jt7bvNYPtvlcZJ/+vzG+mOj98v2j69x/K/\nqfSRdLXQWe95sj27eJ4eUBwt/8IUlv90pX+cFxQj42yQ4jqQTxTrfbnSqWlfiYjrezbMW+dv7H5K\no+l00+tvbGMoZ1PO/Am2j94IyzmgeO3k8P/4/OL7ZDc2+pjSCF/VEYl6moYX2X5O6V4WM5TundDN\nMUp/x+d0mfZxpdx3t31IdWJxkOqoov1H+uhfp82Bth/UZfm7ae2F0N1ucPcRFTfBsl29HkPF+/4s\npVPbPt5H/9CiHN5QGrG9je3TlcZGfoSmeF617YOd7rZ5U3H3wittn1ZcADhZ22cVbX/ndBfFG5zu\nwvkfdUdVi7sLLnW68+JdRdtzbe/TaIOxjmJYvKOVTvn4N9uv7DV/Ufg9qtc8G9CXH2ntEZp/qx5h\ntL2L0k1G6tpfpVS8W9Jp3Y6G2Z6n9BHvmV2G99vYOudX/rUfth+sdAOlfu9ieInS9j2puOCzqvb5\nmYJ3KY2Dv62kt1cnFnm8V2ms8CWVya9R+sd7lO3Hd2n7DKV/jJ/o8ryv9zwpXeA6qrVDz71J6RSZ\nR9teb6hS2y9QuuD4NtUPIdqP9xffZyvdpbLntQm2H+O1d0Xt9WlDKyLiW0rv9Zb0hup023sqXcB9\nXypf+1LO/HRJb5nqQiLiHq09Baa8nNdJ+nBEND1ffqOLiMu1didxcbdhMG3/P6XTVt41jU/9mpKI\nuE3pQJIlvdH2Ohej2n6h0o2ufqv132MUEdcovQdZ0tu67MQtVHot/FhdCnCnu4BfXdQPT+6y/O8o\n7YRsIenfu2zCvyvtnPx3RHQb0etcpfsC7KDKsKjFJ5dvV6qx3l8+7RXTRL8D6LfxpfSR9kqlj+YP\n1yQ3KCq1O17p3O0VSv+0Z0s6Vekf/w8kzaxpt4XSXuutkl6tVCjOUro99E+Kdf99l3Z7KN0A6DZJ\nL1a6Wc/TlS4uvFNdbpjEV+PXwkOVjrCuVnqD+n9KR/Ieq1TYnKg0PvitxTw3Snpzqf1MpQJrTul1\n9PTisZlK5/nvr8pdCovHdiwtZ1elcxlXK10jcJRSQf7CIu9PdFn+dqX291O6Gc1qpdM05irdkXKO\nUrH2Z6Wbad2vS9/nlpa9f/G11wY8pw9WOrXkz8W2HiTp08XfyQGl56Tbc7Z3zTL31No72V6rVIwd\nVDxPFypdAFpd1paVnHvdKGz/0vI/XfxtDiuN///Dou8n1vTtWKXTY27V2jvZPlnpTrOdj6+36dJu\nQdGnHysdVT5K6eK1yyrzPbVY9oRSIfj44ustxfO8SpX3guL19Ogi+85dhTvZ7thtO7r07+Ki7dVT\nmLdzp+C/qMFdKiU9oOjTK7T2Tradfj68mGf74vfOjaRWK/1t7q904eFWxc8HlqYfWzx2/9K6HqR0\ngfZqSV8tMu7cNfkqpcK/251y3WP5WxfzPLJ4vjvvE/9aXX8x37eL6cuK5Z1S/L644d/Yx4t2X1T6\nOzhB6X/Cx4rpDyv68z9Fn88r+vOQ0t9ot+l7VNp33pOWlrdnKturdIrXBcX0nxV9HCqe948Ur5XP\nStpiU73fb+hXsd37l56bzs0F13nN9mj/3uL5+IHSxccHKhXEdytdaPy3PdrOUCrCVyudUvN0pfeB\ndxWP/ULSg2ravqn02j2vZp7tlN6rVhevh8OU3pc+VrT9QfX1XGm/h9bevOwMpbs1P614ja5W+hRt\n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\nouXLl68z30UXXaSRkZH12p988slatmzZOo+Nj49rZGREq1atWufxRYsWacmSJes8dv3112tkZEQr\nV657vfBZZ5213tGEiYkJjYyMrDdW7+joqObOnbte34477rhpvR2nnHLKQGxHxyBtx0Me8pCB2I5B\nyaO8HaeccspAbIc0GHlUt6Pzvjbdt6NsULZj5cqVA7Ed0zmP0dHRv9Zis2fP1gEHHKBTTz11veXk\nwg1HnsyK7TVKI9bMjojru0zfQtItSufFz+l2cyzb35H0BEmvjoj3FI89rMdqvy1pL0kvlHRp8diN\nEXFn0fZMpTHuPxkRJ3RZ3zylcfWviIgDarZrSNLY2NiYhoaGenQFAAAAbRgfH9fw8LAkDUfEeNv9\nKRvoI/jFxbGfVxoG8/DqdNs7KA2PuUbS50rtflX3JekvxWy/Kz1+Z2mxnym+P6WmW09X2in59IZs\nGwAAANDNQBf4hbdLulfSXNv3r0ybL2lrpbvc/t/GWFlEXCLpm5L2sr3OzayKTwaOlrRK0tkbY31o\nR/XjQeSDbPJFNnkjn3yRDZqadgW+7V1s7267fI77bsVju1fnL25Q9VJJu0j6iu1Dbc+2/Wqli2gv\nk9TzJCrb25XW2blYd+fisV26NHmRpOskfdj2Sbb3tj1H0peUPi04triLLqaphQsXtt0F1CCbfJFN\n3sgnX2SDpqbdOfi2r9XaC13XmSQpIqLraDm2D5L0eqXz7beXdK2k/5L0zoi4d5J1LpK0SOnUmqrr\nImK9c/aL03/eIOkYSQ9WGpXnYklvi4irJlkf5+Bn7vrrr2dUg0yRTb7IJm/kky+yyVPO5+BPuwJ/\nc0CBDwAAkLecC/xpd4oOAAAAgHoU+AAAAMAAocAH+lC9+QbyQTb5Ipu8kU++yAZNUeADfZiYmGi7\nC6hBNvkim7yRT77IBk1xkW2GuMgWAAAgb1xkCwAAAGCToMAHAAAABggFPtCHVatWtd0F1CCbfJFN\n3sgnX2SDpijwgT7Mmzev7S6gBtnki2zyRj75Ihs0RYEP9GHx4sVtdwE1yCZfZJM38skX2aApCnyg\nD4xulC+yyRfZ5I188kU2aIoCHwAAABggFPgAAADAAKHAB/qwbNmytruAGmSTL7LJG/nki2zQFAU+\n0Ifx8axuWIcSsskX2eSNfPJFNmjKEdF2H1Bhe0jS2NjYGBfWAAAAZGh8fFzDw8OSNBwRWe2FcQQf\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# visualization of the path\n", + "pyplot.figure(figsize=(8,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'x', fontsize=18)\n", + "pyplot.ylabel(r'y', fontsize=18)\n", + "pyplot.title('Glider trajectory, flight time = %.2f' % T, fontsize=18)\n", + "pyplot.plot(x,y, 'k-', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grid convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's study the convergence of Euler's method for the phugoid model. In the previous lesson, when we studied the straight-line phugoid under a small perturbation, we looked at convergence by comparing the numerical solution with the exact solution. Unfortunately, most problems don't have an exact solution (that's why we compute in the first place!). But here's a neat thing: we can use numerical solutions computed on different grids to study the convergence of the method, even without an analytical solution.\n", + "\n", + "We need to be careful, though, and make sure that the fine-grid solution is resolving all of the features in the mathematical model. How can we know this? We'll have a look at that in a bit. Let's see how this works first.\n", + "\n", + "You need a sequence of numerical solutions of the same problem, each with a different number of time grid points.\n", + "\n", + "Let's create a NumPy array called `dt_values` that contains the time-increment of each grid to be solved on. For each element `dt_values[i]`, we will compute the solution `u_values[i]` of the glider model using Euler's method. If we want to use five different values of $\\Delta t$, we'll have five solutions: we put them in an array ... but each one is also an array! We'll have an array of arrays. How meta is that?\n", + "\n", + "We have one more trick up our sleeve: `enumerate()`. To get all the numerical solutions—each with its value of $\\Delta t$—done in one fell swoop, we will loop over the elements of the array `dt_values`. Within the loop, we need to access both `dt_values[i]` and the index `i`. It turns out, `enumerate()` is a built-in Python function that will give us consecutive `index, value` pairs just like we need. \n", + "\n", + "Read the code below carefully, and remember: you can get a help pane on any function by entering a question mark followed by the function name. For example, add a new code cell below and type: `?numpy.empty_like`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), we compared our numerical result to an analytical solution, but now we will instead compare numerical results from different grids. \n", + "\n", + "For each solution, we'll compute the difference relative to the finest grid. You will be tempted to call this an _\"error\"_, but be careful: the solution at the finest grid is _not the exact_ solution, it is just a reference value that we can use to estimate grid convergence.\n", + "\n", + "To calculate the difference between one solution `u_current` and the solution at the finest grid, `u_finest`, we'll use the $L_1$-norm, but any norm will do.\n", + "\n", + "There is a small problem with this, though. The coarsest grid, where $\\Delta t = 0.1$, has 1001 grid points, while the finest grid, with $\\Delta t = 0.001$ has 100001 grid points. How do we know which grid points correspond to the same location in two numerical solutions, in order to compare them? \n", + "\n", + "If we had time grids of 10 and 100 steps, respectively, this would be relatively simple to calculate. Each element in our 10-step grid would span ten elements in our 100-step grid. \n", + "\n", + "Calculating the _ratio_ of the two grid sizes will tell us how many elements in our fine-grid will span over one element in our coarser grid.\n", + "\n", + "Recall that we can _slice_ a NumPy array and grab a subset of values from it. The syntax for that is\n", + "\n", + "```Python\n", + "my_array[3:8]\n", + "```\n", + "\n", + "An additional slicing trick that we can take advantage of is the \"slice step size.\" We add an additional `:` to the slice range and then specify how many steps to take between elements. For example, this code\n", + "\n", + "```Python\n", + "my_array[3:8:2]\n", + "```\n", + "\n", + "will return the values of `my_array[3]`, `my_array[5]` and `my_array[7]`\n", + "\n", + "With that, we can write a function to obtain the differences between coarser and finest grids. Here we go ..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = ceil(N_fine/N_current)\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the function has been defined, let's compute the grid differences for each solution, relative to the fine-grid solution. Call the function `get_diffgrid()` with two solutions, one of which is always the one at the finest grid. Here's a neat Python trick: you can use negative indexing in Python! If you have an array called `my_array` you access the _first_ element with\n", + "\n", + "`my_array[0]`\n", + "\n", + "But you can also access the _last_ element with \n", + "\n", + "`my_array[-1]`\n", + "\n", + "and the next to last element with\n", + "\n", + "`my_array[-2]`\n", + "\n", + "and so on. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dt = 0.1\n", + "dt = 0.05\n", + "dt = 0.01\n", + "dt = 0.005\n", + "dt = 0.001\n" + ] + } + ], + "source": [ + "# compute difference between one grid solution and the finest one\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " print('dt = {}'.format(dt))\n", + "\n", + " ### call the function get_diffgrid() ###\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to create a plot of the results! We'll create a *log-log* plot with the Matplotlib function [`loglog()`](http://matplotlib.org/api/pyplot_api.html?highlight=loglog#matplotlib.pyplot.loglog). Remember to skip the difference of the finest-grid solution with itself, which is zero." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIh\nZGatzGyLmZ1Sibanm9nPkhGXSLIpSYmE0/1AE+APlWj7Z6BHYsMRCYaSlEjImNmPgM3ANKCnmZ1X\nTtss4GLgv5IUnkhSaasOkZAxs/HAEOAYIhsdvu3u/1ZG27bAB8Cx7r41eVGKJId6UiIhYmYXA/90\n9x3uvgp4DuhoZpeXaJdjZi8CfwO2AE+Y2ejkRyySWOpJiYSImU0C/t3d90RfHwusAv7H3Q8b9jOz\nmcB6dx+U3EhFkkM9KZGQMLNuwJv7ExSAu39FZHvuc8zsmhLtawA/BRYkNVCRJFJPSiQEohMgXnT3\n60s51xBYDWwHznD3oujxC4D3gObuvjmZ8Yoki3pSIuFwAzCptBPu/i2RqehtgJsOOtWRyDCgEpSk\nLSUpkYCZWW2go7u/UU6zMcAaYLiZ1Y0e60h0qM/MapvZgwkNVCQANYMOQES4DXAzu7OCdp8CXYhM\nTx8BNAdmRc/dCbyYsAhFAqKalEiAor2itUCzSr7Fga+BVkA3oDewFHjL3RcmJEiRAClJiYhIaKkm\nJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIi\nofX/ARE7ZqFnKYAXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# log-log plot of the grid differences\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel('$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='-', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Order of convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order of convergence is the rate at which the numerical solution approaches the exact one as the mesh is refined. Considering that we're not comparing with an exact solution, we use 3 grid resolutions that are refined at a constant ratio $r$ to find the *observed order of convergence* ($p$), which is given by:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p = \\frac{\\log \\left(\\frac{f_3-f_2}{f_2-f_1} \\right) }{\\log(r)}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $f_1$ is the finest mesh solution, and $f_3$ the coarsest. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is p = 1.014\n" + ] + } + ], + "source": [ + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values2 = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values2 = numpy.empty_like(dt_values2, dtype=numpy.ndarray)\n", + "\n", + "diffgrid2 = numpy.empty(2)\n", + "\n", + "for i, dt in enumerate(dt_values2):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + "\n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values2[i] = u\n", + " \n", + "\n", + "#calculate f2 - f1\n", + "diffgrid2[0] = get_diffgrid(u_values2[1], u_values2[0], dt_values2[1])\n", + "\n", + "#calculate f3 - f2\n", + "diffgrid2[1] = get_diffgrid(u_values2[2], u_values2[1], dt_values2[2])\n", + "\n", + "# calculate the order of convergence\n", + "p = (log(diffgrid2[1]) - log(diffgrid2[0])) / log(r)\n", + "\n", + "print('The order of convergence is p = {:.3f}'.format(p));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See how the observed order of convergence is close to 1? This means that the rate at which the grid differences decrease match the mesh-refinement ratio. We say that Euler's method is of *first order*, and this result is a consequence of that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Paper airplane challenge" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose you wanted to participate in a paper-airplane competition, and you want to use what you know about the phugoid model to improve your chances. For a given value of $L/D$ that you can obtain in your design, you want to know what is the best initial velocity and launch angle to fly the longest distance from a given height.\n", + "\n", + "Using the phugoid model, write a new code to analyze the flight of a paper airplane, with the following conditions:\n", + "\n", + "* Assume $L/D$ of 5.0 (a value close to measurements in Feng et al. 2009)\n", + "* For the trim velocity, let's take an average value of 4.9 m/s.\n", + "* Find a combination of launch angle and velocity that gives the best distance.\n", + "* Think about how you will know when the flight needs to stop ... this will influence how you organize the code.\n", + "* How can you check if your answer is realistic?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Feng, N. B. et al. _\"On the aerodynamics of paper airplanes\"_, AIAA paper 2009-3958, 27th AIAA Applied Aerodynamics Conference, San Antonio, TX. [PDF](http://arc.aiaa.org/doi/abs/10.2514/6.2009-3958)\n", + "\n", + "* Simanca, S. R. and Sutherland, S. _\"Mathematical problem-solving with computers,\"_ 2002 course notes, Stony Brook University, chapter 3: [The Art of Phugoid](https://www.math.sunysb.edu/~scott/Book331/Art_Phugoid.html). (Note that there is an error in the figure: sine and cosine are switched.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/01_04_Second_Order_Methods.ipynb b/01_phugoid/01_04_Second_Order_Methods.ipynb new file mode 100644 index 0000000..dfe6da7 --- /dev/null +++ b/01_phugoid/01_04_Second_Order_Methods.ipynb @@ -0,0 +1,1187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, C.D. Cooper. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid model: bonus!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_The phugoid model of glider flight_ has been such a fun problem to showcase the power of numerical solution of differential equations, we thought you'd enjoy a bonus notebook. The previous lessons were:\n", + "\n", + "* [Phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) —Lays the groundwork for our fun problem, with some context, a little history and a description of the physics of phugoids: curves representing the trajectory of a glider exchanging potential and kinetic energy, with no drag.\n", + "* [Phugoid oscillation](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) —Develops the simple harmonic motion of an aircraft experiencing a small perturbation from the horizontal trajectory: our opportunity to introduce Euler's method, and study its convergence via an exact solution.\n", + "* [Full phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) —The full model takes into account the force of drag and results in a system of two nonlinear equations. We obtain the trajectories using Euler's method in vectorized form, introduce grid-convergence analysis and finish with the paper-airplane challenge!\n", + "\n", + "That is a fantastic foundation for numerical methods. It's a good time to complement it with some theory: the first screencast of the course uses Taylor series to show that _Euler's method is a first-order method_, and we also show you graphical interpretations. Many problems require a more accurate method, though: second order or higher. Among the most popular higher-order methods that we can mention are the _Runge-Kutta methods_, developed around 1900: more than 100 years after Euler published his book containing the method now named after him!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Euler's method is a first-order method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this screencast, we use a Taylor series expansion to analyze Euler's method and show that it incurs a truncation error of first order. We also use a graphical interpretation to motivate the _modified_ Euler method, which achieves second order." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('6i6qhqDCViA')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second-order methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The notebook on phugoid oscillation (lesson 2) included a study of the accuracy obtained with Euler's method, using the exact solution for the simple harmonic motion. We made a _convergence plot_ and saw that as $\\Delta t$ gets smaller, the error also gets smaller. \n", + "\n", + "We could have drawn a line with a slope equal to 1 on that log-log plot, and you would have seen that it was parallel to the convergence line. A slope equal to 1 on a log-log convergence plot is an indication that we have a first-order method: the error scales as ${\\mathcal O}(\\Delta t)$. \n", + "\n", + "In lesson 3, using the full phugoid model (which is nonlinear and does not have an exact solution), we did a _grid-convergence study_ with three different grids, and obtained the _observed_ order of convergence—it was very close to 1, indicating a slope of 1 on a log-log plot.\n", + "\n", + "Another way to look at an ${\\mathcal O}(\\Delta t)$ method is to say that the error scales _linearly_ with the step size, or that they are proportional:\n", + "\n", + "$$ e \\propto \\Delta t.$$\n", + "\n", + "where $e$ stands for the error. To get more accuracy, we could use a _second-order_ method, in which the error is ${\\mathcal O}(\\Delta t^2)$. In general, we say that a method is of order $p$ when the error is proportional to $(\\Delta t)^p$.\n", + "\n", + "In the screencast titled \"Euler's method is a first-order method,\" we used a graphical interpretation to get an idea for improving it: by estimating an intermediate point, like the **midpoint**, we can get a better approximation of the area under the curve of $u^\\prime$. The scheme has two steps and is written as:\n", + "\n", + "\\begin{align}\n", + "u_{n+1/2} & = u_n + \\frac{\\Delta t}{2} f(u_n) \\\\\n", + "u_{n+1} & = u_n + \\Delta t \\,\\, f(u_{n+1/2}).\n", + "\\end{align}\n", + "\n", + "This method is known as the *explicit midpoint method* or the *modified Euler method*, and it is a second-order method. Notice that we had to apply the right-hand side, $~f(u)$, twice. This idea can be extended: we could imagine estimating additional points between $u_{n}$ and $u_{n+1}$ and evaulating $~f(u)$ at the intermediate points to get higher accuracy—that's the idea behind Runge-Kutta methods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Runge-Kutta methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the modified Euler method, we improve the accuracy over Euler's method by evaluating the right-hand side of the differential equation at an intermediate point: the midpoint. The same idea can be applied again, and the function $f(u)$ can be evaluated at more intermediate points, improving the accuracy even more. This is the basis of the famous *Runge-Kutta (RK) methods*, going back to Carl Runge and Martin Kutta. The modified Euler method corresponds to _second-order_ Runge-Kutta.\n", + "\n", + "Here's a bit of historical coincidence that will blow your mind: Carl Runge's daughter Iris—an accomplished applied mathematician in her own right—worked assiduously over the summer of 1909 to translate Lanchester's _\"Aerodonetics.\"_ She also reproduced his graphical method to draw the phugoid curves (Tobies, 2012)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phugoid model with 2nd-order RK" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compute the motion of a glider under the full phugoid model using the second-order Runge-Kutta method. We'll build on the _paper airplane challenge_ of lesson 3 now, and look for the horizontal distance that the plane travels until the moment it touches the ground. \n", + "\n", + "As usual, let's start by importing the libraries and modules that we need, and setting up the model parameters. We also set some default plotting formats using the [`rcParams`](http://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.rcParams) module. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the paper-airplane challenge of lesson 3, we suggested an $L/D=5.0$ as a realistic value for paper airplanes, according to experiments, and a trim velocity of 4.9 m/s. Let's start with those values, but you could experiment changing these a bit. _What do you think will happen if you make $L/D$ higher?_" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Among the initial parameters that we suggest for your first experiment, we are starting with a velocity a little higher than the trim velocity, launch the paper airplane with a negative initial angle, and take the initial height to be 2 meters—all sound like reasonable choices.\n", + "\n", + "Now, we can define a few functions to carry out the computation:\n", + "* The right-hand side of the phugoid model from [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb),\n", + "* One step of the Euler's method that we learned in [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), and\n", + "* Differences with respect to a fine grid, as in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])\n", + "\n", + "\n", + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)\n", + "\n", + "\n", + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = int(numpy.ceil(N_fine/N_current))\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we also need to define the function `rk2_step()` that computes the next time step using the *modified Euler* method of equations $(1)$ and $(2)$, above, otherwise known as 2nd-order Runge-Kutta or RK2. This function will be called over and over again within the time loop." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rk2_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using 2nd-order Runge-Kutta.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at the next time step.\n", + " \"\"\"\n", + " u_star = u + 0.5*dt*f(u)\n", + " return u + dt*f(u_star)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we first need to set up the time discretization, then initialize arrays to save the solution and we are set to go! The only difference this time is that we are using _both_ Euler's method and 2nd-order Runge-Kutta to get a solution, to compare the two. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "\n", + "# set initial conditions\n", + "u_euler = numpy.empty((N, 4))\n", + "u_rk2 = numpy.empty((N, 4))\n", + "\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_euler[0] = numpy.array([v0, theta0, x0, y0])\n", + "u_rk2[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "\n", + "# use a for loop to call the function rk2_step()\n", + "for n in range(N-1):\n", + " \n", + " u_euler[n+1] = euler_step(u_euler[n], f, dt)\n", + " u_rk2[n+1] = rk2_step(u_rk2[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can get the position of the glider in time, according to both Euler's method and the 2nd-order Runge-Kutta method, by extracting the appropriate portions of the solution arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x_euler = u_euler[:,2]\n", + "y_euler = u_euler[:,3]\n", + "x_rk2 = u_rk2[:,2]\n", + "y_rk2 = u_rk2[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### How far will it fly before touching the ground?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the $y$-axis measures the vertical coordinate with respect to the ground, negative values of $y$ don't have any physical meaning: the glider would have hit the ground by then! To find out if there are any negative $y$ values we can use the handy function [`numpy.where`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html). This function returns the **indices** of the elements in an array that match a given condition. For example, `numpy.where(y_euler<0)[0]` gives an array of the indices `i` where `y_euler[i]<0` (the `[0]` is necessary as `numpy.where` returns an array, which in this case contains a single line). If no elements of the array match the condition, the array of indices comes out empty. \n", + "\n", + "From the physical problem, we know that once there is one negative value, the glider has hit the ground and all the remaining time-steps are unphysical. Therefore, we are interested in finding the _first_ index where the condition applies, given by `numpy.where(y_euler<0)[0][0]`—do read the documentation of the function if you need to! " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_euler = numpy.where(y_euler<0.0)[0]\n", + "if len(idx_negative_euler)==0:\n", + " idx_ground_euler = N-1\n", + " print ('Euler integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_euler = idx_negative_euler[0]\n", + " \n", + "idx_negative_rk2 = numpy.where(y_rk2<0.0)[0]\n", + "if len(idx_negative_rk2)==0:\n", + " idx_ground_rk2 = N-1\n", + " print ('Runge-Kutta integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_rk2 = idx_negative_rk2[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Do Euler and RK2 produce the same solution?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An easy way to compare the numerical results obtained with the Euler and 2nd-order Runge-Kutta methods is using [`numpy.allclose`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html). This function compares each element of two arrays and returns `True` if each comparison is within some relative tolerance. Here, we use the default tolerance: $10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Are the x-values close? False\n", + "Are the y-values close? False\n" + ] + } + ], + "source": [ + "# check to see if the paths match\n", + "print('Are the x-values close? {}'.format(numpy.allclose(x_euler, x_rk2)))\n", + "print('Are the y-values close? {}'.format(numpy.allclose(y_euler, y_rk2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hmmm, they do differ. Maybe $10^{-5}$ is too tight a tolerance, considering we're using a somewhat coarse grid with first- and second-order methods. Perhaps we can assess this visually, by plotting the glider's path? Study the code below, where we are plotting the path twice, taking a closer look in the second plot by \"zooming in\" to the beginning of the flight." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n+eWXL1nerVu3i92pp06dMq1atTKNGzc2x9PpOsjI4cOHjYiY0qVLZysHb3mznwlAdyrQBfgFKOFF\n2RbAH8BB3IdmAAAgAElEQVT6VK/tWN2pu+z3T6Szbo6+L6WC3d69e02FChXMlClT/lm4caMxVata\nP4PF6tXGtGqVbpfuuHHjzI033mhOnTqV46q8PYdpd6qfrVixgh07djB69GhmzJgR8KcbBGIOoHr1\n6rF79252797tSP0qYxcuXCA+Ph4R4ZZbbvFY5tChQzRu3JiCBQuyaNEiChYsmOV6VtkDgDt06JCj\neEOBiNwLDAXijDGH7GWtRaRXqjIlxZ57xxiz0BhT1hhzY8oLSLml7Ul72bOBziPQ3HI+cEse4Hwu\nf/31Fy1atOC+++7jgQce+OeDqlXh55+tn17yey5168KXX6bbpTtkyBCqVatG79690x2q4mvaiPOz\npC1bWNysGU888USOHswbzHLlykXr5s2Z/9lnToei0ti/fz99+vRh7969DBo0iFq1anks16NHDzZs\n2MDIkSMvn0jTC8YYXnzxRWJiYhgxYkROww5qItIZmAG8CTQXkXvtRl0boLRdpgGwD5ia0abS/FQq\nrJw5c4a2bdvSpEkThg8ffnmBXKE14ktEeO2119iwYQMzZswITKXeXK4L9RdOdUecPGmOFi9uRleu\n7Mpu1NT233CDeaJ2bUdjyPZ+HjXKGOtm8ktfo0b5tnx6n/tASndqVFSUKVWqlClVqpTJly+fERFT\nu3Zt88MPP3hcL6U7tU6dOkZETJkyZcz27duzXP/kyZNNdHS0+fbbb3OaSqa82c/4sTsVOAokYXWF\npn4lASPtMjWAI3joIgVKATuB/fY6h+33ddKpL+dfmlJBJikpydx1112mY8eOrvv9uHnzZlOsWDGz\nfv36bG/D23OY4w2sQLycOgkeu+su80FUlNmxY4cj9QfS6aefNq/nzm3+/vtvx2II5192nsbEnT59\n2owYMcKIiGnVqpXHaWBSGnErVqwwvXv3NiJirr76avPbb795XffHH39soqOjzWeffeaTXDLjdCMu\n0K9wPq6Vew0fPtw0aNDAnDlzxhprtnix0yFlz4ULxniY2uTtt982VapUMadPn87WZr09h2l3qp8k\nfvghJz//nB969qRixYqOxRGo8Q55O3TgvyIsWbTIkfrV5fLmzcuzzz5LXFwcCxYs4PXXX0+3rIgw\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(10,6))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler[:idx_ground_euler], y_euler[:idx_ground_euler], 'k-', label='Euler')\n", + "pyplot.plot(x_rk2[:idx_ground_rk2], y_rk2[:idx_ground_rk2], 'r--', label='RK2')\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_rk2[idx_ground_rk2-1]))\n", + "pyplot.legend();\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler, y_euler, 'k-', label='Euler')\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From far away, the Euler and RK2 methods seem to be producing similar answers. However, if we take a closer look, small differences become evident. Keep in mind that we are solving the same equation and both methods will converge to the same solution as we refine the grid. However, they converge to that solution at different rates: RK2 gets more accurate faster, as you make $\\Delta t$ smaller." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grid-convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we want to do a grid-convergence study with RK2, to see if we indeed observe the expected rate of convergence. It is always an important step in a numerical solution to investigate whether the method is behaving the way we expect it to: this needs to be confirmed experimentally for every new problem we solve and for every new method we apply!\n", + "\n", + "In the code below, a `for`-loop computes the solution on different time grids, with the coarsest and finest grid differing by 100x. We can use the difference between solutions to investigate convergence, as before." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for-loop to compute the solution on different grids\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once those runs are done, we compute the difference between each numerical solution and the fine-grid solution." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# compute diffgrid\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "for i, dt in enumerate(dt_values):\n", + "\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we plot!" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nicaKFSu44YYbWLVqFR9//HHU4UgBmUymza7Dqqy9lhRJb+kkfdpm0qUpfxdffDGTJk3iuOOO449/\n/GPU4VQs6bkLe/aaiEjNNDc3M2XKFMyMa665JupwpEJq6RSR9JaOSByMGDGCX/3qV5x++un86le/\nijocKYFaOiISW4cffji9e/fm6quvjjoUCYGKToql+VmBJEhL/i666CKam5vp27dv1KGEJi25y6cq\nRcfMZlfjviKSTttsU9FEW6kjpeynE2QTt0nu3rWSwOqBmfn48eM1ZVpEpAQtU6YnTJgQfMFPbeKm\niQQiIuWodCLB+8BRwODcayjwMnAHMILspm1H5/77DmAx2U3fpM6luV85CZKav08++YR7772XjRsT\ntcDJpyQ1d6UopaP0L+7+RMsbM5tEdhO3+/NcO93MTia7idvvQopRRFLkrrvu4vzzz+f444/noYce\nijocCZk2cStC3WsitbVmzRoGDhzIkiVLuOeee/j2t78ddUgSQNjP6ewCFJsk0BXYKcB9RSTlbrnl\nFpYsWcLBBx/Mt771rajDkSrQJm4pluZ+5SRIWv7ef/99Jk6cCMA111xDu3axn4tUUNJyV44gk98v\nAR4nu4nbUmAp2WnSPYCewCqgIawARSQdpk6dygcffMBRRx3FMcccE3U4UiWB1l4zs32AnwDHAZ1z\nh1cDTcA4d58bWoQR0piOSO1s2rSJe+65h/32249DDjkk6nCkAsXGdLSJWxF6OFREpHShPBwahJmd\n4e6xXw426S2dpO/pkXTKX3wlPXdRrDJ9Q5XuKyIiMVbKMjiNwM7uPir3vpnia7EZ0NvdO4QVZFSS\n3tIREamGisZ0zOxtYEdgF3dfa2brgafb+MzD3b1ToGjriIqOSPW4O8OHD+dLX/oSF154IZ06xf5X\nhuRUWnR6AB3d/c3c+6Xu3rONr2nzmjhIetFJer9y0sU9fzNnzuS4445jp512YuHChXTtGvuF6UsW\n99y1paIxHXdf1lJwcjqa2VQz+1qRL/t+uUGKSHps2rSJyy+/HIAxY8akquCkXZC11zYB04Hr3P2V\nqkRVJ5Le0hGJyvTp0znjjDPo3bs38+bNU9dawoT6nI6ZLXP3HqFEVudUdETCt379evbdd1+am5u5\n4447OPfcc6MOSUIW9pTpV8ysVxsfeFeA+0qNpXn9pySIa/5WrFhB79692X///TnzzDOjDicScc1d\n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\nzP8H50NbGbioopAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot using the matplotlib function loglog()\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel(r'$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.xlim(1e-4,1)\n", + "pyplot.ylim(1e-4,1)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='--', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking good! The difference relative to our fine-grid solution is decreasing with the mesh size at a faster rate than in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), but *how much faster?* When we computed the observed order of convergence with Euler's method, we got a value close to 1—it's a first-order method. Can you guess what we'll get now with RK2?\n", + "\n", + "To compute the observed order of convergence, we use three grid resolutions that are refined at a constant rate, in this case $r=2$. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 1.983\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " ### call rk2_step() ###\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Probably you're not too surprised to see that the observed order of convergence is close to $2$. Because we used a second-order method! This means that the numerical solution is converging with the grid resolution twice as fast compared with Euler's method in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), or in other words, the error scales as ${\\mathcal O}(\\Delta t^2)$. That is a lot faster! However, we are paying a price here: second-order Runge-Kutta requires more computations per iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How much longer does it take to get the solution with RK2, compared to Euler's method? Run the same solution (same time grid, same parameters), but find a way to *time* the calculation with Python, and compare the runtimes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multi-step methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The screencast *\"Euler's method is a first-order method\"* motivated graphically an idea to get increased accuracy: using intermediate points between $u_{n}$ and $u_{n+1}$ and evaluating the right-hand side of the differential equation at those intermediate points. The idea is to somehow get a better approximation using more data from the function $f(u)$.\n", + "\n", + "Another way to bring more information about $f(u)$ into the numerical solution is to look at time data $t\\lt t_{n}$. For example, we can involve in the calculation of the solution $u_{n+1}$ the known solution at $u_{n-1}$, in addition to $u_{n}$. Schemes that use this idea are called _multi-step methods_.\n", + "\n", + "\n", + "A classical multi-step method achieves second order by applying a _centered difference_ approximation of the derivative $u'$:\n", + "\n", + "$$ u'(t) \\approx \\frac{u_{n+1} - u_{n-1}}{2\\Delta t}.$$\n", + "\n", + "Isolate the future value of the solution $u_{n+1}$ and apply the differential equation $u'=f(u)$, to get the following formula for this method:\n", + "\n", + "$$ u_{n+1} = u_{n-1} + 2\\Delta t \\, f(u_n),$$\n", + "\n", + "This scheme is known as the **leapfrog method**. Notice that it is using the right-hand side of the differential equation, $f(u)$, evaluated at the _midpoint_ between $u_{n-1}$ and $u_{n+1}$, where the time interval between these two solutions is $2\\Delta t$. Why is it called \"leapfrog\"? If you imagine for a moment all of the _even_ indices $n$ of the numerical solution, you notice that these solution values are computed using the slope estimated from _odd_ values $n$, and vice-versa.\n", + "\n", + "Let's define a function that computes the numerical solution using the leapfrog method:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def leapfrog_step(unm1, u, f, dt):\n", + " \"\"\"Returns the solution time-step n+1) using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " unm1 : array of float\n", + " solution at time-step n-1.\n", + " u : array of float\n", + " solution at time-step n.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at time-step n+1.\n", + " \"\"\"\n", + " return unm1 + 2.0*dt*f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But wait ... what will we do at the _initial_ time step, when we don't have information for $u_{n-1}$? This is an issue with all multi-step methods: we say that they are _not self-starting_. In the first time step, we need to use another method to get the first \"kick\"—either Euler's method or 2nd-order Runge Kutta could do: let's use RK2, since it's also second order.\n", + "\n", + "For this calculation, we are going to re-enter the model parameters in the code cell below, so that later on we can experiment here using the leapfrog method and different starting values. At the end of this notebook, we'll give you some other model parameters to try that will create a very interesting situation!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude\n", + "\n", + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# set initial conditions\n", + "u_leapfrog = numpy.empty((N, 4))\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_leapfrog[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "# first step using RK2\n", + "u_leapfrog[1] = rk2_step(u_leapfrog[0], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the required information to loop in time using the leapfrog method. The code cell below calls the leapfrog function for each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for loop to call the function leapfrog_step()\n", + "for n in range(1,N-1):\n", + " \n", + " u_leapfrog[n+1] = leapfrog_step(u_leapfrog[n-1], u_leapfrog[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we extract from the solution array the information about the glider's position in time and find where it reaches the ground." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider position in time\n", + "x_leapfrog = u_leapfrog[:,2]\n", + "y_leapfrog = u_leapfrog[:,3]\n", + "\n", + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_leapfrog = numpy.where(y_leapfrog<0.0)[0]\n", + "\n", + "if len(idx_negative_leapfrog)==0:\n", + " idx_ground_leapfrog = N-1\n", + " print ('The glider has not reached the ground yet!')\n", + "else:\n", + " idx_ground_leapfrog = idx_negative_leapfrog[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the glider's trajectory with both the leapfrog and RK2 methods, we find that the solutions are very close to each other now: we don't see the differences that were apparent when we compared Euler's method and RK2." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nz6bl5ZdTu3btDKbcO/nLlrHoxBMpW7069WbMgAMO8B1JpMTQiVMhFaYeE2WJLxNZKlasmNAJVCXt\ndUlUmLKUZGaGVaoEL7/MotataTtoEPuMHOk71i7t2LGDhfPmwQMPkHPyyaw85xzm3XtvZAvUqP+e\naHwlg4pUEQ8uv/xyAF544QU2bNjgOY1IMZix/003sWr0aCrVqQPAokWLWLp0qedg/2vx55+z9YQT\n2DJhAsycSaUePbjgwgt9xxKR3dDhfhFPmjdvzowZM3jyySd3Fq2SXUry4f5dcc7RqlUrunfvzmWX\nXZaGZImbN28eBx10ENWqVQNg+LXXctTFF3NSs2Zec4mUZDrcL5IFrrzySgAee+wx9EeURMXmzZtp\n06YNPXv2BMDl5/P4gw+yZcuWjGd58sknue+++3Y+7vHooypQRbKIitQMClOPibLEl8ksF1xwAbVr\n12bBggW8//77XrPsibJIoipUqMDdd99NqVKlAPho6FC63HorZQcNgm+/Zfv27Wn7o2zJ4sW82LMn\nDBoEwB133LHL651GfR5pfNkt6uNLlIpUEU/Kli3LFVdcAcCjjz7qOY1IelRq2ZIlw4Zha9bAUUex\nqmlThrVtC+vXF/tr79ixg1defhlmzYKbbuKIM87guJEjWVe5MgC1a9fm3nvvLfb3ERE/1JMq4tH3\n33/PwQcfzLZt21i2bBmHH36470iSBPWkJumnn3iyQwfO3rqVOtdeC927c+ONN9KoUSO6desGwKxZ\nszjooIOoWbMmACtWrKBGjRpUjhWegwcP5oorrqBy5co455hdrhyN69ShTJcucOGFvL9mDc1btKBc\nuXKpzS4iKaGeVJEsccABB9ClSxecczz22GO+44ik13770WfGDA749FPo3h2AadOmkZubu/Mpq889\nFzvrLOjaFS6+mJUnncSmDh3giy8AePPNN/n000+B4M3us1tuYdGbb8K990KTJrQ5/XQVqCIRoSI1\ng8LUY6Is8fnIcs011wDw3HPPsb7QIdCS/rrsSpiySPJycnIoXbr0zscTJkygWaGTmb5o3ZqtffpA\nhw7QqROLjz6anzp02Hk90xtuuGHnXlaAy+++m8Z7cUOMqM8jjS+7RX18iSq956eISDodd9xxtGzZ\nkmnTpjF8+HCuvvpq35FEMqborUhvKXJDgCu6dPmfx+eee27aM4lIOKgnVSQExowZwwUXXMARRxzB\n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\nB0lEQVTo/D9EAVodDt65OwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(11,8))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls='-', lw=2)\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_leapfrog[idx_ground_leapfrog-1]), fontsize=18);\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls=':', lw=2)\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about the observed order of convergence? We'll repeat the process we have used before, with a grid-refinement ratio $r=2$ ... here we go:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 2.186\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " u[1] = rk2_step(u[0], f, dt)\n", + " for n in range(1, N-1):\n", + " u[n+1] = leapfrog_step(u[n-1], u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical evidence that our calculation with the leapfrog method indeed exhibits second-order convergence, i.e., the method is ${\\mathcal O}(\\Delta t^2)$. _The leapfrog method is a second-order method_. Good job!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### But chew on this ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go back to the cell that re-enters the model parameters, just above the leapfrog-method time loop, and change the following: the initial height `y0` to 25, and the final time `T` to 36. Now re-run the leapfrog calculation and the two code cells below that, which extract the glider's position and plot it.\n", + "\n", + "_What is going on?_\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tobies, R. \"Iris Runge: A life at the crossroads of mathematics, science and industry,\" Springer Basel, 1st ed. (2012). [Read on Google books, page 73](http://books.google.com/books?id=EDm0eQqFUQ4C&lpg=PA73&dq=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&pg=PA73#v=onepage&q=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&f=false)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/README.md b/01_phugoid/README.md new file mode 100644 index 0000000..c7c2701 --- /dev/null +++ b/01_phugoid/README.md @@ -0,0 +1,43 @@ +#Module 1: The phugoid model of glider flight. + +##Summary + +The phugoid model motivates the learning of numerical time integration methods. The model is described by a set of two nonlinear ordinary differential equations, representing the oscillatory trajectory of an aircraft subject to longitudinal perturbations. + +* [Lesson 1](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) presents the physics of phugoids in the assumption of zero drag (following Lanchester, 1909). Plotting the flight path gives fascinating curve shapes. +* [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) develops a single-equation model for zero-drag oscillations, leading to simple harmonic motion. The lesson defines initial-value problems, demonstrates Euler's method, and uses the exact solution to study the numerical convergence. +* [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) develops the full phugoid model and solves it with (vectorized) Euler's method. In the absence of an exact solution, the study of convergence uses a grid-refinement method, obtaining the observed order of convergence. The lesson ends with the paper-airplane challenge. +* [Lesson 4](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_04_Second_Order_Methods.ipynb) starts with the screencast "Euler's method is a first-order method" and develops second-order methods: explicit midpoint (modified Euler) and Runge-Kutta. It ends with a grid-refinement study. + +##Badge earning + +Completion of this module in the online course platform can earn the learner the Module 1 badge. + +###Description: What does this badge represent? + +The earner completed Module 1 "The phugoid model of glider flight" of the course "Practical Numerical Methods with Python" (a.k.a., numericalmooc). + +###Criteria: What needs to be done to earn it? + +To earn this badge, the learner needs to complete the graded assessment in the course platform including: answering quiz about basic numerical Python commands; answering quiz about basics of initial-value problems; completing the individual coding assignment "Rocket flight" and answering the numeric questions online. Earners should also have completed self-study of the four module lessons, by reading, reflecting on and writing their own version of the codes. This is not directly assessed, but it is assumed. Thus, earners are encouraged to provide evidence of this self-study by giving links to their code repositories or other learning objects they created in the process. + +###Evidence: Website (link to original digital content) + +Desirable: link to the earner's GitHub repository (or equivalent) containing the solution to the "Rocket flight" coding assignment. +Optional: link to the earner's GitHub repository (or equivalent) containing other codes, following the lesson. + +###Category: + +Higher education, graduate + +###Tags: + +engineering, computation, higher education, numericalmooc, python, gwu, george washington university, lorena barba, github + +###Relevant Links: Is there more information on the web? + +[Course About page](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) + +[Course Wiki](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/wiki/GW.MAE6286.2014_fall/) + +[Course GitHub repo](https://github.com/numerical-mooc/numerical-mooc) diff --git a/01_phugoid/Rocket_Assignment.ipynb b/01_phugoid/Rocket_Assignment.ipynb new file mode 100644 index 0000000..2839d18 --- /dev/null +++ b/01_phugoid/Rocket_Assignment.ipynb @@ -0,0 +1,335 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Coding Assignment: Rocket" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equations of motion for a rocket in purely vertical flight are given by\n", + "\n", + "\\begin{align}\n", + "\\frac{dh}{dt} &= v\\\\\n", + "(m_s+m_p) \\frac{dv}{dt}& = -(m_s+m_p)g + \\dot{m}_pv_e - \\frac{1}{2}\\rho v|v|AC_D\n", + "\\end{align}\n", + "\n", + "$h$ is the altitude of the rocket\n", + "\n", + "$m_s = 50kg$ is the weight of the rocket shell\n", + "\n", + "$g = 9.81 \\frac{m}{s^2}$\n", + "\n", + "$\\rho = 1.091 \\frac{kg}{m^3}$ is the average air density (assumed constant throughout flight)\n", + "\n", + "$A = \\pi r^2$ is the maximum cross sectional area of the rocket, where $r = 0.5 m$\n", + "\n", + "$v_e = 325 \\frac{m}{s}$ is the exhaust speed\n", + "\n", + "$C_D = 0.15 $ is the drag coefficient\n", + "\n", + "$m_{po} = 100 kg$ at time $t = 0$ is the initial weight of the rocket propellant\n", + "\n", + "The mass of the remaining propellant is given by:\n", + "\n", + "$$m_p = m_{po} - \\int^t_0 \\dot{m}_p d\\tau$$\n", + "\n", + "where $\\dot{m}_p$ is the time-varying burn rate given by the following figure:\n", + "\n", + "Propellant Burn Rate\n", + "\n", + "![burn rate](./burn.rate.png)\n", + "\n", + "Using Euler's method with a timestep of $\\Delta t=0.1s$, create a Python script to calculate the altitude and velocity of the rocket from launch until crash down. \n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assessment:\n", + "\n", + "To check your answers, you can register for [MAE 6286: Practical Numerical Methods with Python](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about).\n", + "\n", + "1. At time $t=3.2s$, what is the mass (in kg) of rocket propellant remaining in the rocket?\n", + "\n", + "2. What is the maximum speed of the rocket in $\\frac{m}{s}$?\n", + " At what time does this occur (in seconds)? \n", + " What is the altitude at this time (in meters)? \n", + " \n", + "3. What is the rocket's maximum altitude during flight (in meters)? At what time (in seconds) does this occur?\n", + "\n", + "4. At what time (in seconds) does the rocket impact the ground? What is the velocity of the rocket (in $\\frac{m}{s}$) at time of impact?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Derivation of the rocket equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In case you are kind of confused about the rocket equations, here we show how to get to them. \n", + "\n", + "Newton's second law states that the acceleration of the vehicle times its mass is equal to all the forces acting on it. Therefore,\n", + "\n", + "\\begin{equation}\n", + "(m_s + m_p)\\frac{d\\bf{v}}{dt}=\\sum {\\bf F}.\n", + "\\end{equation}\n", + "In the above formula we have assumed that the propellant inside the rocket and the rocket move at the same velocity (in other words, their relative velocity is negligible). \n", + "\n", + "Two of the external forces acting on the rocket are,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_g&= (m_s+m_p)\\bf{g} \\quad (\\rm{Gravity}),\\\\\n", + "{\\bf F}_d&= - \\frac{1}{2} \\rho_a \\mathbf{v} |\\mathbf{v}| A C_D \\quad (\\rm{Drag}).\n", + "\\end{align}\n", + "\n", + "We also need to consider the force resulting from the ejection of the propellant. During an interval $dt$, the engine of the rocket ejects downwards a mass of propellant given by $\\dot m_p dt$. Relative to the rocket, the speed of the ejected burning gas is assumed constant and equal to $v_e$ (the exhaust speed). The momentum variation induced on the exhaust gas by the engine during that interval is therefore, $d{\\bf p}_{gas} = \\dot m_p {\\bf v}_e dt$. Again using Newton's second law we conclude that the force applied by the rocket on the gas is,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_{rocket\\rightarrow gas} = \\frac{d{\\bf p}_{gas}}{dt} = \\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n", + "Using Newton's third law (|action| = |reaction|), the force exerted by the exhaust gas on the rocket is then,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_{gas\\rightarrow rocket} = -{\\bf F}_{rocket\\rightarrow gas} = -\\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n", + "If we collect all the forces acting on the rocket we finally have:\n", + "\n", + "\\begin{align}\n", + "(m_s + m_p)\\frac{d\\bf{v}}{dt}=(m_s+m_p){\\bf g}- \\frac{1}{2} \\rho_a \\mathbf{v} |v| A C_D -\\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/01_phugoid/burn.rate.png b/01_phugoid/burn.rate.png new file mode 100644 index 0000000..d2cd935 Binary files /dev/null and b/01_phugoid/burn.rate.png differ diff --git a/01_phugoid/figures/glider_forces-lesson3.png b/01_phugoid/figures/glider_forces-lesson3.png new file mode 100644 index 0000000..6d73dd7 Binary files /dev/null and b/01_phugoid/figures/glider_forces-lesson3.png differ diff --git a/01_phugoid/figures/glider_forces.png b/01_phugoid/figures/glider_forces.png new file mode 100644 index 0000000..ac036d5 Binary files /dev/null and b/01_phugoid/figures/glider_forces.png differ diff --git a/01_phugoid/figures/glider_forces_fbd.svg b/01_phugoid/figures/glider_forces_fbd.svg new file mode 100644 index 0000000..47a1d34 --- /dev/null +++ b/01_phugoid/figures/glider_forces_fbd.svg @@ -0,0 +1,465 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + + + + + + + + + + + + diff --git a/01_phugoid/figures/glider_forces_nodrag.png b/01_phugoid/figures/glider_forces_nodrag.png new file mode 100644 index 0000000..969042c Binary files /dev/null and b/01_phugoid/figures/glider_forces_nodrag.png differ diff --git a/01_phugoid/figures/glider_forces_nodrag.svg b/01_phugoid/figures/glider_forces_nodrag.svg new file mode 100644 index 0000000..00942f4 --- /dev/null +++ b/01_phugoid/figures/glider_forces_nodrag.svg @@ -0,0 +1,368 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + diff --git a/01_phugoid/figures/oscillatory_trajectory.png b/01_phugoid/figures/oscillatory_trajectory.png new file mode 100644 index 0000000..6e7dca9 Binary files /dev/null and b/01_phugoid/figures/oscillatory_trajectory.png differ diff --git a/01_phugoid/figures/rocket_CV.png b/01_phugoid/figures/rocket_CV.png new file mode 100644 index 0000000..5686f4f Binary files /dev/null and b/01_phugoid/figures/rocket_CV.png differ diff --git a/01_phugoid/figures/vonKarman-phugoids.png b/01_phugoid/figures/vonKarman-phugoids.png new file mode 100644 index 0000000..e3c6414 Binary files /dev/null and b/01_phugoid/figures/vonKarman-phugoids.png differ diff --git a/01_phugoid/phugoid.py b/01_phugoid/phugoid.py new file mode 100755 index 0000000..0f99fd6 --- /dev/null +++ b/01_phugoid/phugoid.py @@ -0,0 +1,112 @@ +# Script to plot the flight path of the phugoid using Lanchester's model. +# It uses the sign convention and formulae provided by Milne-Thomson (1958). + +import numpy +from matplotlib import pyplot + +numpy.seterr(all='ignore') +''' +see http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html for explanation. ignore over/underflow errors that pop up in the radius_of_curvature function +''' + +def radius_of_curvature(z, zt, C): + """Returns the radius of curvature of the flight path at any point. + + Parameters + --------- + z : float + current depth below the reference horizontal line. + zt : float + initial depth below the reference horizontal line. + C : float + constant of integration. + + Returns + ------- + radius : float + radius of curvature. + """ + return zt / (1/3 - C/2*(zt/z)**1.5) + +def rotate(x, z, xCenter, zCenter, angle): + """Returns the new position of the point. + + Parameters + --------- + x : float + previous x-position of the point + z : float + previous z-position of the point. + xCenter : float + x-location of the center of rotation. + zCenter : float + z-location of the center of rotation. + angle : float + angle of rotation + + Returns + ------- + xCenter_new : float + new x-location of the center of rotation. + zCenter_new : float + new z-location of the center of rotation. + """ + dx = x - xCenter + dz = z - zCenter + # the following formulae take into account the orientation of the axes + xNew = dx*numpy.cos(angle) + dz*numpy.sin(angle) + zNew = -dx*numpy.sin(angle) + dz*numpy.cos(angle) + return xCenter + xNew, zCenter + zNew + +def plot_flight_path(zt, z0, theta0): + """Plots the flight path. + + Parameters + --------- + zt : float + trim height of the glider. + z0 : float + initial height of the glider. + theta0 : float + initial orientation of the glider. + + Returns + ------- + None : None + """ + # arrays to store the coordinates of the flight path + N = 1000 + z = numpy.zeros(N) + x = numpy.zeros(N) + + # set initial conditions + z[0] = z0 + x[0] = 0. + theta = theta0 + + # calculate the constant C + C = (numpy.cos(theta) - 1/3*z[0]/zt)*(z[0]/zt)**.5 + # incremental distance along the flight path + ds = 1 + + #obtain the curve coordinates + for i in range(1,N): + # minus sign for the second coordinate because the z-axis points downwards + normal = numpy.array([numpy.cos(theta+numpy.pi/2.), -numpy.sin(theta+numpy.pi/2.)]) + R = radius_of_curvature(z[i-1], zt, C) + center = numpy.array([x[i-1]+normal[0]*R, z[i-1]+normal[1]*R]) + dtheta = ds/R + x[i], z[i] = rotate(x[i-1], z[i-1], center[0], center[1], dtheta) + theta = theta + dtheta + + # generate a plot + pyplot.figure(figsize=(10,6)) + pyplot.plot(x, -z, color = 'k', ls='-', lw=2.0, label="$z_t=\ %.1f,\\,z_0=\ %.1f,\\,\\theta_0=\ %.2f$" % (zt, z[0], theta0)) + pyplot.axis('equal') + pyplot.title("Flight path for $C$ = %.3f" % C, fontsize=18) + pyplot.xlabel("$x$", fontsize=18) + pyplot.ylabel("$z$", fontsize=18) + pyplot.legend() + pyplot.show() + +# End of File diff --git a/HW6/README.pdf b/HW6/README.pdf index 3cc8991..12116b0 100644 Binary files a/HW6/README.pdf and b/HW6/README.pdf differ diff --git a/README.pdf b/README.pdf new file mode 100644 index 0000000..7a034c6 Binary files /dev/null and b/README.pdf differ diff --git a/lecture_02/.ipynb_checkpoints/lecture_02-checkpoint.ipynb b/lecture_02/.ipynb_checkpoints/lecture_02-checkpoint.ipynb new file mode 100644 index 0000000..e34d82f --- /dev/null +++ b/lecture_02/.ipynb_checkpoints/lecture_02-checkpoint.ipynb @@ -0,0 +1,594 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solution to Form #1" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 14\r\n" + ] + } + ], + "source": [ + "[1,2,3]*[1;2;3]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "[1,2,3]*[1;2;3]=?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The first source of error is roundoff error\n", + "## Just storing a number in a computer requires rounding" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "realmax = 1.79769313486231570815e+308\n", + "realmin = 2.22507385850720138309e-308\n", + "maximum relative error = 2.22044604925031308085e-16\n" + ] + } + ], + "source": [ + "fprintf('realmax = %1.20e\\n',realmax)\n", + "fprintf('realmin = %1.20e\\n',realmin)\n", + "fprintf('maximum relative error = %1.20e\\n',eps)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 1\r\n" + ] + } + ], + "source": [ + "s=1;\n", + "for i=1:1000\n", + " s=s+eps/10;\n", + "end\n", + "s==1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Freefall Model (revisited)\n", + "## Octave solution (will run same on Matlab)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set default values in Octave for linewidth and text size" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "set (0, \"defaultaxesfontname\", \"Helvetica\")\n", + "set (0, \"defaultaxesfontsize\", 18)\n", + "set (0, \"defaulttextfontname\", \"Helvetica\")\n", + "set (0, \"defaulttextfontsize\", 18) \n", + "set (0, \"defaultlinelinewidth\", 4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Define time from 0 to 12 seconds with `N` timesteps \n", + "function defined as `freefall`" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function [v_analytical,v_terminal,t]=freefall(N)\n", + " t=linspace(0,12,N)';\n", + " c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", + "\n", + " v_analytical = v_terminal*tanh(g*t/v_terminal);\n", + " v_numerical=zeros(length(t),1);\n", + " delta_time =diff(t);\n", + " for i=1:length(t)-1\n", + " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*delta_time(i);\n", + " end\n", + " % Print values near 0,2,4,6,8,10,12 seconds\n", + " indices = round(linspace(1,length(t),7));\n", + " fprintf('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", + " fprintf('-----------------------------------------------\\n')\n", + " M=[t(indices),v_analytical(indices),v_numerical(indices)];\n", + " fprintf('%7.1f | %18.2f | %15.2f\\n',M(:,1:3)');\n", + " plot(t,v_analytical,'-',t,v_numerical,'o-')\n", + "end\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", + "-----------------------------------------------\n", + " 0.0 | 0.00 | 0.00\n", + " 2.0 | 18.76 | 18.82\n", + " 4.0 | 32.64 | 32.80\n", + " 6.1 | 40.79 | 40.97\n", + " 8.0 | 44.80 | 44.94\n", + " 10.0 | 46.84 | 46.93\n", + " 12.0 | 47.77 | 47.82\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t12\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "[v_analytical,v_terminal,t]=freefall(120);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Types of error\n", + "## Freefall is example of \"truncation error\"\n", + "### Truncation error results from approximating exact mathematical procedure" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We approximated the derivative as $\\delta v/\\delta t\\approx\\Delta v/\\Delta t$\n", + "\n", + "Can reduce error by decreasing step size -> $\\Delta t$=`delta_time`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Another example of truncation error is a Taylor series (or Maclaurin if centered at a=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Taylor series:\n", + "$f(x)=f(a)+f'(a)(x-a)+\\frac{f''(a)}{2!}(x-a)^{2}+\\frac{f'''(a)}{3!}(x-a)^{3}+...$\n", + "\n", + "We can approximate the next value in a function by adding Taylor series terms:\n", + "\n", + "|Approximation | formula |\n", + "|---|-------------------------|\n", + "|$0^{th}$-order | $f(x_{i+1})=f(x_{i})+R_{1}$ |\n", + "|$1^{st}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+R_{2}$ |\n", + "|$2^{nd}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^{2}+R_{3}$|\n", + "|$n^{th}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^{2}+...\\frac{f^{(n)}}{n!}h^{n}+R_{n}$|\n", + "\n", + "Where $R_{n}=\\frac{f^{(n+1)}(\\xi)}{(n+1)!}h^{n+1}$ is the error associated with truncating the approximation at order $n$.\n", + "\n", + "The $n^{th}$-order approximation estimates that the unknown function, $f(x)$, is equal to an $n^{th}$-order polynomial. \n", + "\n", + "In the Freefall example, we estimated the function with a $1^{st}$-order approximation, so \n", + "\n", + "$v(t_{i+1})=v(t_{i})+v'(t_{i})(t_{i+1}-t_{i})+R_{1}$\n", + "\n", + "$v'(t_{i})=\\frac{v(t_{i+1})-v(t_{i})}{t_{i+1}-t_{i}}-\\frac{R_{1}}{t_{i+1}-t_{i}}$\n", + "\n", + "$\\frac{R_{1}}{t_{i+1}-t_{i}}=\\frac{v''(\\xi)}{2!}(t_{i+1}-t_{i})$\n", + "\n", + "or the truncation error for a first-order Taylor series approximation is\n", + "\n", + "$\\frac{R_{1}}{t_{i+1}-t_{i}}=O(\\Delta t)$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. digital representation of a number is rarely exact\n", + "\n", + "2. arithmetic (+,-,/,\\*) causes roundoff error" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.14159265358979311600\n", + "3.14159274101257324219\n" + ] + } + ], + "source": [ + "fprintf('%1.20f\\n',double(pi))\n", + "fprintf('%1.20f\\n',single(pi))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_21/lecture_21.ipynb b/lecture_21/lecture_21.ipynb index c2547e6..6d1701d 100644 --- a/lecture_21/lecture_21.ipynb +++ b/lecture_21/lecture_21.ipynb @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -208,111 +208,111 @@ "\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\tgnuplot_plot_2a\n", "\n", "\t \n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "\t\n", "\n", @@ -393,7 +393,750 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Initial Value Problem" + "# Initial Value Problem\n", + "\n", + "## Euler's method\n", + "\n", + "$\\frac{dy}{dt}=f(t,y)$\n", + "\n", + "$y_{i+1}=y_{i}+f(t_{i},y_{i})h$\n", + "\n", + "The error of this method is:\n", + "\n", + "$E_{t}=\\frac{f'(t_i , y_i )}{2!}h^2 + \\cdots + O(h^{n+1})$\n", + "\n", + "or\n", + "\n", + "$E_{a}=O(h^2)$\n", + "\n", + "### Example: Freefalling problem\n", + "\n", + "An object is falling and has a drag coefficient of 0.25 kg/m and mass of 60 kg\n", + "Define time from 0 to 12 seconds with `N` timesteps \n", + "function defined as `freefall`\n", + "\n", + "Using the Euler ODE solution results in a conditionally stable solution *(at some point the time steps are too large to solve the problem)*" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function [v_analytical,v_terminal,t]=freefall(N,tmax)\n", + " t=linspace(0,tmax,N)';\n", + " c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", + "\n", + " v_analytical = v_terminal*tanh(g*t/v_terminal);\n", + " v_numerical=zeros(length(t),1);\n", + " delta_time =diff(t);\n", + " for i=1:length(t)-1\n", + " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*delta_time(i);\n", + " end\n", + " % Print values near 0,2,4,6,8,10,12 seconds\n", + " indices = round(linspace(1,length(t),7));\n", + " fprintf('time (s)| error (m/s)\\n')\n", + " fprintf('-------------------------\\n')\n", + " M=[t(indices),abs(v_analytical(indices)-v_numerical(indices))];\n", + " fprintf('%7.1f | %10.2f\\n',M(:,1:2)');\n", + " plot(t,v_analytical,'-',t,v_numerical,'o-')\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)| error (m/s)\n", + "-------------------------\n", + " 0.0 | 0.00\n", + " 1.7 | 0.64\n", + " 3.4 | 2.50\n", + " 6.9 | 3.12\n", + " 8.6 | 2.10\n", + " 10.3 | 1.23\n", + " 12.0 | 0.67\n", + "\n", + "O(h^2)=2.94\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t12\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "[v_an,v_t,t]=freefall(8,12);\n", + "fprintf('\\nO(h^2)=%1.2f',min(diff(t).^2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heun Method\n", + "\n", + "Increase accuracy with *predictor-corrector approach*\n", + "\n", + "$y_{i+1}=y_{i}^{m}+f(t_{i},y_{i})h$\n", + "\n", + "$y_{i+1}^{j}=y_{i}^{m}+\n", + "\\frac{f(t_{i},y_{i}^{m})+f(t_{i+1},y_{i+1}^{i-1})}{2}h$\n", + "\n", + "This is analagous to the trapezoidal rule\n", + "\n", + "$\\int_{t_{i}}^{t_{i+1}}f(t)dt=\\frac{f(t_{i})+f(t_{i+1})}{2}h$\n", + "\n", + "therefore the error is\n", + "\n", + "$E_{t}=\\frac{-f''(\\xi)}{12}h^3$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example with Heun's method**\n", + "\n", + "Problem Statement. Use Heun’s method with iteration to integrate \n", + "\n", + "$y' = 4e^{0.8t} − 0.5y$\n", + "\n", + "from t = 0 to 4 with a step size of 1. The initial condition at t = 0 is y = 2. Employ a stopping criterion of 0.00001% to terminate the corrector iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy =\n", + "\n", + " 3\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + "\n", + "y =\n", + "\n", + " 2\n", + " 5\n", + " 0\n", + " 0\n", + " 0\n", + "\n" + ] + } + ], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "dy(1)=yp(t(1),y(1))\n", + "y(2)=y(1)+dy(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy_corr =\n", + "\n", + " 4.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "y =\n", + "\n", + " 2.00000\n", + " 6.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n" + ] + } + ], + "source": [ + "% improve estimate for y(2)\n", + "dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2\n", + "y(2)=y(1)+dy_corr(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This process can be iterated until a desired tolerance is achieved" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "n=0;\n", + "e=10;\n", + "while (1)\n", + " n=n+1;\n", + " yold=y(2);\n", + " dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2;\n", + " y(2)=y(1)+dy_corr(1)*(t(2)-t(1));\n", + " e=abs(y(2)-yold)/y(2)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.00000\n", + " 6.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "dy_corr =\n", + "\n", + " 4.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "n = 12\n", + "e = 6.3760e-06\n" + ] + } + ], + "source": [ + "y\n", + "dy_corr\n", + "n\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y_an =\n", + "\n", + "@(t) 4 / 1.3 * exp (0.8 * t) - 1.0769 * exp (-t / 2)\n", + "\n", + "dy_an =\n", + "\n", + "@(t) 0.8 * 4 / 1.3 * exp (0.8 * t) + 1.0769 / 2 * exp (-t / 2)\n", + "\n" + ] + } + ], + "source": [ + "\n", + "y_euler=zeros(size(t));\n", + "for i=1:length(t)-1\n", + " y_euler(i+1)=y_euler(i)+dy(i)*(t(i+1)-t(i));\n", + "end\n", + "\n", + "y_an =@(t) 4/1.3*exp(0.8*t)-1.0769*exp(-t/2)\n", + "dy_an=@(t) 0.8*4/1.3*exp(0.8*t)+1.0769/2*exp(-t/2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "for i=1:length(t)-1\n", + " dy(i)=yp(t(i),y(i));\n", + " dy_corr(i)=yp(t(i),y(i));\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " n=0;\n", + " e=10;\n", + " while (1)\n", + " n=n+1;\n", + " yold=y(i+1);\n", + " dy_corr(i)=(dy(i)+yp(t(i+1),y(i+1)))/2;\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " e=abs(y(i+1)-yold)/y(i+1)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.0000\n", + " 6.3609\n", + " 15.3022\n", + " 34.7433\n", + " 77.7351\n", + "\n", + "ans =\n", + "\n", + " 2.0000\n", + " 6.1946\n", + " 14.8439\n", + " 33.6772\n", + " 75.3390\n", + "\n" + ] + } + ], + "source": [ + "y\n", + "y_an(t)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t70\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\ty\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\ttime\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tHeuns method\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tHeuns method\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tEuler\n", + "\n", + "\t\n", + "\t\tEuler\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tanalytical\n", + "\n", + "\t\n", + "\t\tanalytical\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(t,y,'o',t,y_euler,'s',linspace(min(t),max(t)),y_an(linspace(min(t),max(t))))\n", + "legend('Heuns method','Euler','analytical','Location','NorthWest')\n", + "xlabel('time')\n", + "ylabel('y')" ] }, { diff --git a/lecture_21/octave-workspace b/lecture_21/octave-workspace new file mode 100644 index 0000000..398435f Binary files /dev/null and b/lecture_21/octave-workspace differ diff --git a/lecture_22/.ipynb_checkpoints/lecture_22-checkpoint.ipynb b/lecture_22/.ipynb_checkpoints/lecture_22-checkpoint.ipynb new file mode 100644 index 0000000..8fdd6a6 --- /dev/null +++ b/lecture_22/.ipynb_checkpoints/lecture_22-checkpoint.ipynb @@ -0,0 +1,821 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![q1](q1.png)\n", + "\n", + "![q2](q2.png)\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Initial Value Problem\n", + "\n", + "## Euler's method\n", + "\n", + "$\\frac{dy}{dt}=f(t,y)$\n", + "\n", + "$y_{i+1}=y_{i}+f(t_{i},y_{i})h$\n", + "\n", + "The error of this method is:\n", + "\n", + "$E_{t}=\\frac{f'(t_i , y_i )}{2!}h^2 + \\cdots + O(h^{n+1})$\n", + "\n", + "or\n", + "\n", + "$E_{a}=O(h^2)$\n", + "\n", + "### Example: Freefalling problem\n", + "\n", + "An object is falling and has a drag coefficient of 0.25 kg/m and mass of 60 kg\n", + "Define time from 0 to 12 seconds with `N` timesteps \n", + "function defined as `freefall`\n", + "\n", + "Using the Euler ODE solution results in a conditionally stable solution *(at some point the time steps are too large to solve the problem)*" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function [v_analytical,v_terminal,t]=freefall(N,tmax)\n", + " t=linspace(0,tmax,N)';\n", + " c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", + "\n", + " v_analytical = v_terminal*tanh(g*t/v_terminal);\n", + " v_numerical=zeros(length(t),1);\n", + " delta_time =diff(t);\n", + " for i=1:length(t)-1\n", + " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*delta_time(i);\n", + " end\n", + " % Print values near 0,2,4,6,8,10,12 seconds\n", + " indices = round(linspace(1,length(t),7));\n", + " fprintf('time (s)| error (m/s)\\n')\n", + " fprintf('-------------------------\\n')\n", + " M=[t(indices),abs(v_analytical(indices)-v_numerical(indices))];\n", + " fprintf('%7.1f | %10.2f\\n',M(:,1:2)');\n", + " plot(t,v_analytical,'-',t,v_numerical,'o-')\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)| error (m/s)\n", + "-------------------------\n", + " 0.0 | 0.00\n", + " 7.1 | 26.67\n", + " 14.3 | 54.21\n", + " 28.6 | 33.62\n", + " 35.7 | 29.84\n", + " 42.9 | 82.85\n", + " 50.0 | 47.86\n", + "\n", + "O(h^2)=51.02\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t-40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t-20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "[v_an,v_t,t]=freefall(8,50);\n", + "fprintf('\\nO(h^2)=%1.2f',min(diff(t).^2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heun Method\n", + "\n", + "Increase accuracy with *predictor-corrector approach*\n", + "\n", + "$y_{i+1}=y_{i}^{m}+f(t_{i},y_{i})h$\n", + "\n", + "$y_{i+1}^{j}=y_{i}^{m}+\n", + "\\frac{f(t_{i},y_{i}^{m})+f(t_{i+1},y_{i+1}^{i-1})}{2}h$\n", + "\n", + "This is analagous to the trapezoidal rule\n", + "\n", + "$\\int_{t_{i}}^{t_{i+1}}f(t)dt=\\frac{f(t_{i})+f(t_{i+1})}{2}h$\n", + "\n", + "therefore the error is\n", + "\n", + "$E_{t}=\\frac{-f''(\\xi)}{12}h^3$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example with Heun's method**\n", + "\n", + "Problem Statement. Use Heun’s method with iteration to integrate \n", + "\n", + "$y' = 4e^{0.8t} − 0.5y$\n", + "\n", + "from t = 0 to 4 with a step size of 1. The initial condition at t = 0 is y = 2. Employ a stopping criterion of 0.00001% to terminate the corrector iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy =\n", + "\n", + " 3\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + "\n", + "y =\n", + "\n", + " 2\n", + " 5\n", + " 0\n", + " 0\n", + " 0\n", + "\n" + ] + } + ], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "dy(1)=yp(t(1),y(1))\n", + "y(2)=y(1)+dy(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy_corr =\n", + "\n", + " 4.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "y =\n", + "\n", + " 2.00000\n", + " 6.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n" + ] + } + ], + "source": [ + "% improve estimate for y(2)\n", + "dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2\n", + "y(2)=y(1)+dy_corr(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This process can be iterated until a desired tolerance is achieved" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "n=0;\n", + "e=10;\n", + "while (1)\n", + " n=n+1;\n", + " yold=y(2);\n", + " dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2;\n", + " y(2)=y(1)+dy_corr(1)*(t(2)-t(1));\n", + " e=abs(y(2)-yold)/y(2)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.00000\n", + " 6.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "dy_corr =\n", + "\n", + " 4.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "n = 12\n", + "e = 6.3760e-06\n" + ] + } + ], + "source": [ + "y\n", + "dy_corr\n", + "n\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y_an =\n", + "\n", + "@(t) 4 / 1.3 * exp (0.8 * t) - 1.0769 * exp (-t / 2)\n", + "\n", + "dy_an =\n", + "\n", + "@(t) 0.8 * 4 / 1.3 * exp (0.8 * t) + 1.0769 / 2 * exp (-t / 2)\n", + "\n" + ] + } + ], + "source": [ + "\n", + "y_euler=zeros(size(t));\n", + "for i=1:length(t)-1\n", + " y_euler(i+1)=y_euler(i)+dy(i)*(t(i+1)-t(i));\n", + "end\n", + "\n", + "y_an =@(t) 4/1.3*exp(0.8*t)-1.0769*exp(-t/2)\n", + "dy_an=@(t) 0.8*4/1.3*exp(0.8*t)+1.0769/2*exp(-t/2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "for i=1:length(t)-1\n", + " dy(i)=yp(t(i),y(i));\n", + " dy_corr(i)=yp(t(i),y(i));\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " n=0;\n", + " e=10;\n", + " while (1)\n", + " n=n+1;\n", + " yold=y(i+1);\n", + " dy_corr(i)=(dy(i)+yp(t(i+1),y(i+1)))/2;\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " e=abs(y(i+1)-yold)/y(i+1)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.0000\n", + " 6.3609\n", + " 15.3022\n", + " 34.7433\n", + " 77.7351\n", + "\n", + "ans =\n", + "\n", + " 2.0000\n", + " 6.1946\n", + " 14.8439\n", + " 33.6772\n", + " 75.3390\n", + "\n" + ] + } + ], + "source": [ + "y\n", + "y_an(t)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t70\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\ty\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\ttime\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tHeuns method\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tHeuns method\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tEuler\n", + "\n", + "\t\n", + "\t\tEuler\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tanalytical\n", + "\n", + "\t\n", + "\t\tanalytical\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(t,y,'o',t,y_euler,'s',linspace(min(t),max(t)),y_an(linspace(min(t),max(t))))\n", + "legend('Heuns method','Euler','analytical','Location','NorthWest')\n", + "xlabel('time')\n", + "ylabel('y')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Phugoid Oscillation example\n", + "\n", + "[phugoid lessons in python](" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_22/.ipynb_checkpoints/lecture_22_python-checkpoint.ipynb b/lecture_22/.ipynb_checkpoints/lecture_22_python-checkpoint.ipynb new file mode 100644 index 0000000..2fd6442 --- /dev/null +++ b/lecture_22/.ipynb_checkpoints/lecture_22_python-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_22/01_phugoid/.gitignore b/lecture_22/01_phugoid/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/lecture_22/01_phugoid/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/lecture_22/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb b/lecture_22/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb new file mode 100644 index 0000000..902854f --- /dev/null +++ b/lecture_22/01_phugoid/.ipynb_checkpoints/01_01_Phugoid_Theory-checkpoint.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, C. Cooper, G.F. Forsyth, A. Krishnan." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Motion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome to [**\"Practical Numerical Methods with Python!\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) This course is a collaborative, online, open education project, where we aim to give a foundation in scientific computing. The focus is on numerical solution of problems modeled by ordinary and partial differential equations.\n", + "\n", + "This IPython Notebook introduces the problem we'll be studying in the **first module** of the course: the _phugoid model of glider flight_. We'll start with some background, explaining the physics, and working out the mathematical model. \n", + "\n", + "First, we'll look at an idealized motion where there is no drag, resulting in a simple harmonic motion. We can plot some interesting trajectories that will pique your imagination. In the next notebook, you'll learn to numerically integrate the differential equation using Euler's method. But hang on ... first things first. \n", + "\n", + "The term \"phugoid\" is used in aeronautics to refer to a motion pattern where an aircraft oscillates up and down —nose-up and climb, then nose-down and descend— around an equilibrium trajectory. The aircraft oscillates in altitude, speed and pitch, with only small (neglected) variations in the angle of attack, as it repeatedly exchanges kinetic and potential energy.\n", + "\n", + "A low-amplitude phugoid motion can be just a nuisance, as the aircraft does not exceed the stall angle of attack and nothing bad happens. But the mode can also be unstable leading to a stall or even a loop!\n", + "\n", + "Look at this video showing a Cessna single-engine airplane in phugoid motion:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAaAAACAwEBAAAAAAAAAAAAAAACAwABBAUG/8QAQBAAAgIBAwEDCAgFBAIDAQEBAQIAAxEE\nEiExE0FRBRQiMmFxgZEjQlJTcpKhsRUzYsHRBkOC4SRjovDxNMIW/8QAGQEBAQEBAQEAAAAAAAAA\nAAAAAAECAwQF/8QAKBEBAAIBBAICAQQDAQAAAAAAAAERAgMSMVETIUFhBCJSgaEyYnEU/9oADAMB\nAAIRAxEAPwBlFdfYp9GnqjuEcKqvu0/KJKax2Nf4R+0PYRPpxEU8coKaj/tp8oa01/dp8oPIlhyI\nqCzeyr+6r/KJfY0/cp+UQFsEMWCZ2ra+yp+7T8oliuof7SflkyDB57o2wWaqUfdp+UQxXQf9tPyi\nZt57xJvPuk2ltfYUn/bT8ok7Cn7pPyiZO1Yd8IXtG0to7CodKk/KJDVWf9tPyiKF5MMOTJtLEtVQ\n/wBqv8olGmvORUn5RJuMm4xULYjXSRg1Jn8IgCmjPNSflEvcZecxUFgfT6furT8ok7Cnb/Lr/KIR\nJlFj4RSWUdPVn+Un5RJ2FQ/20/KIRfxEE2CWi1dnV91X+USdjT92n5RL3r3S+090UWX2NP3SflEr\nsqvu0/KI4FD1/SUwTuYy1BZRqq+6T8ogNp6T/tp+URpU9xEEhx3RUJZLaav7tPyiLOnr+7X5TTk+\nEHM0WzHTp92v5RKFNf3a/lmk+6TEIQKqe+tPkIxaqs/yk+Qh9lmEtWIqF9qFFP3afljFop+7T8ol\npXHKoHSZmlL83p7qk/KJR09XdUn5RNG2Q5EgStNXfWn5RD83p+6T8olk5lB8SUWIU1D/AGk/KIa1\n1fdJ+USltHfGKymSltBVV90n5RC7Kr7pPyiECJczRYOwp+6T8ok83q+6T8ohyRRYOwq+6T8ok7Cn\n7pPyiMzKigs0VfdJ+USjRT90n5RG5lEiKCeyo+6T8oldjV90n5RGnEA++WiwGqr7qv8AKJR09P3a\n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\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('ysdU4mnRYdM')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That doesn't look too good! What's happening? \n", + "\n", + "It can get a lot worse when an aircraft enters one of these modes that is unstable. For example, one of [NASA's Helios Solar Powered Aircraft](http://www.nasa.gov/centers/dryden/history/pastprojects/Helios/) prototype broke up in mid air due to extreme phugoid oscillations!\n", + "\n", + "Helios was a proof-of-concept solar electric-powered flying wing that broke the world altitude record for a non-rocket-powered aircraft in August 2001. But in June 26, 2003, it broke something else. The aircraft entered phugoid motion after encountering turbulence near the Hawaiian Island of Kauai. The high speed in the oscillatory movement exceeded the design limits, and it ended up wrecked in the Pacific Ocean. Luckily, the Helios was remotely operated, and nobody got hurt." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The physics of phugoids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The phugoid oscillation has the aircraft pitching up and down, as it decelerates and accelerates. The trajectory might look like a sinusoid, as in the figure below. The assumption is that the forward velocity of the aircraft, $v$, varies in such a way that the angle of attack remains (nearly) constant, which means that we can assume a constant lift coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/oscillatory_trajectory.png)\n", + "#### Figure 1. Trajectory of an aircraft in phugoid motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the descending portion of the trajectory, the aircraft's velocity increases as it proceeds from a peak to the minimum height—gaining kinetic energy at the expense of potential energy. The contrary happens in the upward segment, as its velocity decreases there.\n", + "\n", + "We measure the pitch angle (between the aircraft's longitudinal axis and the horizontal) as positive when the aircraft's nose is pointing up. In the portion of the trajectory below the center-line, where it curves upwards, the pitch angle $\\theta$ is increasing: $\\dot{\\theta}>0$. And where the trajectory curves down, the pitch angle is decreasing: $\\dot{\\theta}<0$, as shown in the figure.\n", + "\n", + "Let's remind ourselves of the forces affecting an aircraft in a downward glide. Look at the figure below: we show the flight path, the forces on the glider (no thrust), and the _glide angle_ or flight path angle, $\\gamma$, between the flight path and the horizontal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces.png)\n", + "#### Figure 2. Forces on a glider." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The force of lift, $L$ —created by the airflow around the wings— is perpendicular to the trajectory, and the force of drag, $D$, is parallel to the trajectory. Both forces are expressed in terms of coefficients of lift and drag, $C_L$ and $C_D$, respectively, that depend on the wing design and _angle of attack_—the angle between the wing chord and the flight path.\n", + "\n", + "If you are not familiar with airplane aerodynamics, you might be getting confused with some terms here ... and all those angles! But be patient and look things up, if you need to. We're giving you a quick summary here.\n", + "\n", + "Lift and drag are proportional to a surface area, $S$, and the dynamic pressure: $1/2 \\rho v^2$, where $\\rho$ is the density of air, and $v$ the forward velocity of the aircraft. The equations for lift and drag are:\n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "If the glider were in equilibrium, the forces would balance each other. We can equate the forces in the directions perpendicular and parallel to the trajectory, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "L = W \\cos \\gamma \\quad \\text{and} \\quad D = W \\sin \\gamma\n", + "\\end{equation}$$\n", + "\n", + "where $W$ repesents the weight of the glider.\n", + "\n", + "In the figure, we've drawn the angle $\\gamma$ as the _glide angle_, formed between the direction of motion and the horizontal. We are not bothered with the _sign_ of the angle, because we draw a free-body diagram and take the direction of the forces into account in writing our balance equations. But later on, we will need to be careful with the sign of the angles. It can cause you a real headache to keep this straight, so be patient!\n", + "\n", + "It looks like we've set this up to do a little bit of mathematics. Are you ready?\n", + "\n", + "But before, a short glimpse of the history." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lanchester's Aerodonetics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Phugoid theory\" was first described by the British engineer Frederick W. Lanchester in _\"Aerodonetics\"_ (1909). This book is so old that it is now in the public domain, so you can actually download [from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&dq=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&pg=PA37#v=onepage&q=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&f=false) a PDF file of a scan, or read it online. \n", + "\n", + "Lanchester defines phugoid theory as the study of longitudinal stability of a flying machine (aerodone). He first considered the simplification where drag and moment of inertia are neglected. Then he included these effects, obtaining an equation of stability. In addition to describing many experiments by himself and others, Lanchester also reports on _\"numerical work ... done by the aid of an ordinary 25-cm slide rule.\"_ Go figure!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ideal case of zero drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section, we follow the derivation given by Milne-Thompson (1966), which we find a little bit easier than that of the original in \"Aerodonetics\"!\n", + "\n", + "An aircraft flying in a steady, straight horizontal flight has a lift equal to its weight. The velocity in this condition is sometimes called _trim velocity_ (\"trim\" is what pilots do to set the controls to just stay in a steady flight). Let's use $v_t$ for the trim velocity, and from $L=W$ deduce that:\n", + "\n", + "$$\\begin{equation}\n", + "W = C_L S \\times\\frac{1}{2} \\rho v_t^2\n", + "\\end{equation}$$\n", + "\n", + "The weight $W$ is constant for the aircraft, but the lift at any other flight condition depends on the flight speed, $v$. We can use the expression for the weight in terms of $v_t$ to obtain the ratio $L/W$ at any other flight velocity, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}= \\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "Imagine that the aircraft experienced a little upset, a wind gust, and it finds itself off the \"trim\" level, in a curved path with an instantaneous angle $\\theta$. In the sketch below, we exaggerate the curved trajectory of flight to help you visualize what we'll do next. The angle $\\theta$ (using the same name as Milne-Thompson) is between the _trajectory_ and the horizontal, positive up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### Figure 3. Curved trajectory of the aircraft going up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can form a free body diagram to determine the balance of forces. \n", + "\n", + "\n", + "\n", + "#### Figure 4. Free body diagram of the aircraft trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the free body diagram, we can see that\n", + "\n", + "\\begin{equation}\n", + "\\vec{L} + \\vec{W} = m\\vec{a} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "where $\\frac{v^2}{R}$ is the centripetal acceleration and $R$ is the radius of curvature of the trajectory.\n", + "If we decompose the lift and weight into their normal and tangential components we get\n", + "\n", + "\\begin{equation}\n", + "L\\hat{n} + W_n\\hat{n} + W_t\\hat{t} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "The component of the weight in the normal direction ($W_n$) is\n", + "\n", + "\\begin{equation}\n", + "W_n = -W \\cos \\theta\n", + "\\end{equation}\n", + "\n", + "If we then consider that all of the components in $\\hat{n}$ must balance out, we arrive at\n", + "\n", + "\\begin{equation}\n", + "L - W \\cos \\theta = \\frac{mv^2}{R}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as\n", + "\n", + "$$\\begin{equation}\n", + "L- W \\cos \\theta = \\frac{W}{g} \\frac{v^2}{R}\n", + "\\end{equation}$$\n", + "\n", + "where $g$ is the acceleration due to gravity. Rearrange this by dividing the equation by the weight, and use the expression we found for $L/W$, above. The following equation results:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{v^2}{v_t^2}-\\cos \\theta = \\frac{v^2}{g R}\n", + "\\end{equation}$$\n", + "\n", + "Recall that we simplified the problem assuming that there is no friction, which means that the total energy is constant (the lift does no work). If $z$ represents the depth below a reference horizontal line, the energy per unit mass is (kinetic plus potential energy):\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{2}v^2-g z = \\text{constant}\n", + "\\end{equation}$$\n", + "\n", + "To get rid of that pesky constant, we can choose the reference horizontal line at the level that makes the constant energy equal to zero, so $v^2 = 2 g z$. That helps us re-write the phugoid equation in terms of $z$ as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z}{z_t}-\\cos \\theta = \\frac{2z}{R}\n", + "\\end{equation}$$\n", + "\n", + "Let $ds$ represent a small arc-length of the trajectory. We can write \n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} \\quad \\text{and}\\quad \\sin\\theta = -\\frac{dz}{ds}\n", + "\\end{equation}$$\n", + "\n", + "Employing the chain rule of calculus,\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} = \\frac{dz}{ds}\\frac{d\\theta}{dz} = -\\sin \\theta\\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "Multiply the phugoid equation by $\\frac{1}{2\\sqrt{z}}$ to get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} - \\frac{\\cos\\theta}{2\\sqrt{z}} = \\frac{\\sqrt{z}}{R}\n", + "\\end{equation}$$\n", + "\n", + "Substituting for $1/R$ on the right hand side and bringing the cosine term over to the right, we get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} = \\frac{\\cos \\theta}{2 \\sqrt{z}} - \\sqrt{z} \\sin \\theta \\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "The right-hand-side is an exact derivative! We can rewrite it as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d}{dz} \\left(\\sqrt{z}\\cos\\theta \\right) = \\frac{\\sqrt{z}}{2z_t}\n", + "\\end{equation}$$\n", + "\n", + "Integrating this equation, we add an arbitrary constant, chosen as $C\\sqrt{z_t}$ which (after dividing through by $\\sqrt{z}$) gives:\n", + "\n", + "$$\\begin{equation}\n", + "\\cos \\theta = \\frac{1}{3}\\frac{z}{z_t} + C\\sqrt{\\frac{z_t}{z}}\n", + "\\end{equation}$$\n", + "\n", + "Taking the derivative of both sides of equation (15) and applying the relations from equation (10) yields:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z_t}{R} = \\frac{1}{3} - \\frac{C}{2}\\sqrt{\\frac{z_t^3}{z^3}}\n", + "\\end{equation}$$\n", + "\n", + "Make sure you have followed the derivation, and perhaps write it out on paper!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Phugoid Curves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equation (15) is non-linear, which usually means we are hard-pressed to write a clean expression for the variable of interest, $z$. In fact, Lanchester himself said that he was unable to _\"reduce this expression to a form suitable for co-ordinate plotting.\"_ If the great polymath couldn't do it, we can't either!\n", + "\n", + "But Lanchester _was_ able to plot a suitable approximation of the phugoid flight path using what he called the \"trammel\" method. If you're interested in seeing how he did it, his explanation begins on page [48 of Aerodonetics](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PA49&lpg=PA48&dq=aerodonetics+the+use+of+the+trammel&source=bl&ots=lB6EVKYQuT&sig=aVE2kiDWZoWftaWczMIrcYftMOs&hl=en&sa=X&ei=gTD_U82fGYjzgwT3moGwCQ&ved=0CCAQ6AEwAA#v=onepage&q=aerodonetics%20the%20use%20of%20the%20trammel&f=false). It's a trip.\n", + "\n", + "Lanchester used Equations (15) and (16) to solve for the constant $C$ and the radius of curvature $R$ and then iteratively plotted small arcs of the phugoid path. By hand.\n", + "\n", + "We wrote a neat little code that duplicates the manual trammel method, but it might be a bit much for you to absorb in the first lesson. If you want to look it over, you are more than welcome to. If you are just starting with Python, skip it for the moment and we'll return to it at the end of this module. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting the flight path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned, we wrote a Python code to reproduce programmatically what Lanchester did graphically. Here's a neat feature of IPython Notebooks: you can run external programs with the magical keyword ... wait for it ... `run`. And the jargon of IPython _is_ to call this \"magic.\" In fact, there are a bunch of [magic functions](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) that you will learn about. They will make you a happy camper.\n", + "\n", + "Let's do it:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%run phugoid.py\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This code cell loaded our simulated-trammel code, `phugoid.py`. The code defined a function for you in the background, called `plot_flight_path`, taking three inputs: $z_t$, $z$ and $\\theta$. \n", + "\n", + "Look again at Equation (15), where we take the positive square root. There are several possibilities, depending on the value that the constant $C$ takes. \n", + "\n", + "* There are no physical solutions for $C>2/3$, because it would result in $\\cos\\theta>1$. \n", + "\n", + "* If $C=2/3$, then the solution is a horizontal straight line, because $\\cos\\theta=1$, $\\theta=0$ and $R=\\infty$.\n", + "\n", + "* Any value of $C$ for which $0 < C < \\frac{2}{3}$ will produce \"trochoidal\"-like paths. What does this look like? Let's use our custom function `plot_flight_path` to find out!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n5MgRihQpQt++fQE4fPgw+fLlo1SpUpw8eTLV19+1axfFihULPC5WrBixsbFZ10G/zPQzNefrf0oy\n2tfBgwczdOhQALZu3UpERESq22amn+mtL7XtixcvniM/0wtR4BMRkWxlluFzxf7JuT/a6bV69WqG\nDx9OxYoVyZcvH506daJHjx5/2q5atWqMGDEiQ6+xf/9+Nm7cyJQpUwBo27Ytbdq0oXr16syYMYP7\n77+fCRMmnHcfR44c4aKLLgo8joyM5Pfff0/T66e1j5C5fqbmfP1PSUb6unfvXr799lu+++471qxZ\nw6RJk3j++edT3T4z/UxvfefbPqM/06ykKV0REfG8Zs2a8dVXX9GoUSMKFChAjx49eP3119m/f3+W\nvUaRIkVo0KBB4HHlypWJjo7m22+/5aqrrkrzPoJD7R9//EGJEiXS9L3J+xgVFcXIkSMZP3483333\nXfo6kwGp9f9826e3r4sWLaJr16488MAD3HXXXezZs4cOHTpkSz/TW19q22fmZ5qVNMInIiLZKqOj\nclnt5ZdfZv/+/bz99tuAbzqwbNmySbYJngIMlpYpwHr16rFs2bLA43z58pGQkMC3337LqVOnmDt3\nLsuXL+f06dPMnj07xf1cccUVrFmzJvD48OHDNGnSJEN9fP3112nfvj1NmjShT58+fPrpp1nSz9Sk\n1v/UZKSvO3fupE6dOoBv5Wvnzp355JNPsqWf6a0vte2LFSuWqZ9plsnMio/cfEMrykREsky4/059\n+eWX3bPPPuucc27jxo1u6dKl7oYbbnArVqzIstc4ffq0a9GiReBxq1at3LZt25JsM3z48CSrdH/6\n6SeXmJgYeHzy5EnXoEGDwOOGDRu6/fv3O+eci42NTbJtcsn7+PDDD7tff/3VOefcDTfckImepWz8\n+PGub9++gcfn63/yfjqXsb6OHTvWjR071jnnXOfOnd2OHTvcI488ki39PF996enP+faTktT+L5HJ\nVbrmwuSTV04zM5dX+y4iktVSu+B7OPjPf/7Db7/9RtGiRRk2bBjXXHMNd911F59//jmDBg3K0tea\nP38+y5cvxzlH7dq1ueOOOwLPTZs2jREjRmBmDB06lJtvvpkmTZowbtw4GjduHNhu0qRJbN++Hecc\n1apVC+yjTp06vPXWW1x//fVp6uO+fft45plnqFChAp07d2bOnDlZ1s933nmHqVOnsnPnTvr27cuT\nTz5JkSJFUu1/Sv3MSF+PHz/O888/T4MGDahfvz4tWrTg4Ycf5tlnn82WfqZWX3r7k1p7SlL7v+Rv\nz/ABsQp8IiKSaeEc+FIyefJkqlSpQuXKlbnssstCXU6aJCYm8s0331zw1C7nvP3227Rt25Y6derQ\nt29fPvvss2yuMOukp6+5uZ8pUeDLYgp8IiJZJ7cFvlmzZhEXF0ezZs3Oe664cDJ16lS6devGxRdf\nnKbtDx8+zMcff0yxYsWoX78+LVu2zOYKs056+pqb+5kSBb4spsAnIpJ1clvgy41OnjzJJZdcEuoy\nckRe6mtyCnxZTIFPRCTrKPCJZI3sCnw6D5+IiIiIxynwiYiIiHicAp+IiIiIxynwiYiIiHicAp+I\niIiIx+lauiIikmlVqlT50/VKRST9suu8kDoti4iIiEiY02lZREREROS8FPhEREREPE6BT0RERMTj\nFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RE\nRMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6B\nT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjwj7wmdk4\nM9tvZhuC2oqbWbSZbTGz+WZWNOi5oWYWa2abzKxDaKoWERERCR9hH/iAfwIdk7UNARY652oBi4Ch\nAGZWF+gF1AFuAN4zM8vBWkVERETCTtgHPufcMuBIsubuwAT//QlAD//9G4Epzrl459x2IBZonhN1\nioiIiISrsA98qSjjnNsP4JzbB5Txt1cEdgZtt9vfJiIiIpJn5dbAl5wLdQEiIiIi4Sp/qAvIoP1m\nVtY5t9/MygEH/O27gcuCtqvkb0vR8OHDA/ejoqKIiorK+kpFRERE0ikmJoaYmJgs2585F/6DY2ZW\nFfjSOdfA/3gk8JtzbqSZDQaKO+eG+BdtfApchW8qdwFQw6XQSTNLqVlEREQk7JgZzrkML0QN+xE+\nM5sMRAElzexXYBjwCjDNzO4FduBbmYtz7kczmwr8CMQBDynViYiISF6XK0b4soNG+ERERCS3yOwI\nn1cWbYiIiIhIKhT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9E\nRETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxO\ngU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERE\nRDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4zwZ+Mysk5ltNrOtZjY41PWIiIiIhJI550JdQ5Yys3zAVuBaYA+wGrjVObc52XbOa30XERERbzIz\nnHOW0e/34ghfcyDWObfDORcHTAG6h7gmERERkZDxYuCrCOwMerzL3yYiIiKSJ3kx8ImIiIhIkPyh\nLiAb7AYqBz2u5G/7k+HDhwfuR0VFERUVlZ11iYiIiKRJTEwMMTExWbY/Ly7aiAC24Fu0sRf4FrjN\nObcp2XZatCEiIiK5QmYXbXhuhM85l2BmjwDR+KasxyUPeyIiIiJ5iedG+NJKI3wiIiKSW+i0LCIi\nIiJyXgp8IiIiIh6nwCciIiLicQp8IiIiIh7nuVW66ZGYmEi+fMq8IuI9Z86c4ddff2Xnzp3s27eP\ns2fPEh8fT6FChShdujTly5enZs2aREZGhrpUEckBeTrwRUREUKJECa644gqqV69O06ZNadWqFU2b\nNtUvQRHJVU6dOsXXX3/N/PnzWbVqFevXrycuLu6835M/f37q1KlDy5Yt6dixI9dccw3FihXLoYpF\nJCfl6dOypPZc4cKF6dy5Mz179qR79+5cfPHFOVmaiEiaJCQksGDBAsaOHctXX33F6dOnA8+ZGZUr\nV6Zy5cpUqFCBiy66iIiICE6ePMmBAwfYtWsX27ZtI/hvQIECBejSpQt33nknN954IwUKFAhFt0Qk\nBZk9LUueDnzx8fEcOnSIn376ic2bN7Ny5UqWLVvGpk3/O09z8eLFufvuu3nwwQepU6dOCCsWEfE5\nfvw477//Pu+++y47d+4MtDdr1oyuXbvStm1bmjZtyqWXXnre/Zw8eZINGzawePFi5s+fz7Jly0hM\nTASgUqVKDBgwgPvvv5+iRYtma39E5MIU+DLofCde/uWXX5g1axaffvopa9asCbR3796d559/nqZN\nm+ZUmSIiAceOHeP111/nzTff5OjRowBUq1aNfv360adPHypWrJip/e/du5fPPvuMsWPHBj74FilS\nhIEDB/LEE09QuHDhTPdBRDJGgS+D0nqljbVr1/LBBx8wceLEwHRJ165defXVVzXiJyI5Ij4+nrFj\nx/K3v/2NgwcPAtC2bVueeeYZOnTokOWLzxITE5k3bx6vvfZa4OLtZcuW5cUXX6Rfv35ERERk6euJ\nyIUp8GVQei+ttm/fPkaPHs17773HqVOniIiI4OGHH2bYsGGUKFEiGysVkbxs8eLFPProo2zcuBHw\nBb2///3vtG3bNkdePyYmhkGDBrF69WoAmjdvzgcffECjRo1y5PVFxEeBL4Myei3dAwcO8PzzzzN2\n7FgSExMpUaIE//jHP7j77rsxy/DPQUQkiaNHjzJo0CA++ugjAC6//HJee+01brrpphz/XeOcY+rU\nqTz55JPs2bOHiIgInnjiCV588UUtahPJIQp8GZTRwHfO+vXreeKJJ1i8eDEAHTt25IMPPqBKlSpZ\nVaKI5FGzZ8+mf//+7Nmzh8jISJ577jkGDhzIRRddFNK6jh8/zvPPP88777xDYmIidevWZdKkSTRu\n3DikdYnkBQp8GZTZwAe+T70TJ07kiSee4MiRIxQuXJhXX32Vv/71rxrtE5F0+/3333n00UcZP348\nAC1atGDcuHHUrVs3tIUls3r1au6++242b95MgQIFePHFFxk4cKCO7RPJRgp8GZQVge+cffv28cgj\njzB9+nQAunXrxscff0ypUqWyZP8i4n1r1qzh9ttvJzY2losuuogRI0bw6KOPhm2IOnXqFIMHD+ad\nd94BICoqis8++4xy5cqFuDIRb1Lgy6CsDHznTJ06lQcffJCjR49Svnx5Jk6cyHXXXZelryEi3pKY\nmMjo0aN59tlniYuLo379+nz22WfUr18/1KWlybx58+jbty/79++nfPnyfP755zm2oEQkL8ls4NOF\nZLNQr169WL9+PW3btmXv3r1cf/31DB48mPj4+FCXJiJh6Pjx49x0000MGjSIuLg4Hn30Ub799ttc\nE/YAOnXqxLp167j66qvZu3cv7du3Z/To0eTVwQSRcKURvmyQkJDAyy+/zAsvvEBCQgJXX301n3/+\nuaY6RCQgNjaW7t27s2nTJooVK8bEiRPp1q1bqMvKsPj4eJ555hlee+01AHr27MmECRMoUqRIiCsT\n8QZN6WZQdga+c5YuXUqvXr3Yt28f5cuXZ+rUqbRp0yZbX1NEwt+8efO49dZbOXbsGHXr1uWLL76g\nRo0aoS4rS3zxxRf06dOH48ePU69ePWbPnk21atVCXZZIrqcp3TDWtm3bP011vPHGG5rqEMmjnHOM\nHDmSzp07c+zYMXr06MHKlSs9E/YAevTowZo1a6hVqxYbN26kefPmfPPNN6EuSyTPU+DLZuXKlWPh\nwoU8/fTTxMfH88QTT3Drrbfy+++/h7o0EclBp06d4vbbb2fIkCE45xg+fDjTp0/35JRnjRo1WLVq\nFZ06deLw4cNcd911fPjhh6EuSyRP05RuDvrXv/7FPffcw++//06DBg2YNWsWl19+eY7WICI5b/v2\n7fTs2ZPvv/+ewoULM2nSJLp37x7qsrJdQkICgwcPZvTo0QA88sgjvP766+TPnz/ElYnkPjqGL4NC\nEfgANm/eTPfu3dm6dSslS5Zk6tSpXHPNNTleh4jkjJiYGG655RYOHTpE9erVmTVrVtidSDm7jR8/\nngcffJCzZ89y7bXXMm3aNIoXLx7qskRyFR3Dl8vUrl2bVatW0blzZw4fPkyHDh14++23dVyfiMc4\n53j77be57rrrOHToEJ06deLbb7/Nc2EPoG/fvixevJgyZcrw9ddf06JFC2JjY0NdlkieosAXAsWK\nFWP27NkMHjyYhIQEHnvsMe6//37OnDkT6tJEJAucPn2afv368dhjjwWmNf/973/n6VGtVq1asXr1\nav7yl7+wdetWrrrqKhYtWhTqskTyDE3phthnn33Gvffey+nTp2nZsiUzZszQ+fpEcrE9e/Zw0003\nsWrVKi6++GI+/vhjbr311lCXFTZOnDjBHXfcwZdffkn+/Pl59913eeCBB0JdlkjY05RuLnfbbbex\nbNkyKlWqxIoVK7jyyitZs2ZNqMsSkQxYsWIFTZs2ZdWqVVSuXJnly5cr7CVTpEgRZs6cycCBA4mP\nj+fBBx/k8ccfJyEhIdSliXiaAl8YaNq0KWvWrKF169bs3r2btm3bMmnSpFCXJSLpMG7cOKKioti3\nbx9RUVGsWbOGxo0bh7qssBQREcGrr77Kxx9/TIECBXjzzTfp1q0bx48fD3VpIp6lwBcmypYty6JF\ni7j//vuPmdA3AAAgAElEQVQ5ffo0d911FwMHDtSnXpEwFxcXx8MPP8x9993H2bNnefTRR4mOjqZ0\n6dKhLi3s3XPPPSxcuJCSJUsyd+5cWrZsyS+//BLqskQ8ScfwhRnnHO+//z4DBgwgPj6eDh068Nln\nn1GiRIlQlyYiyRw4cIBbbrmFJUuWEBkZyZgxY7jnnntCXVau8/PPP9O1a1c2bdpEqVKlmDlzpi5D\nKZKMzsOXQeEa+M4JPndXtWrVmDlzJn/5y19CXZaI+K1du5YePXqwc+dOKlSowIwZM7jqqqtCXVau\ndezYMXr37s38+fMpUKAAH330EX369Al1WSJhQ4s2POrcMUBNmjTh559/pmXLlkydOjXUZYkI8Mkn\nn9C6dWt27txJy5YtWbNmjcJeJhUtWpR///vfPPbYY8TFxdG3b1+GDBlCYmJiqEsT8QQFvjBWpUoV\nli1bxp133smpU6fo3bt34Nx9IpLz4uLiePzxx7n77rs5ffo09913H4sXL6Z8+fKhLs0T8ufPz5tv\nvsn7779PREQEI0eO5KabbtK1x0WygKZ0cwHnHG+99RZPPfUUCQkJOq5PJAQOHDhAr169+OabbyhQ\noADvvPOOzh+XjRYuXMgtt9zC0aNHadiwIbNnz6Zy5cqhLkskZHQMXwblpsB3zuLFi+nVq5eO6xPJ\nYWvWrKFnz57s2rWL8uXLM336dFq2bBnqsjxvy5YtdOvWjdjYWMqWLcusWbM0dS55lo7hy0Pat2+v\n4/pEctj48eNp06YNu3btolWrVnz33XcKezmkVq1arFy5kvbt27N//37atWvHlClTQl2WSK6U7sBn\nZk2yoxBJm5SO63v88cc5e/ZsqEsT8ZQzZ87wyCOPcM8993DmzBn69++v4/VCoESJEsyfP58HHniA\nM2fOcNtttzFs2DAt5hBJp3RP6ZrZXUBJ59wbQW0jgJXOuVlZXF+2yY1TusGcc7z99ts89dRTxMfH\n07x5c6ZOnUqVKlVCXZpIrvfLL7/Qq1cv1qxZQ2RkJO+99x79+vULdVl5mnOON998k6eeeorExER6\n9erFP//5TwoVKhTq0kRyREiO4TOzycB/nXMvB7XNASY55yZntJiclNsD3zkrV66kd+/e/PrrrxQv\nXpyJEyfStWvXUJclkmvNmjWLvn37cvToUapWrcrUqVNp1qxZqMsSvzlz5nDrrbdy4sQJ/vKXvzB9\n+nSqV68e6rJEsl2OH8NnZg8D24H5ZvZY0FOTgNcyWohkTIsWLVi7di1dunThyJEjdOvWjSFDhhAf\nHx/q0kRylbi4OJ566il69OjB0aNHufHGG1m7dq3CXpjp3LkzK1asoHr16mzYsIErr7yS2bNnh7os\nkbCXkUUbLwOrnXPfAZvM7E5/+6XAoSyrTNKsZMmSzJ49m5EjRwbOXXXNNdewZ8+eUJcmkivs3LmT\ndu3a8Y9//IOIiAhGjRrFF198QfHixUNdmqSgXr16rFmzhh49enDs2DG6d+/Os88+q3OUipxHRgLf\nAuByAOfcAiDBzLoBNYEeWVibpEO+fPkYNGgQixcvpkKFCixdupSGDRvy73//O9SliYS1L7/8ksaN\nG7NixQoqVarEkiVLeOqppzDL8MyJ5ICiRYsyY8YMRo4cSb58+Xj55Zfp2LEjBw8eDHVpImEpI4Hv\nbqComRUDcM59BpQAqjrnfsnK4iT92rZty7p167j++us5dOgQ3bp14+GHH+bUqVOhLk0krJw6dYr+\n/ftz4403cvjwYTp16sS6deto1apVqEuTNDIzBg0axMKFCylTpgxff/01TZo0YeXKlaEuTSTsZNmJ\nl82sJ1DLOfdKluwwm3ll0UZqEhMTef311xk6dChxcXHUqVOHyZMn06hRo1CXJhJya9eu5fbbb2fL\nli1ERkbyyiuvMGDAAPLl06lJc6vdu3dzyy23sGLFCvLnz89LL73EwIED9TMVzwirK22YWVnn3P4s\n22E28nrgO+f777/ntttuY/PmzURGRjJixAgef/xx/RKUPCkxMZHRo0fz7LPP6oOQB509e5ahQ4fy\nj3/8A4DrrruOiRMn6tyJ4glhFfhyk7wS+MA3dfX000/z/vvvA75fguPGjdN1KSVP2blzJ3379mXR\nokUAPPzww7z66qs6j5sHzZkzh759+3Lw4EFKly7NhAkTuOGGG0Jdlkim6NJqckGFChXivffeY/bs\n2ZQqVYqFCxdSv359PvroI/JK6JW8yznH2LFjqVevHosWLaJ06dJ8+eWXvPPOOwp7HtW5c2fWr1/P\ntddey8GDB+ncuTNPPvkkZ86cCXVpIiGjEb48Zv/+/fTv35+ZM2cC0KFDBz766CON9okn/frrr9x/\n//1ER0cD0L17d8aMGUO5cuVCXJnkhMTERF577TWee+454uPjadSoERMnTqRBgwahLk0k3TTCJ+lS\ntmxZpk+fzuTJkylRogTR0dEa7RPPOTeqV79+faKjoylRogSffvopM2fOVNjLQ/Lly8fgwYNZunQp\nl19+Od9//z1NmzbllVde0Tn7JM/RCF8etm/fPvr3788XX3wBwLXXXsv7779PjRo1QlyZSMb9/PPP\n9O/fPzCq16NHD95//30FvTzuxIkTDBw4kA8++ADwXaVowoQJ1KxZM8SViaSNRvgkw8qVK8eMGTMC\no31ff/01DRo04MUXX9SxLpLrnD17lpdffpl69eoFRvUmT57MjBkzFPaEIkWKMGbMGObNm0fFihVZ\nuXIljRo14u233yYxMTHU5YlkO43wCQAHDx5k4MCBTJgwAYBatWoxZswYoqKiQluYSBp888039O/f\nn02bNgFwxx13MHr0aMqWLRviyiQcHTlyhAEDBvDJJ58A0KZNGz788EPq1KkT4spEUqcRPskSpUuX\nZvz48SxevJhatWqxZcsW2rdvT58+fThw4ECoyxNJ0cGDB+nbty9RUVFs2rSJGjVqsHDhQiZNmqSw\nJ6kqXrw4EydOZMaMGZQtW5Zly5bRsGFDhg8frtkN8aywDXxmdrOZ/dfMEsysSbLnhppZrJltMrMO\nQe1NzGyDmW01szdyvurcLyoqivXr1/Piiy9SsGBBJk6cSI0aNRg9ejRnz54NdXkiAMTFxfHmm29S\ns2ZNJkyYQGRkJMOHD2fDhg1ce+21oS5PcomePXuyadMm7r//fuLi4njhhRdo2LAhS5YsCXVpIlnP\nOReWN6AWUANYBDQJaq8DrAPyA1WBbfxvanoV0Mx/fw7Q8Tz7d3J+W7dudZ06dXKAA1yNGjXc7Nmz\nXWJiYqhLkzxszpw5rnbt2oH35XXXXee2bNkS6rIkl/vmm29crVq1Au+rfv36uYMHD4a6LJEAf27J\ncK4K2xE+59wW51wskHy+ujswxTkX75zbDsQCzc2sHFDEObfav91EoEeOFexBNWrUYO7cuXz11VfU\nqlWL2NhYbrzxRjp27MjGjRtDXZ7kMZs3b6Zz58507tyZzZs3c8UVV/DFF18QHR2tlZaSaVdffTXr\n169n2LBhFChQgHHjxlGzZk3effdd4uPjQ12eSKaFbeA7j4rAzqDHu/1tFYFdQe27/G2SSZ07d+aH\nH37gjTfeoFixYixYsICGDRvy4IMPsnv37lCXJx63Z88e+vfvT4MGDZg7dy6XXnopr732Ghs3bqR7\n9+6YZfgYZpEkChYsyPDhwwNX6Thy5AiPPPIITZo0ISYmJtTliWRKSAOfmS3wH3N37vaD/2u3UNYl\nf1agQAEGDBhAbGwsDz30EAAffvgh1atXZ9CgQRw+fDjEFYrXHDlyhKFDh1K9enXGjBlDYmIi9913\nH1u3buXpp5+mYMGCoS5RPKpOnTosWLCAGTNmULVqVX744Qfat29Pr1692L59e6jLkzxk27ZtnD59\nOkv2FfanZTGzxcBTzrm1/sdD8M1jj/Q/ngcMA3YAi51zdfzttwLtnHP9U9mvGzZsWOBxVFSUTkGS\nDlu2bOH5559n2rRpAFx66aUMHDiQxx9/nMKFC4e4OsnNTp06xdtvv80rr7zC0aNHAd/B9S+99BJ1\n69YNcXWS1/zxxx+MGjWKESNG8McffxAZGckjjzzCM888Q8mSJUNdnnjUwYMHeeCBB5g1axbXXXcd\nrVq14oUXXsjUaVlCvjjjQjdgMdA06HFdfIs2IoHLSbpoYyXQHN9xf3OATufZbwYOmZTk1qxZ4zp2\n7Bg40LlUqVLu5ZdfdseOHQt1aZLLnDhxwr366quuTJkygfdT+/bt3cqVK0NdmojbsWOHu+OOOwLv\nzaJFi7oRI0a4kydPhro08ZATJ064l156yRUpUsQBLl++fO7JJ590zmV+0UbIA12qhfkWXOwE/gD2\nAnODnhvqD3qbgA5B7U2BH/At5HjzAvvP3E9Fkli8eLFr2bJl4JdhsWLF3LBhw9zhw4dDXZqEuaNH\nj7r/+7//cyVKlAi8f6688koXHR2tFeESdtauXes6dOgQeK9WqFDBffjhh+7s2bOhLk1ysZMnT7pR\no0a5UqVKBd5bnTt3dhs2bAhs49nAl903Bb6sl5iY6BYsWODatWsXeMMWKVLEDRkyxO3duzfU5UmY\n2b9/v3vuuedc0aJFA++XVq1aublz5yroSdhbsGCBa9y4ceC9W7VqVffhhx+6M2fOhLo0yUVOnz7t\n3nrrLVeuXLnAe6lFixbu66+//tO2CnwKfGFpyZIlST4FR0ZGuj59+rjvv/8+1KVJiP33v/91/fr1\ncwULFkwydbto0SIFPclVEhIS3OTJk5Ocv69KlSrugw8+UPCT8zp16pR799133WWXXRZ47zRp0sR9\n9dVXqf4eVOBT4Atrq1atcj179nRmluSP++zZs11CQkKoy5MckpiY6ObOnZvkQ4CZuW7durmlS5eG\nujyRTImPj3eTJ092derUCby/K1eu7N566y134sSJUJcnYeTIkSPu73//uytdunTgvVK/fn03c+bM\nC37gVeBT4MsVfvrpJzdgwABXuHDhJFfuGDVqlM5m72GHDx92r7/+epIrYxQqVMg99NBDujqGeE58\nfLybMmWKq1u3buD9Xrx4cffMM8+4PXv2hLo8CaHdu3e7gQMHBhZjAK5p06Zu2rRpaR78UOBT4MtV\njh496kaNGuUqV66cZLr31ltv1ZSeRyQmJrqlS5e6O++8M8m0bYUKFdyIESO0kEc8LyEhwU2fPt21\natUqye+5e+65x/3www+hLk9y0MqVK92dd97pIiMjA++Fa6+91i1YsCDdf+8yG/jC/jx82cXMXF7t\neziIj49nzpw5fPjhh8yZM+dcCKdGjRr069eP22+/ncsuuyzEVUp67NmzhylTpjBu3Dh+/PFHAMyM\nDh068MADD9CtWzcKFCgQ4ipFctZ//vMfRo8ezcyZMwO/59q1a0f//v3p2bMnkZGRIa5QstqZM2f4\n/PPPeeedd1i92ne113z58tGzZ0+GDBnClVdemaH9mhkuE+fhU+CTkPv1118ZN24c48aNC1yqzcxo\n164dd9xxBzfffDPFihULcZWSkuPHjzNjxgw+/fRTvv7668AftHLlynHvvfdy3333cfnll4e4SpHQ\n27ZtG2+88Qbjx4/n5MmTAJQpU4Z+/frxwAMPULVq1dAWKJkWGxvLP//5T8aOHcvBgwcBKFGiBPfd\ndx/9+/fP9M9YgS+DFPjCT3x8PHPnzuWTTz5h9uzZnDlzBoDIyEi6du1K7969ueGGGyhSpEiIK83b\nTp48ybx585g6dSqzZ88OXPYnMjKSLl26cOedd2o0TyQVx48f59NPP+X999/nhx9+AP43Et6nTx+6\nd+9OoUKFQlylpNXvv//OtGnT+Pjjj1m2bFmgvVGjRjz66KPcdtttXHzxxVnyWgp8GaTAF96OHTsW\nGDlatGhRYOQoMjKS6667jp49e9KtWzfKli0b4krzhkOHDvHll1/yxRdfEB0dneTajldffTV33nkn\nN998M8WLFw9hlSK5h3OO//znP4wZM4apU6dy9uxZAIoUKcLNN9/MXXfdRbt27ciXL6SXvJcUJCQk\n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\nKVasGMWKFaNo0aIUK1aMMmXKUL58eSpUqEDx4sU9H+guRIEvgxT4REREJLfIbODTsj0RERERj1Pg\nExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERER\nj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4R\nERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4\nBT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExER\nEfE4BT4RERERjwvbwGdmr5rZJjP73symm9mlQc8NNbNY//MdgtqbmNkGM9tqZm+EpnIRERGR8BK2\ngQ+IBuo55xoBscBQADOrC/QC6gA3AO+Zmfm/532gn3OuJlDTzDrmfNkiIiIi4SVsA59zbqFzLtH/\ncCVQyX//RmCKcy7eObcdXxhsbmblgCLOudX+7SYCPXKyZhEREZFwFLaBL5l7gTn++xWBnUHP7fa3\nVQR2BbXv8reJiIiI5Gn5Q/niZrYAKBvcBDjgWefcl/5tngXinHOfhaBEERERkVwvpIHPOXf9+Z43\ns75AZ+CaoObdwGVBjyv521JrT9Xw4cMD96OiooiKirpw0SIiIiLZLCYmhpiYmCzbnznnsmxnWcnM\nOgGjgaudc4eD2usCnwJX4ZuyXQDUcM45M1sJPAasBr4C3nLOzUtl/y5c+y4iIiISzMxwztmFt0xZ\nSEf4LuBtIBJY4F+Eu9I595Bz7kczmwr8CMQBDwUlt4eB8cBFwJzUwp6IiIhIXhK2I3zZTSN8IiIi\nkltkdoQvt6zSFREREZEMUuATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER\n8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+AT\nERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGP\nU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPC9vAZ2Yvmtl6M1tnZvPMrFzQc0PNLNbMNplZh6D2Jma2wcy2mtkboalcREREJLyYcy7U\nNaTIzAo75373338UqOuc629mdYFPgWZAJWAhUMM558xsFfCIc261mc0B3nTOzU9l/y5c+y4iIiIS\nzMxwzllGvz9sR/jOhT2/S4BE//0bgSnOuXjn3HYgFmjuHwEs4pxb7d9uItAjp+oVERERCVf5Q13A\n+ZjZS8DdwFGgvb+5IrAiaLPd/rZ4YFdQ+y5/u4iIiEieFtIRPjNb4D/m7tztB//XbgDOueecc5Xx\nTeE+GspaRURERHKrkI7wOeeuT+Omk4GvgOH4RvQuC3qukr8ttfZUDR8+PHA/KiqKqKioNJYjIiIi\nkn1iYmKIiYnJsv2F86KN6s65bf77jwJtnXO9ghZtXIVvynYB/1u0sRJ4DFiNLyC+5Zybl8r+tWhD\nREREcoXMLtoI52P4XjGzmvgWa+wA/grgnPvRzKYCPwJxwENBye1hYDxwETAntbAnIiIikpeE7Qhf\ndtMIn4iIiOQWnj0ti4iIiIhkDQU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T\n4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+ERER\nEY9T4BMRERHxOAU+EREREY9T4BMRERHxOAW+PCYmJibUJYSE+p23qN95i/qdt+TVfmeWAl8ek1f/\no6jfeYv6nbeo33lLXu13ZinwiYiIiHicAp+IiIiIx5lzLtQ1hISZ5c2Oi4iISK7knLOMfm+eDXwi\nIiIieYWmdEVEREQ8ToFPRERExOPyXOAzs05mttnMtprZ4FDXk5XMbJyZ7TezDUFtxc0s2sy2mNl8\nMysa9NxQM4s1s01m1iE0VWeemVUys0VmttHMfjCzx/ztnu67mRU0s1Vmts7f72H+dk/3+xwzy2dm\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#zt = 64, z = 16, theta=0\n", + "plot_flight_path(64, 16, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cool! Note that the plot title tells us what the calculated value of $C$ was for our input conditions. We have a value of $C$ between $0$ and $\\frac{2}{3}$ and our path is trochoidal, like we announced it would be.\n", + "\n", + "* For negative values of $C$, the resultant flight path consists of a series of loops. Let's try it out!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUqZMGcLCwrjpppvo0KHDX9arWLEigwYNytZ77Nu3j/Xr1zNlyhQAWrRoQfPmzalcuTKffvop999/\nP2PHjj3nNo4cOUKBAgWSP4+KiiI2NjZT75/ZfYTz28/0nGv/05Kdfd2zZw/Lli1j5cqVrFixggkT\nJvD888+nu34w9nPy5MnMmDGDN998M9vbyOz3Pzs0tSoiInleo0aN+O9//0u9evWIjIykQ4cOvPXW\nW+zbty9o7xEdHU3t2rWTPy9XrhxfffUVy5Yto3HjxpneRsqyGhcXR4kSJTL12tT72LJlS4YMGcKY\nMWOSj0PLSent/7nWz+q+zps3j/bt29OrVy+6du3K7t27adWqVY7uZ6dOnfjggw+46aabsnUbuqx8\n/7NDI3IiIpKjQuXWXa+99hr79u1j2LBhgG9a7pJLLvnTOimn4lLKzFRczZo1+e6775I/DwsLIzEx\nkWXLlnHq1CnmzJnD4sWLOX36NJ9//nma26lUqRIrVqxI/vzQoUM0aNAgW/v41ltvcd1119GgQQO6\nd+/OxIkTg7Kf6Ulv/9OTnX3dtWsX1atXB3xnvLZt25bx48fnyH5+8cUXvPrqqyxevJjo6GguueQS\nPvnkkwzPxE1t6dKlxMXFZer7ny3W2nz58O26iIgEQ6j/m/raa6/Z5557zlpr7fr16+2iRYtsmzZt\n7Pfffx+09zh9+rRt0qRJ8ufNmjWzv/7665/WGThwoH3ppZeSP9+yZYtNSkpK/vzkyZO2du3ayZ/X\nrVvX7tu3z1pr7ebNm/+0bmqp97FPnz52586d1lpr27Rpcx57lrYxY8bYHj16JH9+rv1PvZ/WZm9f\nR48ebUePHm2ttbZt27Z2x44dtm/fvjmyn3PmzEn+eiYlJdmyZcvar776Kt39CUj9dUkp9fc/Len9\nXfIv/0ufMTZEflPKbcYYm1/3PSNnz55l8+bN7Nixg507d7J3715OnDjBmTNnKF26dPJBpiIiAend\n6DsULFmyhMOHD1OsWDFefPFFrr/+erp27crUqVN56qmngvpeX375JYsXL8ZaS7Vq1ejSpUvyc9Om\nTWPQoEEYY+jfvz8dO3akQYMGfPDBB9SvXz95vQkTJrB9+3astVSsWDF5G9WrV+edd97hxhtvzNQ+\n7t27l2effZbLLruMtm3b8sUXXwRtP999910+/vhjdu3aRY8ePejXrx/R0dHp7n9a+5mdfT1+/DjP\nP/88tWvXplatWjRp0oQ+ffrw3HPP5ch+jhw5koSEBHbs2EGVKlV44IEHzrk/6X1dIO3vf1rS+7vk\nX/6XA05V5ITjx4/z7bffMnfuXJYtW8batWuJj49Pc93atWuzdu3aXE4oIqEulItcWiZNmkT58uUp\nV64cZcuWdR0nU5KSkliwYEGmL2ExbNgwWrRoQfXq1enRoweTJ0/O4YTBk5V99fJ+pkVFLpPye5E7\nfvw4M2bMYNKkScybN4+EhIQ/PV+hQgUqVapEuXLlKF26NEWLFuWCCy6gVKlSdOrUyVFqEQlVXity\nn332GWfPnqVRo0bnvNZZKPn444+5+eabKViwYKbWP3ToEB9++CHFixenVq1aNG3aNIcTBk9W9tXL\n+5kWFblMyq9FbsOGDbzzzjuMGzeOuLg4AMLDw2nSpAmtWrWiRYsW1K9fP0euki0ieZfXipwXnTx5\nksKFC7uOkSvy076mpiKXSfmtyK1evZoXXniB2bNnJy9r0aIFXbp0oWPHjiF3+xcR8RYVOZHgyGqR\n0+VH8rjt27fz5JNPJt/CpFChQnTv3p2+fftSo0YNx+lERETkfKjI5VHx8fEMHjyYwYMHc/r0aQoU\nKECfPn146qmnKFWqlOt4IiIiEgQqcnnQmjVr6Nq1K+vWrQOgc+fOvP7665QpU8ZxMhEREQkm3aIr\nD0lMTGTIkCE0atSIdevWUblyZRYsWMDEiRNV4kRERPIgjcjlEYcOHeKuu+7i66+/BuDBBx/kjTfe\nyLdn/YiIiOQHKnJ5wPr167nlllvYunUrpUqVYuzYsdx0002uY4lIPlK+fPm/3M9SRLIuq9c11NSq\nx82ePZsmTZqwdetWGjRowIoVK1TiRCTXBW6z5IXH8OHDk0vnI488wtmzZ51nyu7j+PHjtG/fHoCI\niAjGjx/vPJMe5/fYvn17lv7uqch52Pjx4+nQoQOxsbF06tSJRYsWeeZWMyIiLgwaNIg+ffpgreX1\n11/n7bffJiLCu5NT0dHRzJw5k8cff5yEhAS6devG6NGjXceSXKQi51EjRoygW7duJCYmMmDAACZO\nnEihQoVcxxIRCVmvvfYazz77LMYY/vOf//Dkk0+6jhQU4eHhDB06lNdeew1rLffffz/Dhw93HUty\nie7s4EFDhw5N/gfojTfe4IknnnCcSEQktI0cOZKHHnoIYwwTJkygc+fOriPliLfffpvHHnsM8O1z\n7969HSeSYNEtulLxapH7z3/+Q+/evTHG8N5779GrVy/XkUREQtqkSZO4++67sdby/vvvc//997uO\nlKNSltaPP/6Yjh07uo4kQaAil4oXi9yUKVPo3Lkz1lpGjBjBgw8+6DqSiEhIW7BgAX/7299ISEhg\nyJAhPPXUU64j5YpXX32VAQMGEBUVxZw5c7j++utdR5LzpCKXiteK3Ny5c2nbti0JCQm8+uqrPPvs\ns64jiYiEtG3bttGoUSMOHTrEY489xptvvuk6Uq6x1vLII48wbNgwoqOjWbp0KdWrV3cdS86Dilwq\nXipyv/zyC40bN+bYsWM8/vjjvPHGG7pek4jIOcTGxtKsWTPWrVvHTTfdxOzZswkPD3cdK1clJSVx\n1113MW3aNKpUqcLSpUu58MILXceSbFKRS8UrRe7IkSM0adKETZs2cdttt/HJJ58QFqaTjUVE0mOt\n5a677uLjjz+matWq/PDDDxQvXtx1LCdOnjxJ8+bN+fHHH2ndujX//e9/812hzSvSK3JqBCEsMTGR\nTp06sWnTJurUqcO4ceNU4kREMjB69Gg+/vhjihQpwueff55vSxxA4cKFmTlzJiVLluTLL7/k+eef\ndx1JgkytIIQNGjSIL7/8kosvvpjPP/+cIkWKuI4kIhLSNmzYwCOPPALAe++9R0xMjONE7pUvXz55\nNmfw4MF88803riNJEKnIhahFixbx4osvAjBhwoQs33tNRCS/iY+P56677iIuLo7u3bvTpUsX15FC\nxrXXXssLL7yAtZauXbty4MAB15EkSFTkQtChQ4fo3LkzSUlJPPPMM7Rq1cp1JBGRkPfqq6+ybt06\nKleuzLBhw1zHCTnPPfccLVq0YM+ePdx777144ThxyZhOdghBnTp1YsqUKTRt2pQFCxYQGRnpOpKI\nSEhbs2YNDRs2JCEhgYULF9KiRQvXkULSzp07qVu3LkePHmXcuHF07drVdSTJJJ3s4BGffvopU6ZM\noXDhwkyYMEElTkQkAwkJCdx7770kJCTQp08flbhzKFeuHG+99RYAjzzyCHv37nWcSM6XilwIOXTo\nUPLdGoYMGULFihUdJxIRCX0jRoxg1apVlC9fnkGDBrmOE/K6d+9O69atOXLkCH379nUdR86TplZD\nSPfu3Rk3bhzXXnst8+bN06VGREQycODAAapUqcKxY8f47LPPuOWWW1xH8oQdO3ZQq1YtYmNjmT17\n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\nli5dyh133MG0adNCqiilnFIdNWoU9913n+tIkgs0tZoPXHnllTzxxBNYa+nevbtu3yUikg0RERFM\nmjSJ6Ohopk+fzujRo11HSpZ6SrVnz56uI4ljGpHLY06fPs2VV17Jhg0bPHGwrohIqJo4cSJ33303\nBQsWZOXKlVSvXt11JCZNmkSXLl2Ijo7mp59+oly5cq4jSS5Jb0RORS4PWr16NY0bN+bs2bPMmTOH\nm266yXUkERFP6tatG+PHj6du3br88MMPFChQwFmWnTt3UrduXY4ePaop1XxIU6v5SP369Xn55ZcB\nuPfeezl06JDjRCIi3jR8+HAqVarEmjVreOqpp5zlSExMpFu3bhw9epT27dtrSlWSqcjlUU8++STN\nmzdnz5499O7dW/diFRHJhujoaCZPnkxkZCTDhg3j448/dpLj9ddfZ8GCBVxyySV88MEHIXXyhbil\nqdU8bNu2bdSpU4fY2FjGjBlD9+7dXUcSEfGkYcOG8fDDD1OkSBGWL19OtWrVcu29ly9fTrNmzUhI\nSNDhMvmYplbzoQoVKjBs2DAAHnroIX7++WfHiUREvKlv377cddddxMbG0rFjx1y78HpsbCxdunQh\nISGBRx55RCVO/kIjcnmctZZu3boxYcIEateuzdKlSylYsKDrWCIinhMbG0ujRo34+eef6dKlC+PH\nj8/xKc577rmHMWPGULt2bZYtW+b0ZAtxSyNy+ZQxhhEjRhATE8O6det47LHHXEcSEfGkIkWKMH36\ndAoXLszEiRMZOXJkjr7fRx99xJgxYyhQoACTJk1SiZM0aUQun/jxxx9p0qQJ8fHxTJkyhX/84x+u\nI4mIeNLkyZPp3LkzERERfPPNN1xzzTVBf4+1a9fSuHFjTp8+zYcffsg999wT9PcQb9GIXD5Xr149\n3nrrLQDuv/9+fv31V8eJRES8qVOnTvTr14+EhATuuOMOduzYEdTtHz9+nL///e+cPn2ae+65RyVO\nzkkjcvmItZY777yTTz75hNq1a/P9999TuHBh17FERDwnISGB9u3b8+WXX1KnTh0WL15MkSJFznu7\n1lo6derE1KlTqV27Nj/88AOFChUKQmLxOo3ICcYYPvjgg+Tj5e6//35dX05EJBsiIiKYMmUKMTEx\nrF27lh49epCUlHTe2x0xYgRTp06lSJEiTJs2TSVOMqQil88ULVqUmTNnUqRIESZPnszbb7/tOpKI\niCcVL16czz//nGLFijF9+vTkO+pk18KFC3n00UcBGD16NFWrVg1GTMnjNLWaT3366afccccdhIeH\n8yGE+i0AACAASURBVPXXX9OyZUvXkUREPGnOnDm0a9cOay0TJ06kc+fOWd7Gzp07adiwIQcOHODx\nxx9n6NChOZBUvExTq/Int99+O8888wyJiYnceeed7Nq1y3UkERFPatOmDW+++Sbgu+7bggULsvT6\nU6dO0aFDBw4cOMCNN97I4MGDcyKm5FEakcvHEhMTadOmDXPnzqV+/fosWrRIJz+IiGTTI488wjvv\nvEPx4sVZsmQJ1atXz/A11lq6dOnC5MmTqVixIsuXL6dEiRK5kFa8RiNy8hfh4eFMnjyZypUrs3r1\narp16xaUg3VFRPKjN998kw4dOnD06FHatGnD3r17M3zN0KFDmTx5MkWKFOHzzz9XiZMsU5HL5y66\n6CJmzZpFsWLF+PTTTxkwYIDrSCIinhQeHs7EiRNp3LgxO3bsoF27dsTGxqa7/syZM3n66acBGD9+\nPDVr1sytqJKHqMgJ1apV45NPPiE8PJxBgwYxduxY15FERDypUKFCfP7551SsWJFVq1Zxxx13cObM\nmb+st3z5cjp37oy1lldeeYUOHTo4SCt5gY6Rk2TvvfceDz74IJGRkXzzzTe0aNHCdSQREU/atGkT\nzZs358CBA9x5551MmjSJ8PBwAHbs2EHjxo3Zt28f99xzDx988AHG/OXQJ5E/Se8YORU5+ZPAwbol\nSpRg8eLFVKtWzXUkERFPWrVqFddddx3Hjx+nV69evPfeexw/fpyrr76a9evXc/311zNnzhyioqJc\nRxUPUJFLRUUubQkJCdx2223Mnj2b8uXLs2TJEi677DLXsUREPGnhwoW0bt2a06dP8/jjj7NmzRq+\n/vprqlevzpIlSyhevLjriOIRKnKpqMil7+TJk9xwww0sXbqUunXrsmDBAooVK+Y6loiIJ82ePZtb\nb701+aoApUqVYunSpVxxxRVug4mn6PIjkmmFCxdm9uzZxMTEsGbNGm6//Xbi4+NdxxIR8aR27dpx\n0UUXJX9+0003qcRJ0KjISZpKlizJ//73Py699FLmzZsXtBtCi4jkN4MHD+bAgQPJn48bN46RI0c6\nTCR5iYqcpKtChQrMmTOH6OhopkyZwsMPP4ymo0VEMm/UqFE8++yzGGOYOnUqw4YNA+Chhx7i/fff\n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\nnfuBvr+KXDIqcpLRXL9+nY0bN7J69Wo2btzIkSNH7nm8YMGCNGrUiKeffhofHx9q1qypk9zTIZfL\nxaFDh9zF7bvvvuPcuXP3PKdYsWL4+vri6+tL8+bNdUhdJB2LiooiIiKCyMhI+vbt+8DfR0UuGRU5\nyehOnz7Nt99+y8aNG9m4cSMnT5685/Hs2bNTu3ZtfHx88PHxoW7duhQvXlwzYtPYxYsXCQ8Pd99+\n+OEH9yXd7nrooYdo2LAhDRs2pEmTJjzxxBP6dxLJZFTkklGRk8zEWsvx48cJDQ1l27ZthIWF3XMt\nwruKFClCzZo177mVKVNGpSEFWGs5e/Yse/bsYe/evezdu5ft27ffc57jXcWLF6dBgwY0atSIRo0a\nUalSJf0biGRyKnLJqMhJZnf58mXCw8MJCwsjLCyMnTt3Eh0d/ZvneXt7U6VKFapUqULlypXdH4sV\nK6ZycR9RUVEcPnyYQ4cOsX//fndxu3Tp0m+emydPHmrXrk29evWoV68edevWpWTJkg6kFpH0TEUu\nGRU5kXtZa4mMjGTXrl3u286dO7l48eLvPt/b25uKFSvy2GOP8eijj/LYY4+5b0WLFs3QJc9aS1RU\nFJGRkURGRnL8+HGOHDnCoUOHOHTo0O8WNoACBQpQrVo1qlevTrVq1ahZsyaVK1fW7GIR+UMqcsmo\nyIn8MWst58+fZ//+/Rw4cOCej5cvX77v1+XKlYtSpUpRokQJSpYsSYkSJdz3ixcvTuHChSlcuDD5\n8uVLd4UvNjaW8+fPc+7cud98PH36tLu8xcTE3Pd75M2bl4oVK7pvTz75JNWrV6dkyZLp7r9XRDyD\nilwyKnIiD+5uwTt69Cg///wzP//8M8eOHXPfv98eqeSyZcvmLnWFCxfG29ubvHnzki9fvns+5s2b\nlxw5cpAtWzb3LXv27GTLlo2sWbPicrlwuVzcuXPHfd/lchEbG0tMTAwxMTHcvHnTfT8mJobo6Ggu\nX77M5cuX+fXXX933r1+//qeye3t7U6ZMGcqUKUPp0qUpX748FStWpEKFCpo0IiIpTkUuGRU5kdRz\n9epVTp8+zenTpzlz5gxnzpxx3z979iyXLl0iKiqKGzduOB31N7y8vHj44YcpVqwYxYoVo2jRou77\nxYsXp2zZspQuXRpvb2+no4pIJqIil4yKnIjzbt68yaVLl7h06RIXL17kypUrXL9+nWvXrnHt2jX3\n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\n8zlOaAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,numpy.pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can play around with the input values and see what kind of behavior results. Just note that any value of $C > \\frac{2}{3}$ will result in $\\cos \\theta > 1$, which doesn't exist. Python will probably throw a few errors if you hit that condition, but just try again!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The last case is $C = 0$. Take another look at Equation (16) and plug in $C = 0$, what should happen? It looks like it will just reduce to \n", + "\n", + "$$R = 3z_t$$\n", + "\n", + "It's a constant radius of curvature! In fact, this solution is a series of semi-circles, with a cusp between them. One way to force $C = 0$ that we can figure out from Equation (15), is to make:\n", + "\n", + "\n", + "$$z = 3z_t\\ \\ \\ ,\\ \\ \\ \\theta = 0$$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\npZeYNm0a1atXp1mzZpx11lkVUfZWef/99xk5ciQ33ngjAMOHD+eLL75g7dq1tGjRgpNOOmmz70/7\nsZa2vuL6l+txJv29WeX8nVxRklQ2/H/q/9x3332xT58+sX///t9pP++88+LcuXNjjDG2a9cuzpkz\np8j3r1ixInbs2HHT88MOOywuXbq0/AreBvn5+fH444+Pv/rVr2KMMc6fPz/ec889m14///zz4zff\nfFPs+7flWCdMmBAff/zxeO+998avv/56K49g80pbX3H9S7Of4n6Xsu1FZhqnRCVJKqVrrrmGE088\n8Ttts2fPZuHChbRo0QKAUaNG0bJlyyLf/+abb9KuXbtNzzt06MA///nP8it4GwwbNoxu3bptev7l\nl18yZswY1q9fD0C9evXYbrvtin3/1h7r559/zpNPPsl5551HixYteP7557fhKIpX2vqK61/e59Qp\nUUlSlTNr1iz+/Oc/f2c9rI2PQwgcdthh9OrVq1T7fOONN2jYsCGDBg3i66+/pn79+px77rlF9v3i\niy9o1KjRpueNGjVi5syZW308xdnW41y2bBnVqlVjxx13ZNWqVQAceOCB5Ofn88Mf/pALLriAY445\nhpo1axa7j6091p///OfcdNNNAHz66adUr169XI6ztPUV13+HHXYo13NqYJMklYkQilzvs9Q2/oW7\nNSZNmsSAAQNo3rw51apV4yc/+Qm9e/f+Xr899tiDu+66a1vK/J7Fixczbdo0hgwZAsCRRx7Jj370\nI9q0afO9vl9//TXbb7/9pufbbbcd33zzTYk+p6THCNt+nH//+9/52c9+xlNPPfWd9htvvJGBAwdy\n/fXX87vf/W6z+9iaY/3Pf/7DO++8w7vvvsvkyZMZNGgQt956a7H9t+U4S1vf5vpv7TktCadEJUmV\nxsEHH8yrr77KD37wA2rWrEnv3r154IEHWLx4cbl/dv369TnggAM2PW/RogWjRo0qtm/BYLpmzRoa\nN25cos8pfIxdu3blt7/9LU8++STvvvvuth1EAe+88w6HHnro99pnzpzJuHHjGDVqFC+//DK33347\nb7/9drH72ZpjfeONNzjhhBO44IILOOuss1i4cCHHHHNMuRxnaesrrv+2nNOScIRNklQmtmVkrCzd\neeedLF68mIcffhjITKc1bdr0O30KTqEVtC1Tou3atWP8+PGbnlerVo28vLwi++65555Mnjx50/Nl\n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\nSZISMm/ePPr160d+fj633norJ5xwQtIlSZVKoiNsIYTRIYQpBbap2Z89AWKMv4gxtiAzBXp5krVK\nkor27bffcsopp7B06VKOPfZYbrvttqRLkiqdREfYYoxHl7DrYOBVYACZEbXdC7y2W7atSAMGDNj0\nuGvXrnTt2rWUVUqSihNj5IILLmDSpEm0atWKwYMHU7169aTLknLC2LFjGTt2bIn6pvmmgzYxxs+y\njy8Hjowx9i1w08GhZKZCR+NNB5KUiPvuu4/rrruOunXrMnHiRNq3b590SVLO2txNB2m+hm1gCGFv\nMjcbzAUuAogxfhxCGAp8DKwHLjGVSVLFe+2117jhhhsA+Otf/2pYk8pRakfYyoIjbJJUPj755BMO\nPfRQVqxYwW233fady08kbZ3NjbAZ2CRJpbJs2TIOO+wwPvvsM/r06cPzzz9PtWqpXSVKyhkGNklS\nmVi7di1HH300b731FgceeCBvvvkm9erVS7osqVLIyYVzJUnpEmPkZz/7GW+99RbNmjVj+PDhhjWp\nghjYJEklcscdd/D0009Tt25dXnnlFZo3d81yqaI4JSpJ2qJBgwZx1llnEULgpZdeomfPnkmXJFU6\nTolKkrba6NGj6d+/PwAPPPCAYU1KgCNskqRivf/++3Tu3JlvvvmG6667jnvuuSfpkqRKy7tEJUml\nNmfOHDp16sSiRYvo168fgwYNcvkOqRwZ2CRJpfLll19y5JFH8sknn3DUUUcxYsQIatWqlXRZUqVm\nYJMkldjKlSvp1q0b7733Hu3bt+fNN9+kYcOGSZclVXredCBJKpE1a9bQq1cv3nvvPfbcc09Gjhxp\nWJNSwMAmSQJgw4YNnH766YwbN45mzZoxevRodtlll6TLkoSBTZIE5OXl0b9/f15++WUaN27MqFGj\naN26ddJlScoysElSFZefn89FF13EoEGDqFu3LiNGjKBdu3ZJlyWpAAObJFVhMUauvPJKHnvsMWrX\nrs2rr77KoYcemnRZkgoxsElSFRVj5Prrr+eRRx5hu+2248UXX6RLly5JlyWpCAY2SaqCYozccsst\n3HfffdSoUYNhw4ZxzDHHJF2WpGLUSLoASVLFijFy8803M3DgQKpXr86QIUM44YQTki5L0mYY2CSp\nCokxcuONN3L33XdvCmsnn3xy0mVJ2gIDmyRVETFGbrjhBu69915q1KhhWJNyiIFNkqqAGCNXX301\nDz74IDVq1GDo0KH06dMn6bIklZCBTZIquby8PC688EIef/xxatasydChQ+ndu3fSZUkqBQObJFVi\n69ev5+yzz2bIkCFsv/32vPDCC/zkJz9JuixJpWRgk6RK6ttvv+W0007j5Zdfpn79+rzyyit07tw5\n6bIkbQUDmyRVQitXrqRPnz688cYb7LDDDowcOZKDDz446bIkbSUDmyRVMosXL6ZHjx6899577LLL\nLowcOZL27dsnXZakbWBgk6RKZPbs2RxzzDF89tlntGnThpEjR7LHHnskXZakbeRXU0lSJfHhhx9y\n+OGH89lnn3HggQcyfvx4w5pUSRjYJKkSGD16NEceeSSLFi2iW7dujB07lqZNmyZdlqQyYmCTpBz3\n5JNP0qNHD/773//St29fRowYQYMGDZIuS1IZMrBJUo6KMfKrX/2K/v37s2HDBm644QaeffZZtt9+\n+6RLk1TGvOlAknLQunXruOCCC3jqqaeoVq0aDz/8MJdccknSZUkqJwY2ScoxS5cu5aSTTuKtt96i\nTp06DBkyhJ49eyZdlqRyZGCTpBzy8ccf07NnT2bNmkWzZs0YPnw4HTt2TLosSeXMa9gkKUeMHDmS\nTp06MWvWLA466CAmTZpkWJOqCAObJKVcjJH777+fHj16sHLlSk455RTefPNNmjVrlnRpkiqIgU2S\nUmz16tWcddZZXHvtteTn5/OLX/yC5557jjp16iRdmqQK5DVskpRSc+fOpU+fPrz//vvUrVuXp556\nipNPPjnpsiQlwMAmSSn0z3/+k759+7J06VL23HNPXnzxRfbff/+ky5KUEKdEJSlF8vPzueuuu+je\nvTtLly7l2GOPZdKkSYY1qYozsElSSnz99deceOKJ3HzzzZuuV3v11VfZYYcdki5NUsKcEpWkFHjv\nvfc45ZRTmD17NjvssANPP/00xx9/fNJlSUoJR9gkKUExRh5++GE6derE7NmzOeigg3jvvfcMa5K+\nw8AmSQn56quvOOmkk7jiiitYt24dF110EePHj6dVq1ZJlyYpZZwSlaQETJw4kX79+jFv3jwaNmzI\nn//8Z0499dSky5KUUo6wSVIF2rBhA7fffjudO3dm3rx5HHroobz//vuGNUmb5QibJFWQ2bNnc9ZZ\nZzFhwgQArr/+eu644w5q1qyZcGWS0i71I2whhGtDCPkhhMYF2m4KIcwMIUwPIRyTZH2StCUxRp56\n6ik6dOjAhAkTaNasGaNHj+buu+82rEkqkVSPsIUQdgOOBuYWaNsX6AvsC+wGjAkh7BVjjMlUKUnF\nW7p0KRdffDHPP/88ACeffDJ/+tOfaNKkScKVScolaR9hewC4vlDbicCQGOOGGOMcYCZwSEUXJklb\n8uKLL9KuXTuef/556tWrxxNPPMHf/vY3w5qkUkttYAsh9ALmxxinFnqpOTC/wPMF2TZJSoWvv/6a\ns846iz59+rBkyRK6dOnChx9+yLnnnksIIenyJOWgRKdEQwijgaYFm4AI/AK4mcx0qCTljFdeeYUL\nL7yQhQsXUrt2bQYOHMhll11GtWqp/fexpByQaGCLMRYZyEII+wOtgA9D5p+juwHvhRAOITOi1qJA\n992ybUUaMGDApsddu3ala9eu21q2JH3PkiVLuPLKKxkyZAgAnTp14sknn2TvvfdOuDJJaTV27FjG\njh1bor4hF67VDyHMBjrGGL8OIewHPAMcSmYqdDRQ5E0HIQTvRZBUrmKMPPPMM1x11VUsW7aM2rVr\nc/vtt3PllVdSvXr1pMuTlENCCMQYi7xuItV3iRYQyUyXEmP8OIQwFPgYWA9cYiqTlITZs2dz6aWX\n8o9//AOA7t2786c//Yk99tgj4cokVTY5McK2tRxhk1Qe1q1bx3333cdvfvMb1qxZQ6NGjbj//vu9\nqUDSNqkMI2ySlArjxo3j4osvZvr06QD069eP+++/n1122SXhyiRVZt62JEklsGjRIs455xy6du3K\n9OnT2WuvvRg9ejSDBw82rEkqdwY2SdqMjdOfe++9N3/961+pVasWAwYMYMqUKXTv3j3p8iRVEU6J\nSlIxRo0axZVXXsmMGTMAOOGEE3jggQdo06ZNwpVJqmocYZOkQj799FN69+7Nsccey4wZM9hrr714\n9dVXGT58uGFNUiIMbJKUtWzZMq644gratWvHSy+9RN26dRk4cCBTp06lR48eSZcnqQpzSlRSlbd2\n7VoeeeQRbr/9dpYvX04IgfPPP5/f/OY37LrrrkmXJ0kGNklVV15eHoMHD+aXv/wlc+bMATKL3953\n3320b98+2eIkqQADm6QqJ8bIq6++ys0338zUqVMB2G+//bjnnns47rjjXPxWUup4DZukKuWtt96i\nc+fO9OzZk6lTp7L77rvzxBNPMGXKFHr06GFYk5RKjrBJqhImTpzIbbfdxpgxYwBo0qQJv/jFL7jo\noovYfvvtE65OkjbPwCapUvv3v//NbbfdxsiRIwFo0KABV199Nddccw0NGjRIuDpJKhkDm6RKafz4\n8dxxxx289tprANSvX58rr7ySa665hh122CHh6iSpdAxskiqNGCOjRo3ijjvu4K233gKgbt26XHHF\nFVx77bU0adIk4QolaesY2CTlvLy8PF588UUGDhzI5MmTAWjUqBFXXHEFV1xxhUFNUs4zsEnKWatX\nr+bJJ5/k/vvv5/PPPwdgp5124pprruGSSy7xGjVJlYaBTVLOWbJkCY8++iiPPvooy5YtA6B169Zc\nc801nHfeedSpUyfhCiWpbBnYJOWM9957j4ceeohnn32WdevWAXDwwQdz/fXXc9JJJ1G9evWEK5Sk\n8mFgk5Rq69ev54UXXuChhx5iwoQJAIQQ6NmzJ9dddx1HHnmki91KqvQMbJJSaf78+Tz22GM89thj\nLFy4EMisoXb++edz2WWXscceeyRcoSRVHAObpNTIy8tj1KhR/PGPf+SVV14hPz8fgLZt23L55Zdz\n9tlnU69evYSrlKSKZ2CTlLg5c+bw5JNP8uSTTzJ37lwAatasyamnnspFF11Ely5dnPaUVKUZ2CQl\nYvXq1bzwwgv85S9/4Y033tjU3rp1ay688EL69+/PzjvvnGCFkpQeBjZJFSY/P59x48YxaNAgnn/+\neVauXAnA9ttvz8knn8x5551H165dqVatWsKVSlK6GNgklasYI1OnTmXQoEEMHjyYBQsWbHrt4IMP\n5vzzz+e0006jUaNGCVYpSelmYJNULqZNm8bQoUMZOnQoM2bM2NTeqlUrzjzzTM444wzatm2bYIWS\nlDsMbJLKRIyRjz76iGHDhjF06FCmT5++6bXGjRtz2mmnceaZZ9KpUydvIJCkUjKwSdpqeXl5TJw4\nkRdffJEXX3yRWbNmbXqtcePG9OnTh759+9KtWzdq1qyZYKWSlNsMbJJKZcWKFYwePZoRI0YwfPhw\nli5duum1nXbaiZ49e9K3b1+OOuooQ5oklREDm6TNijEybdo0RowYwYgRI5gwYQIbNmzY9Pqee+5J\n79696d27N506dfL7PCWpHBjYJH3PggULeP311xkzZgxjxozhP//5z6bXqlevTufOnenRowfHH388\n7dq185o0SSpnBjZJLF68mDfffJM333yTN954g48//vg7rzdt2pTjjjuOHj16cPTRR7sEhyRVMAOb\nVMXEGJkzZw4TJ07kzTffZNy4cXzyySff6VO3bl26du1K9+7d6d69u6NokpQwA5tUya1atYp3332X\nt99+m7fffpt//etfLF68+Dt96tSpw+GHH06XLl3o0qULhx56KNttt11CFUuSCjOwSZXI6tWr+eCD\nD3j33XeZPHky7777LtOnTyc/P/87/Zo0aUKnTp340Y9+RJcuXTjooIO8o1OSUszAJuWg/Px85syZ\nw5QpU5gyZQpTp05lypQpzJw5kxjjd/pWr16dDh060KlTp01bmzZtnOKUpBxiYJNS7JtvvuHzzz/n\nk08+YcaMGUyfPp0ZM2bwySefsGbNmu/1r169Ou3ateOggw7ihz/8IQcddBDt27endu3aCVQvSSor\nBjYpQWvWrOGLL75g3rx5zJ8/nzlz5vD5559v2pYsWVLse3fddVcOOOAA2rdvv2lr27YttWrVqsAj\nkCRVBAObVMa+/fZbli1bxldffcWyZcv48ssvWbRo0Xe2//znP3zxxRd8+eWXm91XrVq1aN26Nfvs\nsw9t27albdu27Lvvvuyzzz4urSFJVYiBTVXe119/zauvvkp+fj55eXmbtvz8fDZs2MDatWv59ttv\nv7OtWrWKlStX8t///nfTzxUrVvDVV18VOVVZnBo1arDbbrvRokULdt99d1q0aMGee+65aWvevDnV\nqlUrx6OXJOWCUPgC5cokhBAr8/GpbEyZMoUOHTqU2f5q1qxJkyZNaNKkCY0bN2bHHXdk1113ZZdd\ndtm0NW3alN13352mTZsayCRJAIQQiDEWeUeYI2yq8ho3bswZZ5xB9erVqVat2nd+Vq9ene233/57\nW506dWjQoAH169f/zs/GjRtTt25d78CUJJUpR9gkSZJSYHMjbM7FSJIkpZyBTZIkKeUMbJIkSSln\nYJMkSUq51Aa2EMJtIYQvQgjvZbefFHjtphDCzBDC9BDCMUnWKUmSVN5SG9iy7o8xdsxurwGEEPYF\n+gL7AscBvw8pWUNh7NixSZegbeD5y12eu9zm+cttnr+KkfbAVlQQOxEYEmPcEGOcA8wEDqnQqorh\nH9rc5vnLXZ673Ob5y22ev4qR9sB2WQjhgxDCYyGEhtm25sD8An0WZNskSZIqpUQDWwhhdAhhSoFt\navZnT+D3wB4xxh8Ai4D7kqxVkiQpKTnxTQchhJbA8Bhj+xDCjUCMMf42+9prwG0xxn8X8b70H5wk\nSVJWzn2XaAhhlxjjouzTk4CPso9fBp4JITxAZiq0DfBOUfso7qAlSZJySWoDG3B3COEHQD4wB7gQ\nIMb4cQhhKPAxsB64xC8MlSRJlVlOTIlKkiRVZWm/SzQnhBDuzi7i+0EIYVgIoUGB11zkN+VCCD8J\nIcwIIXwaQvh50vVo80IIu4UQ3gghTMveqHRFtn2HEMKoEMInIYSRBe4sV8qEEKplF0R/Ofvcc5cj\nQggNQwh/y/6dNi2EcKjnr2IY2MrGKKBd9o7WmcBNACGE/UjpIr/KCCFUAx4BjgXaAf1CCG2TrUpb\nsAG4JsbYDugEXJo9ZzcCY2KM+wBvkP09VCpdSeaylo08d7njQWBEjHFfoAMwA89fhTCwlYEY45gY\nY3726b+A3bKPe5HSRX61ySHAzBjj3BjjemAImcWZlVIxxkUxxg+yj78BppP5nTsReCrb7SmgdzIV\nanNCCLsBPYDHCjR77nJAdvboyBjjEwDZv9tW4PmrEAa2snceMCL72EV+06/wOfoCz1HOCCG0An5A\n5h9KTWOMiyET6oCdk6tMm/EAcD1Q8AJqz11uaA0sDSE8kZ3S/n8hhDp4/iqEga2EtrDI78Y+twDr\nY4zPJliqVCWEEOoBzwNXZkfaCt9B5R1VKRNCOB5YnB0h3dzlIZ67dKoBdAQejTF2BFaRmQ71d68C\npHlZj1SJMR69uddDCOeSGeY/qkDzAmD3As93y7YpPRYALQo89xzlgBBCDTJh7ekY40vZ5sUhhKYx\nxsUhhF2AJclVqGIcAfQKIfQAagP1QwhPA4s8dznhC2B+jHFy9vkwMoHN370K4AhbGQgh/ITMEH+v\nGOPaAi+9DJweQtguhNCazSzyq8RMAtqEEFqGELYDTidz3pRufwE+jjE+WKDtZeDc7ONzgJcKv0nJ\nijHeHGNsEWPcg8zv2hsxxrOA4XjuUi877Tk/hLB3tunHwDT83asQrsNWBkIIM4HtgGXZpn/FGC/J\nvnYTcD6ZRX6vjDGOSqZKFScbuB8k8w+Yx2OMAxMuSZsRQjgCeBOYSmbqJQI3k/nH0FAyo9pzgb4x\nxuVJ1anNCyF0Aa6NMfYKITTGc5cTQggdyNwwUhOYBfQHquP5K3cGNkmSpJRzSlSSJCnlDGySJEkp\nZ2CTJElKOQObJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElK\nOQObJElSytVIugBJyhUhhAuAHYF9gKeBlsDOwP7ADTHGBQmWJ6kSCzHGpGuQpNQLIfwMmBJj/HcI\n4WBgNHAusAp4DegRYxyZYImSKjFH2CSpZJrEGP+dfdwCyIsxvhhCqA10jTG+lWBtkio5R9gkqZRC\nCA8Bu8cY+yRdi6SqwZsOJKn0ugFjky5CUtVhYJOkLQghVAshdA8ZOwPtKBDYQgg3JFacpCrBwCZJ\nW3YhMArYC+gLrAa+AAgh9AI+Sq40SVWB17BJ0haEEDoA1wMzgA+BBsBRwBxgdoxxUHLVSaoKDGyS\nJEkp55SoJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElKOQOb\nJElSyhnYJEmSUu7/A9i2e0jPCtaoAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(16,48,0.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks an awful lot like a quarter circle. And what's the radius of the arc? It's $$r = 48 = 3z_t.$$\n", + "\n", + "We can also get a semi-circle out of our simulated trammel by changing to another configuration where $C$ is (near) zero. Here's one example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nvS8Z0/tyPr0nGdP7kjG9LznDb4/STXNNdhERERGvZozBXsZBG357lK6IiJyvQoUKxMTEOB1DxG+V\nL1+e/fv3e3y9GuETEZFU7lEEp2OI+K3M/g1e7gif9uETERER8XEqfCIiIiI+ToVPRERExMep8ImI\niIj4OBU+ERERkcu0du1aEhISOHv2LOvWrXM6znl0WhYREZF0Tp06xbhx4wgLC+PPP//k2Wef/dfj\nW7duJTIyksGDB2e6jsWLF7Nz504CAwO56qqr6Ny5c07HzpZt27Yxc+ZMJkyYkLrsYtufXl7Z1uzI\n6P3JSEREBDExMZQuXZp33nkHAGstxYsXJyAgIPXI22bNmjF37twcz52eCp+IiEg6Tz75JCNHjiQs\nLIyqVavywAMPUL58ecD1S3z48OHUrl07068/efIkL730Eps3bwagbt263HvvvZQoUSJX8mfV//3f\n/7F+/XqKFSv2r+UX2v70LmdbN2zYwI8//siJEyfo2rXreTmcltn7k5GhQ4fSokULypYtS2BgIAD7\n9+/nrbfe4o477iAgIIBFixZx991353TsDGlKV0REJI1ffvmFw4cPExYWBsDKlSv/VXYWLFhA48aN\nL7iOtWvXUqVKldT7t956K6tXr86ZwJfhmWeeoXXr1v9adrHtTy+727pv3z7ef/99nnjiCcLCwpg/\nf342tyLnZPT+ZCY4OJirr746tewB5M+fn7Zt21KhQgWKFi1KcHAwlStXzqm4F6QRPhER8Tk///wz\n77777r9OYpvyuTGG22+/nVatWmX4tV9++SWhoaF8+OGHnDhxgiJFitClSxcA4uLiCAgIoGTJkpw6\ndSrT1//111//NSpUrFgx9uzZ47kNdLuc7czMhbY/I9nd1ueff54XXngBgN27d/+rKKWXE9vpadHR\n0VhriYuL44YbbqBVq1aULVs29fHJkyfz9NNPO5ZPhU9ERLLEmGyf5P882b2ax8aNGxk1ahTlypUj\nICCAFi1a0KZNm/OeV7FiRcaMGZOt14iNjWXnzp3MmTMHgPr163PnnXdy/fXXs3DhQrp3784HH3xw\nwXWcOHGC/Pnzp97Ply8f8fHxWXr9rG4jXN52ZuZC25+R7Gzrb7/9RnR0NJs3b2bTpk18+OGHDB8+\nPNPn58R2elq3bt2oUaMGANWrV6dhw4aEhoYCrvcoLi6OkJAQx/Kp8ImISJ5x2223sWzZMt566y12\n7dpFmzZteO211+jUqRNXXnmlR16jSJEiVKtWLfV+WFgYK1eu5Pjx49SpUyfL6zh+/Hjq/TNnzlCm\nTJksfW36bWzUqBHjxo3jyiuvpFq1atSsWfPSNugSZbb9mRW+7Gzrl19+yf3330+PHj04ffo0gwYN\nolmzZjm+na+++ioJCQn/WpYyShgREXHBqeuLufXWW1M/L168OFFRUanTwXPnznVsKjeFCp+IiGSJ\nt1xjd/To0cTGxvLGG28ArunA9GUv7RRgWlmZAqxSpQrr169PvR8QEEBSUhLR0dGcPn2a5cuX89VX\nX5GQkMCnn36a4Xquu+46Nm3alHo/Li6O8PDwbG3ja6+9RuPGjQkPDyciIoJZs2Z5ZDszk9n2ZyY7\n23rw4MHUArR48WLuvfdeZs6cmePbOWjQoIs+JztmzZrFZ599lpo5Pj7+X1PUX375JY899liOvHaW\nWWv98ubadBERScvb/28cPXq0HTp0qLXW2p07d9p169bZe+65x3799dcee42EhAR7++23p96/4447\n7N69e//1nFGjRtkXX3wx9f6+fftscnJy6v1Tp07ZatWqpd6/9dZbbWxsrLXW2j179vzrueml38a+\nffvaAwcOWGutveeeey5jyzL2/vvv2y5duqTev9D2p99Oa7O3rVOnTrVTp0611lp777332piYGNuv\nX78c3c7sSv/+WHv++7B+/Xq7Zs0aa6218fHxtkKFCvbUqVOpj1evXt2uWrUqS6+X2b9B9/Js9x4d\npSsiInnChg0bqFatGs2bN6dJkyYsXLiQa665hkaNGnH77bd77HVCQkIYNWoUI0aMYPjw4fTp04fr\nrrsu9fGPP/6YxYsXs3jx4tQjSx944AG+++671OcULFiQQYMG8Z///IeXX36ZgQMHUrp0aQBatmzJ\nqlWrsryNwAUPaLgcb775JtOmTSMqKooXX3yRv/7664Lbn347s7utDz74INu3b2fq1KkMHz6csLAw\nkpOTc2w7syuj9wfOfx/q1avHwYMHmThxIkOHDmXOnDkULFgw9fESJUpQrly5XM+flrFeMkSf24wx\n1l+3XUQkM2mPgswLZs+eTfny5QkLC+Oaa65xOk6WJCcns2bNmoue2iXFG2+8Qf369alcuTJdunTh\no48+yuGEnnMp25qXt9OTMvs36F6e7SOnVPhERCRVXit8ixcvJjExkdtuu+2ydrjPTfPmzaNly5YU\n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\npozTkbyGRvjysB49elC9enUOHDjA2LFjnY4jIiLimISEhNRrz7/44osqex6mET6HffXVV9x5552E\nhITwww8/ULFiRacjiYiI5LqXX36ZESNGULVqVbZu3UpQkKNnjvM6GuHL4+rVq0fnzp05e/Ys/fv3\nxxtKqIiISG7av38/o0ePBuDNN99U2csBKnxe4NVXXyU0NJTPPvuM+fPnOx1HREQk11hr6d27NwkJ\nCXTs2JGGDRs6HcknaUrXS7zzzjv06tWLMmXKsGvXLooVK+Z0JBERkRw3Z84cOnbsSLFixdi1a5f2\n3cuEpnR9RPfu3alXrx6///47gwcPdjqOiIhIjjtx4kTqgRrjx49X2ctBGuHzIjt37qRGjRokJiay\nfv166tWr53QkERGRHNO9e3emTp1KgwYNWL16NQEBGofKjEb4fEiVKlUYNGgQ4Dply99//+1wIhER\nkZyxZs0apk6dSr58+XjnnXdU9nKY3l0vM3ToUK6//np++OEHxowZ43QcERERj0tISKBnz54ADBky\nhJtuusnhRL5PU7peaM2aNTRq1IigoCA2btxI9erVnY4kIiLiMYMGDWL8+PHcdNNNfPfdd4SEhDgd\nyetpStcHNWzYkH79+nHu3Dm6dOlCYmKi05FEREQ8YsOGDUyYMIGAgADef/99lb1cosLnpcaMGcO1\n117Ltm3bUk9GKSIikpedPn2aLl26YK1l0KBB1KlTx+lIfkNTul4sKiqKxo0ba2pXRER8wjPPPMNr\nr71GlSpV2Lx5s0b3LoGmdH1Yo0aN/jW1q6N2RUQkr1q/fj0TJ04kMDBQU7kOUOHzcmPGjKFixYps\n27aNUaNGOR1HRETkksXHx6dO5b7wwgvUqlXL6Uh+R1O6ecD69etp2LAh1lqioqJo0KCB05FERESy\nrFu3bkybNo1bbrmFjRs3ki9fPqcj5Tma0vUDd955Jy+88ALWWjp37swff/zhdCQREZEsWbBgAdOm\nTSN//vzMnj1bZc8hKnx5xMiRI7nttts4cOAAffv2dTqOiIjIRR06dIju3bsDrmvlVqlSxeFE/ktT\nunnI7t27qVGjBqdPn2bWrFl06tTJ6UgiIiIZSk5OplmzZnzxxRfce++9LF26FGOyPSPp9zSl60cq\nVarE66+/DkDv3r3Zv3+/s4FEREQy8dprr/HFF19QqlQppk+frrLnMI3w5THWWtq3b88nn3xC7dq1\nWbdunfaHEBERr7Jx40bq1atHYmIiS5Ys4f7773c6Up6nET4/Y4xh6tSphIWFER0dzeDBg52OJCIi\nkuqPP/6gQ4cOJCYm0q9fP5U9L6ERvjzqm2++oX79+pw7d47FixfTqlUrpyOJiIifSzsLVbNmTb76\n6iudYNlDNMLnp26//XbGjh0LQJcuXYiJiXE4kYiI+LtJkybxySefULRoUebNm6ey50U0wpeHWWtp\n1aoVS5cu5fbbb2ft2rUEBwc7HUtERPxQdHQ0d955J4mJicyfP5/27ds7HcmnaITPjxljeP/997nm\nmmv45ptvGDhwoNORRETEDx0/fpyHHnqIxMREnnzySZU9L6QRPh/w9ddf07BhQxITE3V+PhERyVVJ\nSUncd999REZGUqtWLdavX6+p3BygET6hbt26qefn69atG9u3b3c4kYiI+IsRI0YQGRlJyZIlmT9/\nvsqel9IIn4+w1vLEE0/w/vvvU7FiRTZt2kTx4sWdjiUiIj7sk08+oV27dgQEBPD555/TpEkTpyP5\nLI3wCeD6QXjrrbcIDw/n559/5pFHHiEpKcnpWCIi4qN27drFY489BsCrr76qsuflVPh8SIECBVi4\ncCElSpRg+fLljBw50ulIIiLig/7880/atm1LfHw8Dz/8MM8884zTkeQiNKXrg1atWkXz5s1JTk7m\no48+4uGHH3Y6koiI+IikpCRat27NsmXLuOWWW9iwYQOFChVyOpbP05SunKdp06a89tprADz++ONE\nR0c7nEhERHzFoEGDWLZsGSVKlOCTTz5R2csjNMLno6y19OrViylTplCmTBk2btzI1Vdf7XQsERHJ\nw6ZOnUr37t0JDg5m1apVNGjQwOlIfuNyR/hU+HxYYmIizZo1IyoqivDwcNauXau/xEREJFtWr15N\ns2bNOHfuHNOmTeOJJ55wOpJf0ZSuZCo4OJj58+dz3XXXsWXLFiIiIkhOTnY6loiI5DF79uyhffv2\nnDt3jueee05lLw9S4fNxJUqUYOnSpYSGhrJgwQIGDx7sdCQREclD4uLiuP/++zlx4gQtW7Zk7Nix\nTkeSbFDh8wM33XQT8+fPJygoiPHjx/Pmm286HUlERPKAM2fO0KpVK3bv3s0tt9zCrFmzCAwMdDqW\nZIMKn59o2rQpU6dOBeDJJ59k0aJFDicSERFvlpSUxKOPPsqGDRu4+uqr+eyzzyhSpIjTsSSbVPj8\nSEREBC+99BLWWjp27MjXX3/tdCQREfFC1lqefvppFi5cSGhoKCtWrKBcuXJOx5LLoKN0/Yy1lh49\nejB16lRKlCjB119/zQ033OB0LBER8SITJkxg4MCB5MuXj8jISBo1auR0JL+n07Jkk78WPoBz587R\nqlUrli9fzrXXXsv69eu56qqrnI4lIiJeYPbs2TzyyCMAulqTF9FpWeSSBQUFMW/ePGrVqsUvv/xC\n8+bNOX78uNOxRETEYcuWLSMiIgKA8ePHq+z5EBU+P1W4cGGWL1/OTTfdxI4dO7jvvvs4deqU07FE\nRMQh69at44EHHuDcuXMMHDiQZ5991ulI4kGa0vVzv/76K/Xq1ePAgQM0a9aMTz/9lJCQEKdjiYhI\nLtqyZQuNGzfm5MmTdO/enXfeeQdjsj17KDlAU7pyWa6++mo+//xzSpUqxcqVK+ncuTNJSUlOxxIR\nkVzy008/0aJFC06ePEmHDh14++23VfZ8kAqfUKlSJSIjIylatCgff/wx3bt31yXYRET8QExMDHff\nfTdHjx6lRYsWzJw5UydW9lEqfAJAjRo1WLp0KQUKFOC9996jV69eKn0iIj7swIEDNG7cmIMHD1Kv\nXj0WLFhAvnz5nI4lOUSFT1LVr1+fpUuXkj9/ft5991369euH9nMUEfE9v/76K40bN+aXX36hdu3a\nLFu2jIIFCzodS3KQCp/8S5MmTVIP3Hj77bcZMGCASp+IiA85dOgQjRs35ueff6ZWrVpERkYSGhrq\ndCzJYSp8cp67776bRYsWkS9fPt544w2eeeYZlT4RER9w+PBhmjRpwt69ewkPD2flypUUK1bM6ViS\nC1T4JEMtWrRg4cKFBAcHM3HiRAYNGqTSJyKSh/322280adKE3bt3U716dT7//HOKFy/udCzJJSp8\nkqn77ruP+fPnExQUxIQJE3juuedU+kRE8qDffvuNu+66i59++olbbrmFVatWccUVVzgdS3KRCp9c\nUKtWrZg3bx7BwcH83//9H3369NHRuyIieUhMTAwNGjRg165dVKtWjS+++IISJUo4HUtyma60IVny\n2Wef0b59exISEujcuTPTp08nKCjI6VgiInIBu3fvpmnTphw8eJDw8HAiIyMpWbKk07EkGy73Shsq\nfJJlq1evpmXLlpw6dYr27dsze/ZsnbNJRMRLbd++nWbNmhEbG0u9evVYtmyZjsbNw3RpNck1jRs3\n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\nvMsjiwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,-numpy.pi/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is so nice. We have reproduced the trajectories that Lanchester found more than a hundred years ago, painstakingly drawing them by hand with a contraption called a \"trammel.\" It must have taken him days!\n", + "\n", + "Here is how the different phugoid curves are drawn in von Kármán's book, _Aerodynamics_ (1957). He never says _how_ he drew them, but we're guessing by hand, also. We did pretty good!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/vonKarman-phugoids.png)\n", + "\n", + "#### Figure 4. Phugoid curves in von Kármán (1957)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next notebook of this series, we'll look at the differential equation that arises when you consider small perturbations on the horizontal phugoid, and we'll learn to numerically integrate that to get the flight paths." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Lanchester, F. W. _Aerodonetics_, D. van Nostrand Company: New York, 1909. On the public domain. [Get it from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PP1#v=onepage&q&f=false).\n", + "\n", + "2. Milne-Thompson, L. M. _Theoretical Aerodynamics_, Dover 2012 reprint of the revised 1966 edition. [Read on Google Books](http://books.google.com/books?id=EMfCAgAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see section 18.5)\n", + "\n", + "3. Sinha, N. K. and Ananthkrishnan, N. _Elementary Flight Dynamics with an introduction to Bifurcation and Continuation Methods_, CRC Press, 2013. [Read on Google Books](http://books.google.com/books?id=yXL6AQAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see chapter 5)\n", + "\n", + "4. von Kármán, T. _Aerodynamics_, Dover 2004 reprint of the 1957 2nd edition. (see pages 149–151)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Execute this cell to load the notebook's style sheet, then ignore it\n", + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb b/lecture_22/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb new file mode 100644 index 0000000..eb6283b --- /dev/null +++ b/lecture_22/01_phugoid/.ipynb_checkpoints/01_02_Phugoid_Oscillation-checkpoint.ipynb @@ -0,0 +1,949 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth. Partly based on David Ketcheson's pendulum lesson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Oscillation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome back! This is the second IPython Notebook of the series _\"The phugoid model of glider flight\"_, the first learning module of the course [**\"Practical Numerical Methods with Python.\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about)\n", + "\n", + "In the first notebook, _\"Phugoid Motion\"_, we described the physics of an aircraft's oscillatory trajectory, seen as an exchange of kinetic and potential energy. This analysis goes back to Frederick Lanchester, who published his book _\"Aerodonetics\"_ on aircraft stability in 1909. We concluded that first exposure to our problem of interest by plotting the flight paths predicted by Lanchester's analysis, known as _phugoids_.\n", + "\n", + "Here, we will look at the situation when an aircraft is initially moving on the straight-line phugoid (obtained with the parameters $C=2/3$, $\\cos\\theta=1$, and $z=z_t$ in the previous analysis), and experiences a small upset, a wind gust that slightly perturbs its path. It will then enter into a gentle oscillation around the previous straight-line path: a _phugoid oscillation_.\n", + "\n", + "If the aircraft experiences an upward acceleration of $-d^2z/dt^2$, and we assume that the perturbation is small, then $\\cos\\theta=1$ is a good approximation and Newton's second law in the vertical direction is:\n", + "\n", + "$$\\begin{equation}\n", + "L - W = - \\frac{W}{g}\\frac{d^2 z}{dt^2}\n", + "\\end{equation}$$\n", + "\n", + "In the previous notebook, we saw that the following relation holds for the ratio of lift to weight, in terms of the trim velocity $v_t$:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}=\\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "This will be useful: we can divide Equation (1) by the weight and use Equation (2) to replace $L/W$. Another useful relation from the previous notebook expressed the conservation of energy (per unit mass) as $v^2 = 2 gz$. With this, Equation (1) is rearranged as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d^2z}{dt^2} + \\frac{gz}{z_t} = g\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look at Equation (3) for a moment. Does it ring a bell? Do you recognize it?\n", + "\n", + "If you remember from your physics courses the equation for _simple harmonic motion_, you should see the similarity! \n", + "\n", + "Take the case of a simple spring. Hooke's law is $F=-kx$, where $F$ is a restoring force, $x$ the displacement from a position of equilibrium and $k$ the spring constant. This results in the following ordinary differential equation for the displacement:\n", + "\n", + "$$\\begin{equation}\n", + " \\frac{d^2 x}{dt^2}= -\\frac{k}{m}x\n", + "\\end{equation}$$\n", + "\n", + "which has the solution $x(t) = A \\cos(\\omega t- \\phi)$, representing simple harmonic motion with an angular frequency $\\omega=\\sqrt{k/m}=2\\pi f$ and phase angle $\\phi$.\n", + "\n", + "Now look back at Equation (3): it has nearly the same form and it represents simple harmonic motion with angular frequency $\\omega=\\sqrt{g/z_t}$ around mean height $z_t$. \n", + "\n", + "Think about this for a moment ... we can immediately say what the period of the oscillation is: exactly $2 \\pi \\sqrt{z_t/g}$ — or, in terms of the trim velocity, $\\pi \\sqrt{2} v_t/g$.\n", + "\n", + "_This is a remarkable result!_ Think about it: we know nothing about the aircraft, or the flight altitude, yet we can obtain the period of the phugoid oscillation simply as a function of the trim velocity. For example, if trim velocity is 200 knots, we get a phugoid period of about 47 seconds—over that time, you really would not notice anything if you were flying in that aircraft.\n", + "\n", + "Next, we want to be able to compute the trajectory of the aircraft for a given initial perturbance. We will do this by numerically integrating the equation of motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare to integrate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to integrate the differential equation and plot the trajectory of the aircraft. Are you ready?\n", + "\n", + "The equation for the phugoid oscillation is a second-order, ordinary differential equation (ODE). Let's represent the time derivative with a prime, and write it like this:\n", + "\n", + "$$\\begin{equation}\n", + "z(t)'' + \\frac{g \\,z(t)}{z_t}=g\n", + "\\end{equation}$$\n", + "\n", + "There's a convenient trick when we work with ODEs: we can turn this 2nd-order equation into a system of two 1st-order equations. Like this:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z'(t) &=& b(t)\\\\\n", + "b'(t) &=& g\\left(1-\\frac{z(t)}{z_t}\\right)\n", + "\\end{eqnarray}$$\n", + "\n", + "Are you following? Make sure you are following the derivations, even if it means writing the equations down in your own notes! (Yes, the old-fashioned paper way.)\n", + "\n", + "Another way to look at a system of two 1st-order ODEs is by using vectors. You can make a vector with your two independent variables, \n", + "\n", + "$$\\begin{equation}\n", + "\\vec{u} = \\begin{pmatrix} z \\\\ b \\end{pmatrix}\n", + "\\end{equation}$$\n", + "\n", + "and write the differential system as a single vector equation:\n", + "\n", + "\\begin{equation}\n", + "\\vec{u}'(t) = \\begin{pmatrix} b\\\\ g-g\\frac{z(t)}{z_t} \\end{pmatrix}\n", + "\\end{equation}\n", + "\n", + "If you call the right-hand-side $\\vec{f}(\\vec{u})$, then the equation is very short: $\\vec{u}'(t) = \\vec{f}(\\vec{u})$—but let's drop those arrows to denote vectors from now on, as they are a bit cumbersome: just remember that $u$ and $f$ are vectors in the phugoid equation of motion.\n", + "\n", + "Next, we'll prepare to solve this problem numerically." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial value problems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's step back for a moment. Suppose we have a first-order ODE $u'=f(u)$. You know that if we were to integrate this, there would be an arbitrary constant of integration. To find its value, we do need to know one point on the curve $(t, u)$. When the derivative in the ODE is with respect to time, we call that point the _initial value_ and write something like this:\n", + "\n", + "$$u(t=0)=u_0$$\n", + "\n", + "In the case of a second-order ODE, we already saw how to write it as a system of first-order ODEs, and we would need an initial value for each equation: two conditions are needed to determine our constants of integration. The same applies for higher-order ODEs: if it is of order $n$, we can write it as $n$ first-order equations, and we need $n$ known values. If we have that data, we call the problem an _initial value problem_.\n", + "\n", + "Remember the definition of a derivative? The derivative represents the slope of the tangent at a point of the curve $u=u(t)$, and the definition of the derivative $u'$ for a function is:\n", + "\n", + "$$u'(t) = \\lim_{\\Delta t\\rightarrow 0} \\frac{u(t+\\Delta t)-u(t)}{\\Delta t}$$\n", + "\n", + "If the step $\\Delta t$ is already very small, we can _approximate_ the derivative by dropping the limit. We can write:\n", + "\n", + "$$\\begin{equation}\n", + "u(t+\\Delta t) \\approx u(t) + u'(t) \\Delta t\n", + "\\end{equation}$$\n", + "\n", + "With this equation, and because we know $u'(t)=f(u)$, if we have an initial value, we can step by $\\Delta t$ and find the value of $u(t+\\Delta t)$, then we can take this value, and find $u(t+2\\Delta t)$, and so on: we say that we _step in time_, numerically finding the solution $u(t)$ for a range of values: $t_1, t_2, t_3 \\cdots$, each separated by $\\Delta t$. The numerical solution of the ODE is simply the table of values $t_i, u_i$ that results from this process." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to execute the process described above and find the numerical solution of the ODE, we start by choosing the values $t_1,t_2,t_3 \\cdots t_n$—we call these values our *grid* in time. The first point of the grid is given by our _initial value_, and the small difference between two consecutive times is called the _time step_, denoted by $\\Delta t$. The solution value at time $t_n$ is denoted by $u_n$.\n", + "\n", + "Let's build a time grid for our problem. We first choose a final time $T$ and the time step $\\Delta t$. In code, we'll use readily identifiable variable names: `T` and `dt`, respectively. With those values set, we can calculate the number of time steps that will be needed to reach the final time; we call that variable `N`. \n", + "\n", + "Let's write some code. The first thing we do in Python is load our favorite libraries: NumPy for array operations, and the Pyplot module in Matplotlib, to later on be able to plot the numerical solution. The line `%matplotlib inline` tells IPython Notebook to show the plots inline." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy \n", + "from matplotlib import pyplot\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, initialize `T` and `dt`, calculate `N` and build a NumPy array with all the values of time that make up the grid." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100.0\n", + "dt = 0.02\n", + "N = int(T/dt)+1\n", + "t = numpy.linspace(0.0, T, N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have our grid! Now it's time to apply the numerical time stepping represented by Equation (10)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Write the code above using the NumPy function `arange()` instead of `linspace()`. If you need to, read the documentation for these functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Enter a question mark followed by any function, e.g., `?numpy.linspace`, into a code cell and execute it, to get a help pane on the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The approximate solution at time $t_n$ is $u_n$, and the numerical solution of the differential equation consists of computing a sequence of approximate solutions by the following formula, based on Equation (10):\n", + "\n", + "$$u_{n+1} = u_n + \\Delta t \\,f(u_n).$$\n", + "\n", + "This formula is called **Euler's method**.\n", + "\n", + "For the equations of the phugoid oscillation, Euler's method gives the following algorithm that we need to implement in code:\n", + "\n", + "\\begin{align}\n", + "z_{n+1} & = z_n + \\Delta t \\, b_n \\\\\n", + "b_{n+1} & = b_n + \\Delta t \\left(g - \\frac{g}{z_t} \\, z_n \\right).\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To apply the numerical solution method, we need to set things up in code: define the parameter values needed in the model, initialize a NumPy array to hold the discrete solution values, and initialize another array for the elevation values." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# initial conditions\n", + "z0 = 100. #altitude\n", + "b0 = 10. #upward velocity resulting from gust\n", + "zt = 100.\n", + "g = 9.81\n", + "\n", + "u = numpy.array([z0, b0])\n", + "\n", + "# initialize an array to hold the changing elevation values\n", + "z = numpy.zeros(N)\n", + "z[0] = z0 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should pay attention to a couple of things: (1) See how there is a dot after the numbers used to define our parameters? We just want to be explicit (as a good habit) that these variables are real numbers, called \"floats.\" (2) We both _created_ and _initialized_ with zeros everywhere the solution vector `z`. Look up the documentation for the handy NumPy function `zeros()`, if you need to. (3) In the last line above, we assign the _initial value_ to the first element of the solution vector: `z[0]`.\n", + "\n", + "Now we can step in time using Euler's method. Notice how we are time stepping the two independent variables at once in the time iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-loop using Euler's method\n", + "for n in range(1,N):\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make sure you understand what this code is doing. This is a basic pattern in numerical methods: iterations in a time variable that apply a numerical scheme at each step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the code is correct, we have stored in the array `z` the position of the glider at each time. Let's use Matplotlib to examine the flight path of the aircraft.\n", + "\n", + "You should explore the [Matplotlib tutorial](http://matplotlib.org/users/pyplot_tutorial.html) (if you need to) and familiarize yourself with the command-style functions that control the size, labels, line style, and so on. Creating good plots is a useful skill: it is about communicating your results effectively. \n", + "\n", + "Here, we set the figure size, the limits of the vertical axis, the format of tick-marks, and axis labels. The final line actually produces the plot, with our chosen line style (continuous black line)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4)) #set plot size\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z, 'k-');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Explore and think" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try changing the value of `v` in the initial conditions. \n", + "\n", + "* What happens when you have a larger gust? \n", + "* What about a smaller gust? \n", + "* What happens if there isn't a gust (`v = 0`)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equation for phugoid oscillations is a 2nd-order, linear ODE and it has an exact solution of the following form:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z(t) = A \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + B \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $A$ and $B$ are constants that we solve for using initial conditions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our numerical solution used the initial conditions:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z(0) = z_0 \\\\\n", + "b(0) = b_0\n", + "\\end{eqnarray}$$\n", + "\n", + "Applying these to the exact solution and solving for $A$ and $B$, we get:\n", + "\n", + "$$\\begin{equation}\n", + "z(t) = b_0 \\sqrt{\\frac{z_t}{g}} \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + (z_0-z_t) \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We already defined all of these variables for our numerical solution, so we can immediately compute the exact solution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The expression is a bit long —if you don't feel like scrolling left and right, you can insert a line break in the code using a backslash '\\' _(without any trailing spaces)_ and Python will treat the next line as a continuation of the first." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot our exact solution! Even better, we can plot _both_ the numerical solution *and* the exact solution to see how well Euler's method approximated the phugoid oscillations.\n", + "\n", + "To add another curve to a plot, simply type a second `pyplot.plot()` statement. We also added a legend using the format\n", + "\n", + "```Python\n", + "pyplot.legend([\"line 1\",\"line 2\"])\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXZ3JngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4))\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z)\n", + "pyplot.plot(t, z_exact)\n", + "pyplot.legend(['Numerical Solution','Analytical Solution']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks like pretty good agreement, but what's happening towards the end? We'll come back to this. For now, re-run the previous steps with a different timestep, say $dt=0.01$ and pay attention to the difference.\n", + "\n", + "Euler's method, like all numerical methods, introduces some errors. If the method is *convergent*, the approximation will get closer and closer to the exact solution as we reduce the size of the step, $\\Delta t$. The error in the numerical method should tend to zero, in fact, when $\\Delta t\\rightarrow 0$—when this happens, we call the method _consistent_. We'll define these terms more carefully in the theory components of this course. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To compare the two solutions, we need to use a **norm** of the difference, like the $L_1$ norm, for example.\n", + "\n", + "$$ E = \\Delta t \\sum_{n=0}^N \\left|z(t_n) - z_n\\right|$$\n", + "\n", + "The $L_1$ norm is the sum of the individual differences between the exact and the numerical solutions, at each mesh point. In other words, $E$ is the discrete representation of the integral over the interval $T$ of the (absolute) difference between the computed $z$ and $z_{\\rm exact}$:\n", + "\n", + "$$ E = \\int \\vert z-z_\\rm{exact}\\vert dt $$\n", + "\n", + "We check for convergence by calculating the numerical solution using progressively smaller values of `dt`. We already have most of the code that we need. We just need to add an extra loop and an array of different $\\Delta t$ values to iterate through. \n", + "\n", + "You should read the documentation for the function [enumerate](https://docs.python.org/2/library/functions.html#enumerate) and make sure you understand how we're using it below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Warning" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below can take a little while to finish (the last $\\Delta t$ value alone requires 1 million iterations!). If the cell is still running, the input label will say `In [*]`. When it finishes, the `*` will be replaced by a number." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-increment array\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001, 0.0001])\n", + "\n", + "# array that will contain solution of each grid\n", + "z_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " N = int(T/dt)+1 # number of time-steps\n", + " ### discretize the time using numpy.linspace() ###\n", + " t = numpy.linspace(0.0, T, N)\n", + "\n", + " # initial conditions\n", + " u = numpy.array([z0, b0])\n", + " z = numpy.empty_like(t)\n", + " z[0] = z0\n", + " \n", + " # time loop - Euler method\n", + " for n in range(1,N):\n", + " ### compute next solution using Euler method ###\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0] # store the elevation at time-step n+1\n", + " \n", + " z_values[i] = z.copy() # store the total elevation calculation grid i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate the error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical solutions for each $\\Delta t$ in the array `z_values`. To calculate the error corresponding to each $\\Delta t$, we can write a function! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_error(z, dt):\n", + " \"\"\"Returns the error relative to analytical solution using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array of float\n", + " numerical solution.\n", + " dt : float\n", + " time increment.\n", + " \n", + " Returns\n", + " -------\n", + " err : float\n", + " L_{1} norm of the error with respect to the exact solution.\n", + " \"\"\"\n", + " N = len(z)\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt\n", + " \n", + " return dt * numpy.sum(numpy.abs(z-z_exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: in the last line of the function, we perform an 'array operation': \n", + "\n", + "`z - z_exact`\n", + "\n", + "We are *not* subtracting one value from another. Instead, we are taking the difference between elements at each corresponding index in both arrays. Here is a quick example:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2, 1])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = numpy.array([1, 2, 3])\n", + "b = numpy.array([4, 4, 4])\n", + "\n", + "b - a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we iterate through each $\\Delta t$ value and calculate the corresponding error. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "error_values = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " ### call the function get_error() ###\n", + " error_values[i] = get_error(z_values[i], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember, *if* the method is convergent then the error should get smaller as $\\Delta t$ gets smaller. To visualize this, let's plot $\\Delta t$ vs. error. If you use `pyplot.plot` you won't get a very useful result. Instead, use `pyplot.loglog` to create the same plot with a log-log scale. This is what we do almost always to assess the errors of a numerical scheme graphically." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nWtIESavUofkys59KukjSFElDJT0gaaGZbStJ7n6pu+/s7ru4e3Pbl4Yssi9f7eb72p626+75rp7r\nuL6z7aL42rq3P7OQ14XOM591Scqy0Nf2Ns9C1pdLnqX4Xe9sHXnm91xf1hVbnP/uZN/s3XaF5tmV\nSJo4d1/o7pPd/XZJ6zvZ5AxJ17n7Ne7+vLuPl/S6pJO7ek8zu1vSrZJGm9krZrZnX+uMw//ZpWri\nVqxY0W0dIcT5L6KunuvNX0RxzrLQ18bhL/a05BmXJo48wzVxpciyqzpCv47f9XCvLWUTF/klRsxs\npaRT3X1mbrm/pI8lHZlr8lq3u1jSTu6e6ePP45ArAABIjK4uMdKv1IXkYUtJG0t6s8P6tyRt3dc3\n7yoIAACAJOHsVAAAgASKYxP3jqR1kgZ3WD9YLXNxAAAAZS92TZy7r5H0uKQDOjy1v1rOUgUAACh7\nkczEmdlASTvkFjeS9BUzGyrpXXd/RdL/SLrezB5RS+N2klrm4S6Pol4AAIC4ieTsVDPLSGrKLbr+\ndX236e7+s9w2J0s6U9IQSX+SdLq731fiUgEAAGIp8kuMIBnMbIWkD9RyXb/33H2/aCtKPjPbRNKz\nkm51919GXU9SmdkgSYvVcmShv6TL3P3iaKtKptwF1a+X9AVJn0j6jbvfFm1VyWZmsyUNl9To7kdE\nXU8SmdlBki5Uy5G789z9mohLig2aOOTFzF6S9C13/39R15IWZvZbSZWSXnb3M6OuJ6nMbCNJ/d29\nOdcYPyNpD3d/O+LSEsfMtpa0lbs/bWaD1TKfvIO7r4q4tMQys+GSNpV0HE1c4cysn1p+pzOSVkp6\nQtL33P29KOuKi9id2IBY4xp7gZjZDpK+LmmhyLVP3H19m9vvfVbSaknN3bwEXXD3N9z96dyf31TL\n1QK2iLaqZHP3pZI+irqOBNtD0jPu/rq7fyRpgTY88bFs0cQhXy7pXjN7xMyOirqYFLhA0llRF5EW\nZraZmT0l6WVJU919ZdQ1JZ2Z7SppI3d/LepaUNa2kdR2H3xV0hcjqiV24njHBsTTD9z99dzhlrvN\n7E/u/qeoi0oiMztE0gvu/lcz2zvqetLA3T+Q9F0z20rSEjNrcPe/Rl1XUpnZFpJmSBoXdS0oe8x8\ndYNv4lLIzIaZ2Vwze9XM1pvZcZ1sc4qZvWRmq8zssbbNRO65ZWb2hJlVSJK7v5773zfU8nX2LqX6\nPFErQp57SjoyN2d4gaQTzGxy6T5RtIqxf7Zy97ckZSUNLfoHiYFiZGlmAyTNlnSuuz9Uuk8TvSLu\nm2XbiPQ1U0n/UPtv3r6k9t/MlTWauHQaKOlpSRMkrVKHv0DM7KeSLpI0RS3/sXtA0sLcmWly90vd\nfWd336V1WNzMNs299nOSfijpzyX7NNELmqe7n+3uX3b3r0r6v5KucvcpJfw8UQu9f27VZv/cTNI+\nufcvB6GzNEnTJTW5+42l+xixETTPti8tRfEx1adMJT0qaScz2yb3358DJd1Votrjz915pPihlrN5\nju2w7mFJV3RY94Kk33XxHl+V9GTu8SdJ1VF/riTn2WG74ySdH/XnSnKeknaXtCy3fy7r+H7l8giU\n5d5que3hE7ksl6nlrPTIP18S88w9f7ektyR9LOkVSXtG/dmSlqmkgyU9L+lFSeOi/hxxejATV2bM\nrL9aDoWe3+GpBkl7dfYad39JZXJ4qlC9ybMtd59RjLqSqpf756OSdi5yaYnTyyzvk7RxkUtLpN7+\nrrv7iGLWlWT5Zuru8yTNK2FpicHh1PKzpVr+kn6zw/q31HJrMxSGPMMiz3DIMizyDI9M+4gmDgAA\nIIFo4srPO2qZeRncYf1gSa+XvpzEI8+wyDMcsgyLPMMj0z6iiSsz7r5GLbfS6XjF6/3VclYQCkCe\nYZFnOGQZFnmGR6Z9x4kNKWRmAyXtkFvcSNJXzGyopHfd/RVJ/yPpejN7RC2/KCepZf7g8ijqjTvy\nDIs8wyHLsMgzPDItsqhPj+UR/qGWGwWvzz3WtfnztW22OVnSS2q5x+SjkvaOuu64PsiTPOP6IEvy\njPuDTIv7sFyAAAAASBBm4gAAABKIJg4AACCBaOIAAAASiCYOAAAggWjiAAAAEogmDgAAIIFo4gAA\nABKIJg4AACCBaOIAAAASiCYOAApkZgPM7AUz+0HUtQAoXzRxAFC4EyVtLmlKdxuZ2cZm9pyZbVOa\nsgCUE5o4ACiAmW0i6euSzpY03MxGdLP5rpK2cPd/lKQ4AGWFJg4ACnOKpEskXStpuaTfdLPtvpKa\nSlEUgPJDEwcAeTKz/yPpi+7+rLuvk1QnaU8zO6jDdj82s/+VdLqkz5nZ/5rZ1yMoGUCKmbtHXQMA\nJIKZ/UrSLe7+t9yySfqTpDXuvkuHbftLek/SLu7+QsmLBZB6fBMHAHkwsy0kbd7awEmSt/wr+BxJ\nQ81sTIeX/EDShzRwAIqFJg4A8lMt6Q8dV7r7HZKekFSX+2au1f6SsqUpDUA5ookDgB6Y2WBJ/d39\ntS42+S9J35R0VJt1I5Rr4sxsbzMbUNQiAZQdZuIAoAe5kxQelPRWN5tNl7RG0o7uvs7MPpa0l6Tn\nJE109/OKXiiAskITBwDdMLOtJb0kKZ9v0lzSz9x9hpldKGmtpLclXeHuHxexTABliCYOAAAggZiJ\nAwAASCCaOAAAgASiiQMAAEggmjgAAIAEookDAABIIJo4AACABKKJAwAASCCaOAAAgAT6/wsNBajn\noDeVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase tick font size\n", + "pyplot.grid(True) #turn on grid lines\n", + "pyplot.xlabel('$\\Delta t$', fontsize=16) #x label\n", + "pyplot.ylabel('Error', fontsize=16) #y label\n", + "pyplot.loglog(dt_values, error_values, 'ko-') #log-log plot\n", + "pyplot.axis('equal') #make axes scale equally;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the kind of result we like to see! As $\\Delta t$ shrinks (towards the left), the error gets smaller and smaller, like it should." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We calculated the error for several different timestep sizes using two nested `for` loops. That worked, but whenever possible, we like to re-use code (and not just copy and paste it!). \n", + "\n", + "Create a function that implements Euler's method and re-write the error analysis cell to use your function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb b/lecture_22/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb new file mode 100644 index 0000000..742302d --- /dev/null +++ b/lecture_22/01_phugoid/.ipynb_checkpoints/01_03_PhugoidFullModel-checkpoint.ipynb @@ -0,0 +1,929 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, I. Hawke. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Full phugoid model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the third IPython Notebook of the series on the _phugoid model of glider flight_, our first learning module of the course [\"Practical Numerical Methods with Python\"](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about). In the first notebook, we described the physics of the trajectories known as phugoids obtained from an exchange of potential and kinetic energy in an idealized motion with no drag. We gave you a neat little code to play with and plot various phugoid curves.\n", + "\n", + "In the second notebook, we looked at the equation representing small perturbations on the straight-line phugoid, resulting in simple harmonic motion. This is a second-order ordinary differential equation, and we solved it numerically using **Euler's method**: the simplest numerical method of all. We learned about convergence and calculated the error of the numerical solution, comparing with an analytical solution. That is a good foundation!\n", + "\n", + "Now, let's go back to the dynamical model, and take away the idealization of no-drag. Let's remind ourselves of the forces affecting an aircraft, considering now that it may be accelerating, with an instantaneous upward trajectory. We use the designation $\\theta$ for the angle, and consider it positive upwards." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces-lesson3.png)\n", + "#### Figure 1. Forces with a positive trajectory angle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Figure 1, $L$ is the lift, $W$ is the weight, $D$ is the drag, and $\\theta$ the positive angle of the trajectory, instantaneously. \n", + "\n", + "In lesson 1, we wrote the force balance in the directions perpendicular and parallel to the trajectory for a glider in _equilibrium_. What if the forces are _not_ in balance? Well, there will be acceleration terms in the equations of motion, and we would have in that case:\n", + "\n", + "\\begin{align}\n", + "m \\frac{dv}{dt} & = - W \\sin\\theta - D \\\\\n", + "m v \\, \\frac{d\\theta}{dt} & = - W \\cos\\theta + L\n", + "\\end{align}\n", + "\n", + "We can use a few little tricks to make these equations more pleasing. First, use primes to denote the time derivatives and divide through by the weight:\n", + "\n", + "\\begin{align}\n", + " \\frac{v'}{g} & = - \\sin\\theta - D/W \\\\\n", + "\\frac{v}{g} \\, \\theta' & = - \\cos\\theta + L/W\n", + "\\end{align}\n", + "\n", + "\n", + "Recall, from our first lesson, that the ratio of lift to weight is known from the trim conditions—$L/W=v^2/v_t^2$— and also from the definitions of lift and drag, \n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "we see that $L/D=C_L/C_D$. The system of equations can be re-written:\n", + "\n", + "\\begin{align}\n", + " v' & = - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\\n", + " \\theta' & = - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v\n", + "\\end{align}\n", + "\n", + "It is very interesting that the first equation has the factor $C_D/C_L$, which is the inverse of a measure of the aerodynamic efficiency of the aircraft. It turns out, this is the term that contributes damping to the phugoid model: if drag is zero, there is no damping. Drag is never zero in real life, but as engineers design more aerodynam-ically efficient aircraft, they make the phugoid mode more weakly damped. At altitude, this is nothing but a slight bother, but vertical oscillations are unsafe during final approach to land, so this is something to watch out for!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The initial value problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to visualize the flight trajectories predicted by this model, we are going to need to integrate the spatial coordinates, which depend on both the forward velocity (tangential to the trajectory) and the trajectory angle. The position of the glider on a vertical plane will be designated by coordinates $(x, y)$ with respect to an inertial frame of reference, and are obtained from:\n", + "\n", + "\\begin{align}\n", + "x'(t) & = v \\cos(\\theta) \\\\\n", + "y'(t) & = v \\sin(\\theta).\n", + "\\end{align}\n", + "\n", + "Augmenting our original two differential equations by the two equations above, we have a system of four first-order differential equations to solve. We will use a time-stepping approach, like in the previous lesson. To do so, we do need *initial values* for every unknown:\n", + "\n", + "$$\n", + "v(0) = v_0 \\quad \\text{and} \\quad \\theta(0) = \\theta_0\\\\\n", + "x(0) = x_0 \\quad \\text{and} \\quad y(0) = y_0\n", + "$$\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve with Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We know how to apply Euler's method from the previous lesson. We replace each of the time derivatives by an approximation of the form:\n", + "\n", + "$$v'(t) \\approx \\frac{v^{n+1} - v^n}{\\Delta t},$$\n", + "\n", + "where we are now using a superscript $n$ to indicate the $n$-th value in the time iterations. The first differential equation, for example, gives:\n", + "\n", + "$$\\frac{v^{n+1} - v^n}{\\Delta t} = - g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2$$\n", + "\n", + "Alright, we know where this is going. At each time iteration $t^n$, we want to evaluate all the known data of our system to obtain the state at $t^{n+1}$—the next time step. We say that we are _stepping in time_ or _time marching_.\n", + "\n", + "The full system of equations discretized with Euler's method is:\n", + "\n", + "\\begin{align}\n", + "v^{n+1} & = v^n + \\Delta t \\left(- g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2 \\right) \\\\\n", + "\\theta^{n+1} & = \\theta^n + \\Delta t \\left(- \\frac{g}{v^n}\\,\\cos\\theta^n + \\frac{g}{v_t^2}\\, v^n \\right) \\\\\n", + "x^{n+1} & = x^n + \\Delta t \\, v^n \\cos\\theta^n \\\\\n", + "y^{n+1} & = y^n + \\Delta t \\, v^n \\sin\\theta^n.\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we've learned before, the system of differential equations can also be written as a vector equation:\n", + "\n", + "$$u'(t) = f(u)$$\n", + "\n", + "where\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix}.\n", + "\\end{align}\n", + "\n", + "It's a bit tricky to code the solution using a NumPy array holding all your independent variables. But if you do, a function for the Euler step can be written that takes any number of simultaneous equations. It simply steps in time using the same line of code:\n", + "\n", + "```Python\n", + "def euler_step(u, f, dt):\n", + " return u + dt * f(u)\n", + "```\n", + "\n", + "This function can take a NumPy array `u` with any number of components. All we need to do is create an appropriate function `f(u)` describing our system of differential equations. Notice how we are passing a _function_ as part of the arguments list to `euler_step()`. Neat!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we start by loading the modules and libraries that we need for this problem. We'll need a few transcendental functions, including the $\\log$ for a convergence study later on. And remember: the line `%matplotlib inline` is a magic function that tells Matplotlib to give us the plots in the notebook (the default behavior of Matplotlib is to open a pop-up window). In addition, we are importing the module `rcParams` to define notebook-wide plotting parameters: font family and size. Here we go!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log, ceil\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to set things up to start our numerical solution: the parameter \n", + "values and the _initial values_. You know what the acceleration of gravity is: 9.8 m/s$^2$, but what are good values for $C_D/C_L$, the inverse of the aerodynamic efficiency? Some possible values are given on a table in the Wikipedia entry for [lift-to-drag ratio](http://en.wikipedia.org/wiki/Lift-to-drag_ratio): a modern sailplane can have $L/D$ of 40 to 60, depending on span (and, in case you're interested, a flying squirrel has $L/D$ close to 2).\n", + "\n", + "For the _trim velocity_, the speed range for typical sailplanes is between 65 and 280 km/hr, according to Wikipedia (it must be right!). Let's convert that to meters per second: 18 to 78 m/s. We'll pick a value somewhere in the middle of this range.\n", + "\n", + "Here's a possible set of parameters for the simulation, but be sure to come back and change some of these, and see what happens!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 30.0 # trim velocity in m s^{-1} \n", + "C_D = 1/40 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = v_t # start at the trim velocity (or add a delta)\n", + "theta0 = 0 # initial angle of trajectory\n", + "x0 = 0 # horizotal position is arbitrary\n", + "y0 = 1000 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll define a function `f()` to match the right-hand side of Equation (15), the full differential system in vector form. This function assumes that we have available the parameters defined above. If you re-execute the cell above with different parameter values, you can just run the solution without re-executing the function definition." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare the code defining function `f(u)` with the differential equations, and convince yourself that it's right!\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix} \\nonumber\n", + "\\end{align}\n", + "\n", + "Now, Euler's method is implemented in a simple function `euler_step()`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equations.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After defining a final time for the solution, and the time step $\\Delta t$, we can construct the grid in time using the NumPy function [`linspace()`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html). Make sure you study the decisions we made here to build the time grid: why do we add 1 to the definition of `N`, for example?\n", + "\n", + "Look at the code below, and make sure you understand the following aspects of it.\n", + "\n", + "* The NumPy array `u` contains the solution at every time-step, consisting of the velocity, angle and location of the glider. \n", + "* The first element of the array `u` is set to contain the initial conditions. \n", + "* In the `for`-loop, the function `euler_step()` is called to get the solution at time-step $n+1$. " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100 # final time\n", + "dt = 0.1 # time increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u = numpy.empty((N, 4))\n", + "u[0] = numpy.array([v0, theta0, x0, y0])# fill 1st element with initial values\n", + "\n", + "# time loop - Euler method\n", + "for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to plot the path of the glider, we need the location (`x`, `y`) with respect to time. That information is already contained in our NumPy array containing the solution; we just need to pluck it out. \n", + "\n", + "Make sure you understand the indices to `u`, below, and the use of the colon notation. If any of it is confusing, read the Python documentation on [Indexing](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider's position with respect to the time\n", + "x = u[:,2]\n", + "y = u[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to plot the path of the glider and get the distance travelled!" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nnMGDB7Np0ybGjx9PcXExr7zyStwh5h0dAamBjoCIiNRPs2fPZvTo0VRUVNCgQQPGjh3LuHHjaNAg\nv3831xRMQqgAERGpv7Zu3cq4ceO4+eabcXeGDBnC5MmT83pKRlMwUqfo/PpolKfolKtolKfoMuVq\nr7324i9/+QszZ86kRYsWPPHEE/Ts2ZOPP/449wHmGRUgIiKS9372s59RXl5Ohw4dWLBgAb1792bd\nunVxh1WvaQqmBpqCERHJHx999BF9+vRhyZIldOzYkbKysrw7VVdTMCIiIjl24IEHUlpaSnFxMcuX\nL2fAgAF8+eWXcYdVL6kAkazQPHQ0ylN0ylU0ylN0UXPVunVrXnzxRTp27MjixYs588wz2bJlS+0G\nl4dUgIiIiKRp1aoVM2fOpE2bNpSVlTFixIgab3Ynu0drQGqgNSAiIvmroqKCnj178uWXXzJ27Fiu\nu+66uEOqdboOSEKoABERyW+zZs1iwIABVFZW8thjj3H22WfHHVKt0iJUqVM0Dx2N8hSdchWN8hTd\nnuaqX79+3HzzzQCMHDmSRYsWZTGq/KUCREREpAa//e1vufDCC9m8eTNnnnkmn376adwh1XmagqmB\npmBERARgy5Yt9OrVi1dffZX+/fszY8aMennfGE3BiIiIJMjee+/N1KlT2X///Xnuuee44YYb4g6p\nTlMBIlmheeholKfolKtolKfospGrdu3a8eCDD2JmjB8/nhdeeOGHB5anVICIiIjshv79+zN27Fjc\nnfPPP58PPvgg7pDqJK0BqYHWgIiISLrt27czYMAAnn/+eXr06EFZWRkFBQVxh5UVWgMiIiKSUA0b\nNmTKlCkccsghzJ8/nyuvvDLukOocFSCSFZqHjkZ5ik65ikZ5ii7buWrdujWPPfYYjRo1YsKECUyf\nPj2r+6/vVICIiIjsoR49enzvImXLly+POaK6Q2tAaqA1ICIisivuzjnnnMPjjz9Oly5dKC8vp1mz\nZnGHtce0BkRERKQOMDMmTZpE586dWbp0KSNHjkS/uNZMBYhkheaho1GeolOuolGeoqvNXDVr1own\nn3ySFi1aMH36dP785z/X2mfVFypAREREsqBjx45MmTIFM+MPf/gDzz77bNwhJZrWgNRAa0BERGR3\nXH/99YwbN47mzZszb948jjrqqLhD2i25WgOiAqQGKkBERGR3VFZWcs455zBt2jTatm1LeXk5Bx98\ncNxhRaZFqCEz62lmpWb2jpmtMrMZZtY5rc8BZnadmZWb2etm9paZvWZmF2bYX4GZXR/2edPM5pnZ\nSbn7RvWT5qGjUZ6iU66iUZ6iy1WuGjRowOTJk+nRowdr1qzh9NNPZ+PGjTn57Lok0QWImfUCXgRm\nuPsR7t4eWAXMMbNDU7oeD/wn8Gt37+bunYF7gfvN7IK03U4EzgZOdvejgUnALDM7pna/jYiI5Ism\nTZrwz3/+kyOOOIJFixYxePBgNm/eHHdYiZLoKRgzmwO0d/d2KW3NgI+AB9z9V2Fbd+Cn7n5j2vvX\nAy+6+7Bw+0hgKTDK3e9P6fcvYJW7D8wQg6ZgRERkj7z33nucfPLJrFu3jr59+/LUU0/RpEmTuMPa\nJU3BBLoBb6c2uPtGYDVwRkpbeYbiowBoAnyS0jwEMKA07XNKgX5m1jR7oYuISL7r0KEDpaWlHHjg\ngbzwwgsMHjyYr7/+Ou6wEiHpBchXZI6xEjjIzPbJ9CYz2w+4A1gD3JDyUjGwHXg/7S0rgUZAlx8a\ncL7SPHQ0ylN0ylU0ylN0ceWqU6dOvPTSSxxwwAE8//zz9OnTh08++aTmN9ZzSS9AFgJHmVmjqgYz\nawEUhZvNUzubWRMzewv4mKCYGOzuH6R0aQVszjCnsiF83j+bwYuIiAB06dKF0tJS2rVrxyuvvEKP\nHj1YtmxZ3GHFKulrQI4D5gO3AtcQHKW4DRgGFAKt3H19hvc1JliUei0wwt2nh+2zgBPcvUVa/0uA\nu4EB7j4z7TWtARERkaxYu3YtAwcOZMGCBRQWFnLHHXcwYsSIuMP6nlytAWlUc5f4uPtrZtYXuApY\nAnwBPARsAYZnKj7C930D3GxmfYC/m9mT7l4JfAoU2s5VRdWRlM8y7W/kyJG0b98egJYtW9K1a1dO\nPfVU4LtDetrWtra1rW1tR9mePXs2l156KY888ggXXnghJSUlTJgwYccRkVzHU/XnVatWkVPuXuce\nQAkwK2W7MdAgQ7+/EqwX6RBuXxlut0vrNxHYCjTNsA+XmpWWlsYdQp2gPEWnXEWjPEWXpFxVVlb6\nvffe602bNnXAmzVr5n/961/9q6++ijs0D//fq/X/yxO9BsTM2plZcVpbC+Bk4O8pzXcD52TYRXuC\nguPzcHs64EDvtH69CQoanaQtIiK1zsy4+OKLefPNNxk0aBAbN25kzJgxtGvXjvHjx+f+aEQMkr4G\nZCQwBjjJ3debWSFwH9DQ3c9K6Xcf0BUY5OGiUzMbCjwKTHH3kSl97yAoOE5y98/M7CLgb8CJ7l6R\nIQZPco5ERKTue/bZZ7nuuusoLy/f0da9e3dOO+00TjnlFI477jgKCwtzEovuBQOY2bHATcARwHqC\nU2inAre4+/aUfkcB/w70JDjisRewieAqp3en9W0EjCe4Guo2gjNgxrj7vGpiUAEiIiK1zt2ZO3cu\nt99+O0899dROV05t164dnTt3pkOHDhQVFXH44YdTVFREUVERLVu2zFocKkASQgVINGVlZTsWNkn1\nlKfolKtolKfo6lKuNm3axMyZM5k9ezZz5sxhyZIlbNu2rdr+++67745ipKioiOLiYvr27UubNm12\n+7N1FoyIiEieKiwsZOjQoQwdOhSAb7/9lhUrVvD222+zYsUKVq5cueN55cqVrF+/nvXr17NgwYLv\n7adr165ceOGFDB8+nNatW8fxVaqlIyA10BEQERFJMnfnk08++V5hMn/+fMrKynZM4xQUFDBq1Ciu\nueYaDj300F3uT1MwCaECRERE6qKtW7dSUlLCvffeS0lJCe5O48aNueKKKxg7dix77713xvfpZnRS\np6Re0EaqpzxFp1xFozxFl2+52muvvRgyZAjPPPMMS5Ys4bzzzmPbtm3ceOONdO3alVdeeSXW+FSA\niIiI1HOdO3fm4YcfZu7cuXTq1Illy5bRs2dPJk6cSFxH+TUFUwNNwYiISH2yZcsWrr76am699VYA\nRowYwT333EPjxo0BrQFJDBUgIiJSHz366KOMGjWKTZs28fOf/5xp06ZRWFioNSBSt+Tb3OqeUp6i\nU66iUZ6iU66+79xzz2XOnDm0bt2amTNn0rdvX7788sucfb4KEBERkTz1k5/8hLlz53LYYYdRXl5O\n//79c/bZmoKpgaZgRESkvlu9ejW9evVi9erVAJqCERERkdp32GGHUVpayoknnpizz1QBIlmhudVo\nlKfolKtolKfolKtdKyoqYt68jPdlrRUqQERERAQITsHN2WdpfcOuaQ2IiIjkE52GKyIiIvWWChDJ\nCs2tRqM8RadcRaM8RadcJYsKEBEREck5rQGpgdaAiIhIPtEaEBEREam3VIBIVmhuNRrlKTrlKhrl\nKTrlKllUgIiIiEjOaQ1IDbQGRERE8onWgIiIiEi9pQJEskJzq9EoT9EpV9EoT9EpV8miAkRERERy\nTmtAaqA1ICIikk+0BkRERETqLRUgkhWaW41GeYpOuYpGeYpOuUoWFSAiIiKSc4lfA2JmPYE/AocC\nBcAS4Ap3fyulz4+A/w30AyqBRsCrwHh3X522vwJgHDAM+BbYAIxx93nVfL7WgIiISN7QGhDAzHoB\nLwIz3P0Id28PrALmmNmhKV3/BnQDTnH3YuBE4HDgNTM7MG23E4GzgZPd/WhgEjDLzI6p1S8jIiIi\nOyS6AAGuB9a6+y0pbVcChcA1KW0OXOvu6wHc/UvgWqAVcEFVJzM7ErgUuMndPwv73gusBG6ova9R\n/2luNRrlKTrlKhrlKTrlKlmSXoB0A95ObXD3jcBq4IyU5kHu/lLae9eGzy1T2oYABpSm9S0F+plZ\n0x8ccZ5atGhR3CHUCcpTdMpVNMpTdMpVsiS9APmKzDFWAgeZ2T4A7v5thj4dw+eylLZiYDvwflrf\nlQTrRrr8kGDz2RdffBF3CHWC8hSdchWN8hSdcpUsSS9AFgJHmVmjqgYzawEUhZvNd/HeXwKz0o6M\ntAI2Z1hVuiF83v8HxisiIiIRJL0A+QNBUXCjmRWYWRPgVoKzVwC+zvQmMxsJdAb+LRdBCqxatSru\nEOoE5Sk65Soa5Sk65SpZ6sJpuL2AqwjOavkCeIhgemW4u+90BMTM+gF3A33d/d201x4CzgEKUo+C\nmNnvgFuA49399bT3JDtBIiIiWZaL03Ab1dwlXu4+G5id2mZmJUB5el8z6wvcAfRLLz5Ci4HzgLZ8\nfx1IEbANWJrh82v9L0FERCTfJHoKxszamVlxWlsL4GTg72ntfYC7gAHuvjxsO9bMxqV0e4LglN3e\naR/Vm2C9yOYsfwURERHJINFTMOFajjHASe6+3swKgfuAhu5+Vkq/nwJPAxOAZSm76Awc7O4XpfS9\ng6DgOMndPzOziwguZHaiu1fU9ncSERGR5E/BvAn8D7DQzNYTnEI7lWC9Rqqbgb35/sXJIDja8UBa\n238A44F5ZraN4AyYfio+pCZm1oagAO7n7ok+ehgn5UlEInF3PdIewAHAFIKLoL1NUPQcEndcOfru\n7Qmuv7Iww6NFSr99CI4cvU1wf56ZQJcM+ysguKLtWwQF5TyCo0+xf9fdzMtQYEX4fbfvol/W8wJc\nFu5rMfAGMDjufGQhT99UM8Y65UmeuhJMIy8FKsK4/y/QSuNpj/KU1+MpjLcDwS/nr4ePZcAc4LSk\njqnYk5a0B9A4TOKjBGtkGgD3A8uBwrjjy8H3bw+URuj3bDi49w63rwM+JpjySu13ZzjQ9w+3RwGb\ngGPi/q67mZd5YW7uBypzlReCWw98AhSF233DH7b9487JD8zTyoj7q695qvrFpkm4fXD4g35Z1djR\neNqtPOX1eApj/A2wBjg83DbgRoLLVvRM4piKPWlJexDcK6YSaJ/SdmD4l3hF3PHl4Pu3p4YCBPhZ\nmKNTU9oKgM+Av6W0HUkwbTYy7f3/Ap6J+7vuZl6q1kvdTzX/sWY7LwS3EdhEcJ+j1H7PAP+KOyd7\nmqfw9ZUR9lWf87S06j+KlLaLw/EzVOMpep40nnbEdyZwcVpbizBXtyRxTGl+dmdnAavdfVVVg7t/\nRPAP4azq3pRnziKocOdWNbj7NoLfflNzVG/uvePhv6oaZDsv/YEm1fTrEt5cMVEi5imqepsnoNjd\nV6S1pd+/Ku/HE9HyFFV9zhPu/qS7T0prbhE+fxI+J2pMqQDZWTHBvWHSrQKOzm0osTnQzCab2X+b\n2TIzm2JmR6W8Xgx86Dvfg2dV+N5WKf3y6d472c5LcUp7ej+o2+OxqZndbmbzzWy5mT1pZien9am3\necowRiC4wKITHB4HjaeoeYI8H0+ZmNkhwG0EazJuC5sTNaZUgOysFbAxQ/sGgkG+V47jybXtBNNN\nE9z9BII7Em8D/tvMuoV9dpUj+O6eOvl2751s56Xqh0H6PutD/jYBj7t7D4IfYkuBMjNLvct13uTJ\nzBoSzLHf499dRFHjKU01eQKNpx3MrIOZvUuwHsSAIe7+VfhyosaUCpCdZfMQcp3j7mvcvdjdF4bb\nG4H/RfAP/MZYg5N6w90P9/BGke6+xd2vJlhcmH6Kfb4YC2wlOJtAqpcxTxpP33H399z9RwTTL+8A\ni83spJjDykgFyM4+BZplaG8ObHL3rTmOJ3buvoVg8dEJYdOucgTBgqaqfoVmln45+/R+9UW28/Jp\n+Jy+z/qav9eAH5nZvuF2XuQpvBjiMIKrOKfeYFPjKcUu8lSdvBxPVdx9o7v/FvgIuD1sTtSYUgGy\nswqCe8OkKyI4F7peM7PmZlaQ4aXtQMPwzxXAIWaWfiG7ImCdu1cNysUEY6xthn4Z771Tx2U7L4vD\n5/YZ+lV9Xp1jZoVmtneGl7aHz6njrF7nycxGAL8DfpoyPqpoPIV2lSeNp0A1OYDgl8cfm1ljEjam\nVIDsbDpwmJkdVtVgZgcCnYBpsUWVO/+PtLN9woF7NLAgbJpGcOrWSWl9TuL7Oaqv996pbpou23l5\nDthcTb8lHt7zKMGqy9P/IfNUw7HAByk/BKdTj/NkZsMJbjXRx90/DtsGmtmlYReNJyLlSeMp8JyZ\ndc/Q3h7Y4O7fEOQgOWOqts9NrmuP8C9nMfAIQeXcgOCy0suApnHHl4Pvfx/BqumDwu2GBFce3Ebw\nA6CqX9XFbKouEPRHgkN9bdL2dwffv5jNRQTrSYrj/q57mJ/7iXYhsqzkBfg9wUWC0i/y8/O4c7Gn\neSK4FcJqoENK2xUE1ycYmQ95Ai4AvgYuB4anPO4Cxms8Rc+TxtOOmEsJrmq6X7htwOgwD9cmcUzF\nnrQkPvjuUuzLyL9LsR8FTAQWhY8PgFlAr7R+hQSX811GcDhuJtA5w/4aEVzO923q9qXYbyc4tWwj\nwaHdlQSXHC+o7bwA/8l3lzleAJwRdz5+SJ4IfiO7KfwuCwlO9ZtLsFo/X/L0WZifyrTHdmCcxlP0\nPGk87Yi3BzAp/F4LCRbhvgycn9YvMWMq0XfDFRERkfpJa0BEREQk51SAiIiISM6pABEREZGcUwEi\nIiIiOacCRERERHJOBYiIiIjknAoQERERyTkVICIiIpJzKkBEREQk51SAiIiISM6pABEREZGcUwEi\nIiIiOacCRERiZ2YzzGyTmVWa2edmdp6ZNTOzdWa2zcw+M7Or4o5TRLJHd8MVkUQws1OAMuBxdz83\nbDsOeAD4ibtviTE8EckyHQERkURw95eBvwFnm9kwM9sLmAT8u4oPkfpHR0BEJDHMrClQATQDpgPb\n3H10vFGJSG1QASIiiWJmpwIvAV8Ah7r75ngjEpHaoCkYEUmaCmA90BI4LeZYRKSW6AiIiCSKmT0I\nvAuMAPYBurj7Z/FGJSLZpiMgIpIYZjYIOBz4I3AJ0Aq4LdagRKRW6AiIiCSCme0LvAGc5u5vh213\nAr8EznL3J+KMT0SyS0dARCR2ZvZfwHvAwcDTYdu5wDDAgYfM7K34IhSRbNMREBEREck5HQERERGR\nnFMBIiIiIjmnAkRERERyTgWIiIiI5JwKEBEREck5FSAiIiKScypAREREJOdUgIiIiEjOqQARERGR\nnFMBIiIiIjn3/wFNtOKMHH60ggAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# visualization of the path\n", + "pyplot.figure(figsize=(8,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'x', fontsize=18)\n", + "pyplot.ylabel(r'y', fontsize=18)\n", + "pyplot.title('Glider trajectory, flight time = %.2f' % T, fontsize=18)\n", + "pyplot.plot(x,y, 'k-', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grid convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's study the convergence of Euler's method for the phugoid model. In the previous lesson, when we studied the straight-line phugoid under a small perturbation, we looked at convergence by comparing the numerical solution with the exact solution. Unfortunately, most problems don't have an exact solution (that's why we compute in the first place!). But here's a neat thing: we can use numerical solutions computed on different grids to study the convergence of the method, even without an analytical solution.\n", + "\n", + "We need to be careful, though, and make sure that the fine-grid solution is resolving all of the features in the mathematical model. How can we know this? We'll have a look at that in a bit. Let's see how this works first.\n", + "\n", + "You need a sequence of numerical solutions of the same problem, each with a different number of time grid points.\n", + "\n", + "Let's create a NumPy array called `dt_values` that contains the time-increment of each grid to be solved on. For each element `dt_values[i]`, we will compute the solution `u_values[i]` of the glider model using Euler's method. If we want to use five different values of $\\Delta t$, we'll have five solutions: we put them in an array ... but each one is also an array! We'll have an array of arrays. How meta is that?\n", + "\n", + "We have one more trick up our sleeve: `enumerate()`. To get all the numerical solutions—each with its value of $\\Delta t$—done in one fell swoop, we will loop over the elements of the array `dt_values`. Within the loop, we need to access both `dt_values[i]` and the index `i`. It turns out, `enumerate()` is a built-in Python function that will give us consecutive `index, value` pairs just like we need. \n", + "\n", + "Read the code below carefully, and remember: you can get a help pane on any function by entering a question mark followed by the function name. For example, add a new code cell below and type: `?numpy.empty_like`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), we compared our numerical result to an analytical solution, but now we will instead compare numerical results from different grids. \n", + "\n", + "For each solution, we'll compute the difference relative to the finest grid. You will be tempted to call this an _\"error\"_, but be careful: the solution at the finest grid is _not the exact_ solution, it is just a reference value that we can use to estimate grid convergence.\n", + "\n", + "To calculate the difference between one solution `u_current` and the solution at the finest grid, `u_finest`, we'll use the $L_1$-norm, but any norm will do.\n", + "\n", + "There is a small problem with this, though. The coarsest grid, where $\\Delta t = 0.1$, has 1001 grid points, while the finest grid, with $\\Delta t = 0.001$ has 100001 grid points. How do we know which grid points correspond to the same location in two numerical solutions, in order to compare them? \n", + "\n", + "If we had time grids of 10 and 100 steps, respectively, this would be relatively simple to calculate. Each element in our 10-step grid would span ten elements in our 100-step grid. \n", + "\n", + "Calculating the _ratio_ of the two grid sizes will tell us how many elements in our fine-grid will span over one element in our coarser grid.\n", + "\n", + "Recall that we can _slice_ a NumPy array and grab a subset of values from it. The syntax for that is\n", + "\n", + "```Python\n", + "my_array[3:8]\n", + "```\n", + "\n", + "An additional slicing trick that we can take advantage of is the \"slice step size.\" We add an additional `:` to the slice range and then specify how many steps to take between elements. For example, this code\n", + "\n", + "```Python\n", + "my_array[3:8:2]\n", + "```\n", + "\n", + "will return the values of `my_array[3]`, `my_array[5]` and `my_array[7]`\n", + "\n", + "With that, we can write a function to obtain the differences between coarser and finest grids. Here we go ..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = ceil(N_fine/N_current)\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the function has been defined, let's compute the grid differences for each solution, relative to the fine-grid solution. Call the function `get_diffgrid()` with two solutions, one of which is always the one at the finest grid. Here's a neat Python trick: you can use negative indexing in Python! If you have an array called `my_array` you access the _first_ element with\n", + "\n", + "`my_array[0]`\n", + "\n", + "But you can also access the _last_ element with \n", + "\n", + "`my_array[-1]`\n", + "\n", + "and the next to last element with\n", + "\n", + "`my_array[-2]`\n", + "\n", + "and so on. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dt = 0.1\n", + "dt = 0.05\n", + "dt = 0.01\n", + "dt = 0.005\n", + "dt = 0.001\n" + ] + } + ], + "source": [ + "# compute difference between one grid solution and the finest one\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " print('dt = {}'.format(dt))\n", + "\n", + " ### call the function get_diffgrid() ###\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to create a plot of the results! We'll create a *log-log* plot with the Matplotlib function [`loglog()`](http://matplotlib.org/api/pyplot_api.html?highlight=loglog#matplotlib.pyplot.loglog). Remember to skip the difference of the finest-grid solution with itself, which is zero." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIh\nZGatzGyLmZ1Sibanm9nPkhGXSLIpSYmE0/1AE+APlWj7Z6BHYsMRCYaSlEjImNmPgM3ANKCnmZ1X\nTtss4GLgv5IUnkhSaasOkZAxs/HAEOAYIhsdvu3u/1ZG27bAB8Cx7r41eVGKJId6UiIhYmYXA/90\n9x3uvgp4DuhoZpeXaJdjZi8CfwO2AE+Y2ejkRyySWOpJiYSImU0C/t3d90RfHwusAv7H3Q8b9jOz\nmcB6dx+U3EhFkkM9KZGQMLNuwJv7ExSAu39FZHvuc8zsmhLtawA/BRYkNVCRJFJPSiQEohMgXnT3\n60s51xBYDWwHznD3oujxC4D3gObuvjmZ8Yoki3pSIuFwAzCptBPu/i2RqehtgJsOOtWRyDCgEpSk\nLSUpkYCZWW2go7u/UU6zMcAaYLiZ1Y0e60h0qM/MapvZgwkNVCQANYMOQES4DXAzu7OCdp8CXYhM\nTx8BNAdmRc/dCbyYsAhFAqKalEiAor2itUCzSr7Fga+BVkA3oDewFHjL3RcmJEiRAClJiYhIaKkm\nJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIi\nofX/ARE7ZqFnKYAXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# log-log plot of the grid differences\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel('$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='-', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Order of convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order of convergence is the rate at which the numerical solution approaches the exact one as the mesh is refined. Considering that we're not comparing with an exact solution, we use 3 grid resolutions that are refined at a constant ratio $r$ to find the *observed order of convergence* ($p$), which is given by:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p = \\frac{\\log \\left(\\frac{f_3-f_2}{f_2-f_1} \\right) }{\\log(r)}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $f_1$ is the finest mesh solution, and $f_3$ the coarsest. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is p = 1.014\n" + ] + } + ], + "source": [ + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values2 = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values2 = numpy.empty_like(dt_values2, dtype=numpy.ndarray)\n", + "\n", + "diffgrid2 = numpy.empty(2)\n", + "\n", + "for i, dt in enumerate(dt_values2):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + "\n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values2[i] = u\n", + " \n", + "\n", + "#calculate f2 - f1\n", + "diffgrid2[0] = get_diffgrid(u_values2[1], u_values2[0], dt_values2[1])\n", + "\n", + "#calculate f3 - f2\n", + "diffgrid2[1] = get_diffgrid(u_values2[2], u_values2[1], dt_values2[2])\n", + "\n", + "# calculate the order of convergence\n", + "p = (log(diffgrid2[1]) - log(diffgrid2[0])) / log(r)\n", + "\n", + "print('The order of convergence is p = {:.3f}'.format(p));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See how the observed order of convergence is close to 1? This means that the rate at which the grid differences decrease match the mesh-refinement ratio. We say that Euler's method is of *first order*, and this result is a consequence of that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Paper airplane challenge" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose you wanted to participate in a paper-airplane competition, and you want to use what you know about the phugoid model to improve your chances. For a given value of $L/D$ that you can obtain in your design, you want to know what is the best initial velocity and launch angle to fly the longest distance from a given height.\n", + "\n", + "Using the phugoid model, write a new code to analyze the flight of a paper airplane, with the following conditions:\n", + "\n", + "* Assume $L/D$ of 5.0 (a value close to measurements in Feng et al. 2009)\n", + "* For the trim velocity, let's take an average value of 4.9 m/s.\n", + "* Find a combination of launch angle and velocity that gives the best distance.\n", + "* Think about how you will know when the flight needs to stop ... this will influence how you organize the code.\n", + "* How can you check if your answer is realistic?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Feng, N. B. et al. _\"On the aerodynamics of paper airplanes\"_, AIAA paper 2009-3958, 27th AIAA Applied Aerodynamics Conference, San Antonio, TX. [PDF](http://arc.aiaa.org/doi/abs/10.2514/6.2009-3958)\n", + "\n", + "* Simanca, S. R. and Sutherland, S. _\"Mathematical problem-solving with computers,\"_ 2002 course notes, Stony Brook University, chapter 3: [The Art of Phugoid](https://www.math.sunysb.edu/~scott/Book331/Art_Phugoid.html). (Note that there is an error in the figure: sine and cosine are switched.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb b/lecture_22/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb new file mode 100644 index 0000000..dfe6da7 --- /dev/null +++ b/lecture_22/01_phugoid/.ipynb_checkpoints/01_04_Second_Order_Methods-checkpoint.ipynb @@ -0,0 +1,1187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, C.D. Cooper. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid model: bonus!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_The phugoid model of glider flight_ has been such a fun problem to showcase the power of numerical solution of differential equations, we thought you'd enjoy a bonus notebook. The previous lessons were:\n", + "\n", + "* [Phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) —Lays the groundwork for our fun problem, with some context, a little history and a description of the physics of phugoids: curves representing the trajectory of a glider exchanging potential and kinetic energy, with no drag.\n", + "* [Phugoid oscillation](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) —Develops the simple harmonic motion of an aircraft experiencing a small perturbation from the horizontal trajectory: our opportunity to introduce Euler's method, and study its convergence via an exact solution.\n", + "* [Full phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) —The full model takes into account the force of drag and results in a system of two nonlinear equations. We obtain the trajectories using Euler's method in vectorized form, introduce grid-convergence analysis and finish with the paper-airplane challenge!\n", + "\n", + "That is a fantastic foundation for numerical methods. It's a good time to complement it with some theory: the first screencast of the course uses Taylor series to show that _Euler's method is a first-order method_, and we also show you graphical interpretations. Many problems require a more accurate method, though: second order or higher. Among the most popular higher-order methods that we can mention are the _Runge-Kutta methods_, developed around 1900: more than 100 years after Euler published his book containing the method now named after him!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Euler's method is a first-order method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this screencast, we use a Taylor series expansion to analyze Euler's method and show that it incurs a truncation error of first order. We also use a graphical interpretation to motivate the _modified_ Euler method, which achieves second order." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('6i6qhqDCViA')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second-order methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The notebook on phugoid oscillation (lesson 2) included a study of the accuracy obtained with Euler's method, using the exact solution for the simple harmonic motion. We made a _convergence plot_ and saw that as $\\Delta t$ gets smaller, the error also gets smaller. \n", + "\n", + "We could have drawn a line with a slope equal to 1 on that log-log plot, and you would have seen that it was parallel to the convergence line. A slope equal to 1 on a log-log convergence plot is an indication that we have a first-order method: the error scales as ${\\mathcal O}(\\Delta t)$. \n", + "\n", + "In lesson 3, using the full phugoid model (which is nonlinear and does not have an exact solution), we did a _grid-convergence study_ with three different grids, and obtained the _observed_ order of convergence—it was very close to 1, indicating a slope of 1 on a log-log plot.\n", + "\n", + "Another way to look at an ${\\mathcal O}(\\Delta t)$ method is to say that the error scales _linearly_ with the step size, or that they are proportional:\n", + "\n", + "$$ e \\propto \\Delta t.$$\n", + "\n", + "where $e$ stands for the error. To get more accuracy, we could use a _second-order_ method, in which the error is ${\\mathcal O}(\\Delta t^2)$. In general, we say that a method is of order $p$ when the error is proportional to $(\\Delta t)^p$.\n", + "\n", + "In the screencast titled \"Euler's method is a first-order method,\" we used a graphical interpretation to get an idea for improving it: by estimating an intermediate point, like the **midpoint**, we can get a better approximation of the area under the curve of $u^\\prime$. The scheme has two steps and is written as:\n", + "\n", + "\\begin{align}\n", + "u_{n+1/2} & = u_n + \\frac{\\Delta t}{2} f(u_n) \\\\\n", + "u_{n+1} & = u_n + \\Delta t \\,\\, f(u_{n+1/2}).\n", + "\\end{align}\n", + "\n", + "This method is known as the *explicit midpoint method* or the *modified Euler method*, and it is a second-order method. Notice that we had to apply the right-hand side, $~f(u)$, twice. This idea can be extended: we could imagine estimating additional points between $u_{n}$ and $u_{n+1}$ and evaulating $~f(u)$ at the intermediate points to get higher accuracy—that's the idea behind Runge-Kutta methods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Runge-Kutta methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the modified Euler method, we improve the accuracy over Euler's method by evaluating the right-hand side of the differential equation at an intermediate point: the midpoint. The same idea can be applied again, and the function $f(u)$ can be evaluated at more intermediate points, improving the accuracy even more. This is the basis of the famous *Runge-Kutta (RK) methods*, going back to Carl Runge and Martin Kutta. The modified Euler method corresponds to _second-order_ Runge-Kutta.\n", + "\n", + "Here's a bit of historical coincidence that will blow your mind: Carl Runge's daughter Iris—an accomplished applied mathematician in her own right—worked assiduously over the summer of 1909 to translate Lanchester's _\"Aerodonetics.\"_ She also reproduced his graphical method to draw the phugoid curves (Tobies, 2012)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phugoid model with 2nd-order RK" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compute the motion of a glider under the full phugoid model using the second-order Runge-Kutta method. We'll build on the _paper airplane challenge_ of lesson 3 now, and look for the horizontal distance that the plane travels until the moment it touches the ground. \n", + "\n", + "As usual, let's start by importing the libraries and modules that we need, and setting up the model parameters. We also set some default plotting formats using the [`rcParams`](http://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.rcParams) module. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the paper-airplane challenge of lesson 3, we suggested an $L/D=5.0$ as a realistic value for paper airplanes, according to experiments, and a trim velocity of 4.9 m/s. Let's start with those values, but you could experiment changing these a bit. _What do you think will happen if you make $L/D$ higher?_" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Among the initial parameters that we suggest for your first experiment, we are starting with a velocity a little higher than the trim velocity, launch the paper airplane with a negative initial angle, and take the initial height to be 2 meters—all sound like reasonable choices.\n", + "\n", + "Now, we can define a few functions to carry out the computation:\n", + "* The right-hand side of the phugoid model from [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb),\n", + "* One step of the Euler's method that we learned in [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), and\n", + "* Differences with respect to a fine grid, as in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])\n", + "\n", + "\n", + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)\n", + "\n", + "\n", + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = int(numpy.ceil(N_fine/N_current))\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we also need to define the function `rk2_step()` that computes the next time step using the *modified Euler* method of equations $(1)$ and $(2)$, above, otherwise known as 2nd-order Runge-Kutta or RK2. This function will be called over and over again within the time loop." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rk2_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using 2nd-order Runge-Kutta.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at the next time step.\n", + " \"\"\"\n", + " u_star = u + 0.5*dt*f(u)\n", + " return u + dt*f(u_star)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we first need to set up the time discretization, then initialize arrays to save the solution and we are set to go! The only difference this time is that we are using _both_ Euler's method and 2nd-order Runge-Kutta to get a solution, to compare the two. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "\n", + "# set initial conditions\n", + "u_euler = numpy.empty((N, 4))\n", + "u_rk2 = numpy.empty((N, 4))\n", + "\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_euler[0] = numpy.array([v0, theta0, x0, y0])\n", + "u_rk2[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "\n", + "# use a for loop to call the function rk2_step()\n", + "for n in range(N-1):\n", + " \n", + " u_euler[n+1] = euler_step(u_euler[n], f, dt)\n", + " u_rk2[n+1] = rk2_step(u_rk2[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can get the position of the glider in time, according to both Euler's method and the 2nd-order Runge-Kutta method, by extracting the appropriate portions of the solution arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x_euler = u_euler[:,2]\n", + "y_euler = u_euler[:,3]\n", + "x_rk2 = u_rk2[:,2]\n", + "y_rk2 = u_rk2[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### How far will it fly before touching the ground?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the $y$-axis measures the vertical coordinate with respect to the ground, negative values of $y$ don't have any physical meaning: the glider would have hit the ground by then! To find out if there are any negative $y$ values we can use the handy function [`numpy.where`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html). This function returns the **indices** of the elements in an array that match a given condition. For example, `numpy.where(y_euler<0)[0]` gives an array of the indices `i` where `y_euler[i]<0` (the `[0]` is necessary as `numpy.where` returns an array, which in this case contains a single line). If no elements of the array match the condition, the array of indices comes out empty. \n", + "\n", + "From the physical problem, we know that once there is one negative value, the glider has hit the ground and all the remaining time-steps are unphysical. Therefore, we are interested in finding the _first_ index where the condition applies, given by `numpy.where(y_euler<0)[0][0]`—do read the documentation of the function if you need to! " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_euler = numpy.where(y_euler<0.0)[0]\n", + "if len(idx_negative_euler)==0:\n", + " idx_ground_euler = N-1\n", + " print ('Euler integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_euler = idx_negative_euler[0]\n", + " \n", + "idx_negative_rk2 = numpy.where(y_rk2<0.0)[0]\n", + "if len(idx_negative_rk2)==0:\n", + " idx_ground_rk2 = N-1\n", + " print ('Runge-Kutta integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_rk2 = idx_negative_rk2[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Do Euler and RK2 produce the same solution?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An easy way to compare the numerical results obtained with the Euler and 2nd-order Runge-Kutta methods is using [`numpy.allclose`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html). This function compares each element of two arrays and returns `True` if each comparison is within some relative tolerance. Here, we use the default tolerance: $10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Are the x-values close? False\n", + "Are the y-values close? False\n" + ] + } + ], + "source": [ + "# check to see if the paths match\n", + "print('Are the x-values close? {}'.format(numpy.allclose(x_euler, x_rk2)))\n", + "print('Are the y-values close? {}'.format(numpy.allclose(y_euler, y_rk2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hmmm, they do differ. Maybe $10^{-5}$ is too tight a tolerance, considering we're using a somewhat coarse grid with first- and second-order methods. Perhaps we can assess this visually, by plotting the glider's path? Study the code below, where we are plotting the path twice, taking a closer look in the second plot by \"zooming in\" to the beginning of the flight." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n+eWXL1nerVu3i92pp06dMq1atTKNGzc2x9PpOsjI4cOHjYiY0qVLZysHb3mznwlAdyrQBfgFKOFF\n2RbAH8BB3IdmAAAgAElEQVT6VK/tWN2pu+z3T6Szbo6+L6WC3d69e02FChXMlClT/lm4caMxVata\nP4PF6tXGtGqVbpfuuHHjzI033mhOnTqV46q8PYdpd6qfrVixgh07djB69GhmzJgR8KcbBGIOoHr1\n6rF79252797tSP0qYxcuXCA+Ph4R4ZZbbvFY5tChQzRu3JiCBQuyaNEiChYsmOV6VtkDgDt06JCj\neEOBiNwLDAXijDGH7GWtRaRXqjIlxZ57xxiz0BhT1hhzY8oLSLml7Ul72bOBziPQ3HI+cEse4Hwu\nf/31Fy1atOC+++7jgQce+OeDqlXh55+tn17yey5168KXX6bbpTtkyBCqVatG79690x2q4mvaiPOz\npC1bWNysGU888USOHswbzHLlykXr5s2Z/9lnToei0ti/fz99+vRh7969DBo0iFq1anks16NHDzZs\n2MDIkSMvn0jTC8YYXnzxRWJiYhgxYkROww5qItIZmAG8CTQXkXvtRl0boLRdpgGwD5ia0abS/FQq\nrJw5c4a2bdvSpEkThg8ffnmBXKE14ktEeO2119iwYQMzZswITKXeXK4L9RdOdUecPGmOFi9uRleu\n7Mpu1NT233CDeaJ2bUdjyPZ+HjXKGOtm8ktfo0b5tnx6n/tASndqVFSUKVWqlClVqpTJly+fERFT\nu3Zt88MPP3hcL6U7tU6dOkZETJkyZcz27duzXP/kyZNNdHS0+fbbb3OaSqa82c/4sTsVOAokYXWF\npn4lASPtMjWAI3joIgVKATuB/fY6h+33ddKpL+dfmlJBJikpydx1112mY8eOrvv9uHnzZlOsWDGz\nfv36bG/D23OY4w2sQLycOgkeu+su80FUlNmxY4cj9QfS6aefNq/nzm3+/vtvx2II5192nsbEnT59\n2owYMcKIiGnVqpXHaWBSGnErVqwwvXv3NiJirr76avPbb795XffHH39soqOjzWeffeaTXDLjdCMu\n0K9wPq6Vew0fPtw0aNDAnDlzxhprtnix0yFlz4ULxniY2uTtt982VapUMadPn87WZr09h2l3qp8k\nfvghJz//nB969qRixYqOxRGo8Q55O3TgvyIsWbTIkfrV5fLmzcuzzz5LXFwcCxYs4PXXX0+3rIgw\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(10,6))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler[:idx_ground_euler], y_euler[:idx_ground_euler], 'k-', label='Euler')\n", + "pyplot.plot(x_rk2[:idx_ground_rk2], y_rk2[:idx_ground_rk2], 'r--', label='RK2')\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_rk2[idx_ground_rk2-1]))\n", + "pyplot.legend();\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler, y_euler, 'k-', label='Euler')\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From far away, the Euler and RK2 methods seem to be producing similar answers. However, if we take a closer look, small differences become evident. Keep in mind that we are solving the same equation and both methods will converge to the same solution as we refine the grid. However, they converge to that solution at different rates: RK2 gets more accurate faster, as you make $\\Delta t$ smaller." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grid-convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we want to do a grid-convergence study with RK2, to see if we indeed observe the expected rate of convergence. It is always an important step in a numerical solution to investigate whether the method is behaving the way we expect it to: this needs to be confirmed experimentally for every new problem we solve and for every new method we apply!\n", + "\n", + "In the code below, a `for`-loop computes the solution on different time grids, with the coarsest and finest grid differing by 100x. We can use the difference between solutions to investigate convergence, as before." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for-loop to compute the solution on different grids\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once those runs are done, we compute the difference between each numerical solution and the fine-grid solution." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# compute diffgrid\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "for i, dt in enumerate(dt_values):\n", + "\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we plot!" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nicaKFSu44YYbWLVqFR9//HHU4UgBmUymza7Dqqy9lhRJb+kkfdpm0qUpfxdffDGTJk3iuOOO449/\n/GPU4VQs6bkLe/aaiEjNNDc3M2XKFMyMa665JupwpEJq6RSR9JaOSByMGDGCX/3qV5x++un86le/\nijocKYFaOiISW4cffji9e/fm6quvjjoUCYGKToql+VmBJEhL/i666CKam5vp27dv1KGEJi25y6cq\nRcfMZlfjviKSTttsU9FEW6kjpeynE2QTt0nu3rWSwOqBmfn48eM1ZVpEpAQtU6YnTJgQfMFPbeKm\niQQiIuWodCLB+8BRwODcayjwMnAHMILspm1H5/77DmAx2U3fpM6luV85CZKav08++YR7772XjRsT\ntcDJpyQ1d6UopaP0L+7+RMsbM5tEdhO3+/NcO93MTia7idvvQopRRFLkrrvu4vzzz+f444/noYce\nijocCZk2cStC3WsitbVmzRoGDhzIkiVLuOeee/j2t78ddUgSQNjP6ewCFJsk0BXYKcB9RSTlbrnl\nFpYsWcLBBx/Mt771rajDkSrQJm4pluZ+5SRIWv7ef/99Jk6cCMA111xDu3axn4tUUNJyV44gk98v\nAR4nu4nbUmAp2WnSPYCewCqgIawARSQdpk6dygcffMBRRx3FMcccE3U4UiWB1l4zs32AnwDHAZ1z\nh1cDTcA4d58bWoQR0piOSO1s2rSJe+65h/32249DDjkk6nCkAsXGdLSJWxF6OFREpHShPBwahJmd\n4e6xXw426S2dpO/pkXTKX3wlPXdRrDJ9Q5XuKyIiMVbKMjiNwM7uPir3vpnia7EZ0NvdO4QVZFSS\n3tIREamGisZ0zOxtYEdgF3dfa2brgafb+MzD3b1ToGjriIqOSPW4O8OHD+dLX/oSF154IZ06xf5X\nhuRUWnR6AB3d/c3c+6Xu3rONr2nzmjhIetFJer9y0sU9fzNnzuS4445jp512YuHChXTtGvuF6UsW\n99y1paIxHXdf1lJwcjqa2VQz+1qRL/t+uUGKSHps2rSJyy+/HIAxY8akquCkXZC11zYB04Hr3P2V\nqkRVJ5Le0hGJyvTp0znjjDPo3bs38+bNU9dawoT6nI6ZLXP3HqFEVudUdETCt379evbdd1+am5u5\n4447OPfcc6MOSUIW9pTpV8ysVxsfeFeA+0qNpXn9pySIa/5WrFhB79692X///TnzzDOjDicScc1d\nGIKsvTYKuNXMrnb35wtco4WTRCSv3XffnSeeeIJ3332XbbYJ8itI4ixI91oz0AXoBqwBVgCtt7RO\n1HM6WgZHRKQ0VVkGx8zWkX1OJ+8Nc/ScjohISoU9pvOeux/l7g2FXsD7FUUsNZHmfuUkUP7iK825\nC1J0RpRwzbEB7isiCfX222+zfPnyqMOQOlCVVaaTQt1rIuE4/fTTefDBB7n77rs56aSTog5HqizU\n7jUzm115SCKSFi+99BL33HMPGzZs4OCDD446HIlYkPmKe5hZW5PrNwErgWfdXeM7dSrp6z8lXVzy\nd8UVVwBw4YUX0qdPn2iDqRNxyV01BCk6OwLTSrx2nZld7+7jA3yOiMRcJpNh5syZ7LDDDlx55ZVR\nhyN1IMiU6ZOBnwKPABlgWe5UD6ABOAQYC+wAfAk4D/hXd//PUCKuIY3piFTmiCOO4Omnn+bHP/4x\n48aNizocqZGw1167A/hvd7+/wPmTgX9294tz708EGt39oPLCjp6KjkhlXnnlFa6//nqmTJlCly5d\nog5HaiTsorMI6Fvot7GZtQPmu3u/3Pv2wEp3j93a5UkvOmnuV04C5S++kp67sB8O3RkoVkC6Aru0\ner8JWB3gc0REJGGCtHSeADYA/8/dZ29x7kDgJmCb3MoEmNlwYKy7HxhKxDWU9JaOiEg1FGvpBJm9\ndgnwOPB/ZrYUWEp2HbYeQE9gFdkJBZjZbcDZwL8H+BwREUmYsrvX3P0FYBDwAPAZ4AvAwbn/vg84\n1N1fzF0+Gfgn4LpQoo1AY2NjYtdJSur3lRb1mL/33nuP8847jwULFkQdSl2rx9yFIZPJ0NjYWPSa\nQJtZuPsbwLDcJIFdc4dXuPvGLa6L/eoFbf0Disg/XHvttUydOpUlS5Ywc+bMqMORGmvZBmbChAkF\nr9Haa0VoTEekdH/7298YOHAga9euZdasWRx66KFRhyQRCXv2mojIVhobG1m7di3Dhg1TwZGCVHRS\nLKn9ymlRT/mbM2cOd955J+3bt+cnP/lJ1OHUvXrKXa1pg3IRqdisWbPYZpttOPfcc9l7772jDkfq\nmMZ0itCYjkjp3nzzTbbbbju6d+8edSgSsVCXwUkTFR0RkfKFPpHAsk4ys/80swdyxwbmjrWvJFip\nnTT3KyeB8hdfac5d2WM6ZrYd0ERu1QGyKxAAdAFuB142sxPc/aNQIhQRkcQIsvbaROAs4CfA88BD\n7t4jd2474G5gnrtfEXKsNafuNZHCVq5cSbdu3aIOQ+pQ2N1rw4CT3f1Wd58FbP6t7O5rgO8D3wwU\nqYjEwrp16zjkkEP4+te/zrvvvht1OBIjgbY2cPe/Fjrp7u+S7WqTOpfmfuUkiDJ/P//5z3nzzTdZ\nvHgxO+20U2RxxFWaf/aCFJ31Ztaz0Ekz6092Dx0RSaAPP/xw8wOgEydOpH17zR2S0gXdrnpv4Bx3\nn29mS929Z+7ckcDNwLPufkHo0daYxnREtnbVVVdx9dVXc8QRR/Dkk09ilrfrXlIs7O2qewLPAnsA\nzUBv4FVgd7IrTi8CDnf3dyqIuS6o6Ih82vLly+nfvz8ff/wxTz75JEceeWTUIUkdCnUigbsvJbuf\nzlSgG9ABOAjYFrgN+GISCk4apLlfOQmiyN/222/PpZdeymmnnaaCU4E0/+wF3U/nHeB8M/sun95P\nR2M5IgnWpUsXrrrqqqjDkBiryjI4Zrafu88J/cY1pu41EZHyRbGfzqNVuq+IiMRY0LXXTjSzO83s\nYTN7bIvX42THehKhsbExsf2vSf2+0kL5i6+k5i6TydDY2Fj0miBrr10M3AR8ArwLrM9zWWI2h2vr\nH1Ak6Z555hneeecdTjjhBE2PlqIaGhpoaGhgwoQJBa8JMmV6PvAL4Gfunq/g0PrZnTjTmI6knbtz\n2GGHMWvWLG6//XbOO++8qEOSGAj7OZ0VQPdiv43NrMHdM2XduA6p6Eja3X///QwbNowePXowf/58\ntt9++6hDkhgIeyLBq8DObVyTmO61JEtqv3JaVDt/GzZs4MorrwSyqxCo4IQnzT97QYrDD4ApZvb5\nItdMDxiPiNSJqVOnMnfuXAYMGMD5558fdTiSEG12r5lZM622L8jZgewMtdVkJxO0fijUgN7u3iHE\nOCOh7jVJsyOPPJKnnnqKe++9l+HDh0cdjsRIRWM6ZrYOeJpsMSnV4e7eqYzr65KKjqTZ+vXrmTFj\nBqeddhrt2qnHXEpXadEpeyaaZq/FQyaToaGhIeowJCDlL76SnrtKJxKMKOODOuf+c0ipXyMiIukR\nZMr0FHe/sMC5W4BTgbPcvSmE+CKV9JaOiEg1hP2cTsGuMzPrTraVM8bd9ys70jqjoiNps3HjRu0E\nKhWr2YKfuS0PfkWC1l5LsjQ/K5AEYefvtddeY8CAAdx9992h3le2luafvZLWXjOzO8lOmzbgM2Y2\ntcj99gXeDic8EamVMWPGsGjRIp599llGjCh5KFekLCV1r5lZqZuzrQbmAKPc/ZlKAqsH6l6TtHj6\n6ac54og1J05xAAAYdElEQVQj6Ny5MwsWLKBHjx5RhyQxVqx7raSWjrtv7oZLynRoEclydy677DIA\nLrnkEhUcqaogYzpjQo9CIpHmfuUkCCt/TU1N/OUvf6Fbt2786Ec/CuWeUlyaf/bK3k/H3e+sRiAi\nEo0dd9yRz33uc5x77rnsuOOOUYcjCVf2lOk00ZiOpMXGjRvZtGkTHTrEfslEqQOhPqeTJio6IiLl\nq9lzOhIvae5XTgLlL77SnDsVHRERqZlSVpkeCwwGhrn7yppEVSfUvSZJ9eijjzJo0CBNHJCqqHRr\ngwXAWOBed99kZme5+11ViLNmzOxnZDeiex84CLjT3bfa7VRFR5Jo6dKlDBgwgM6dO/Paa6+x6667\nRh2SJEylYzrbu/uv3b1lVYJrS/jAl8oJMALr3f08d/9Xss8d3W5mqetqTHO/chIEzd/VV1/N6tWr\nOeKII1RwIpLmn71SftGuNrMvlXnf3YIEUyvufmmrt/sCr7YqqiKJNX/+fG677TbatWvHxIkTow5H\nUqiU7rWrgSuB5cBaYA9gcbEvAXq7e8UT/s2sJ3AncEzrpXjCYGYHku027Ed2vKo5zzXqXpNEOfXU\nU7n33ns555xzmDq10Lq9IpWpdEynHXAh8FVgJ+BLQFuLeR7u7p0CxNr6c08GbgTWAwPdPe8mH7k9\nfH4KHJI7NBu42N2X5M6PAkbmzn3P3R/b4usPA+4HPu/u721xTkVHEmPBggUMGDCAjh07Mm/ePPbY\nY4+oQ5KEqtkmbuVcU8LnPAWcDjQCZ+Zr6ZjZtsAs4HXg27nDU4EvAwe7+8d5vqYdsF3rc2Y2F7jU\n3X+3xbWJLjpJ36c96YLk76mnnuLVV1/lu9/9bnWCkpIk/Wcv7IdDS9loI4zNOI5090VtXHMW8Dng\nMnfflBuXuYxsl9kFBb5mT+D2ljdm1g3oASyoOGKROnfEEUeo4EikAi2DY2YGnAkMB/rnDs8DZrh7\nqNsOmtk0Crd0ZgL7uHvfLY6/DHzs7ltNgDCzHYDbgDXAe8B+wH35FjJNektHRKQaKt5PZ4ubbQs8\nCAzZ4tTewFAzOw04wd03lB1p+Q4k27W2pUVkH2jdirt/BJxaxZhERKSAIN1rlwMHAz8C9gF2zL32\nBS7NnbsirADbsAvwUZ7jHwKdzaxjjeKIpTQ/K5AEyl98pTl3Zbd0gDOAr7v7i1scnwvcaGaPA78B\nflxpcCWoet/X2WefTZ8+fQDo2rUrBx100OYBwJb/48T1/UsvvVRX8eh9ee9LyV9TUxNr1qxh3Lhx\nzJkzp67i1/vkvM9kMkybNg1g8+/LQoLMXlvm7kX3sy3lmjI+bxqFx3SWAG+4++Atjv8eOMrdd6jw\nszWmI7H18ccfM2DAAJYtW8aMGTMYNmxY1CFJSoQ9e22DmRVcccDMegCfBLhvEC8DffMc70v2eR2R\n1PrZz37GsmXLGDRoEKecckrU4YgAwYrOTOB+M/vClifM7BCyD1r+d6WBbaFQc+O/gL3MbK9WMexG\ndnzpgZBjSJyW5rHEU7H8rVy5kuuvvx6Aa6+9luyEU6kXaf7ZC1J0xpF91uV5M3vbzF7IvZaSfVCz\nd+6aMBX6iZlGtkVznZm1zz34eS2wELg15BhEYmPixIl8+OGHHHPMMQwenHcip0gkyi467r4MGET2\nyf/OZGerHQxsB9wBDMpdUxEzm2JmzcA3ATezZjNbaGab13TLTcs+GtgIvJZ7dQEGu/vqSmMAaGxs\nTOxfJS0DghJPhfLn7qxevZr27dtz7bVtLgovEUjqz14mk6GxsbHoNYEeDt38xdmWRcva6CuStlKz\nJhJInP3tb3+jd+/eUYchKRT2RILNckvPLM+9ElVw0iCpLbi0aCt/Kjj1K80/e6nbuExERKJTUfda\n0ql7TUSkfFXrXhOR+uDuvP56vmUIReqLik4bkjx7LanfV1q0zt9DDz3Efvvtx+jRo6MLSEqW1J+9\nUmavBVl7LVXa+gcUidrGjRsZM2YMAP369Ys4GkmzhoYGGhoamDBhQsFrqjKmY2Y/cfexod+4xjSm\nI3Ewbdo0zjnnHPr06cPrr79Ox45aXF2iFep21VvceBeyD4h+6jAwy927B75xnVDRkXq3du1a9t57\nb9566y1++ctfMmJEGJv2ilQm1IkEZraLmU03szXAO2Q3TGv9aga6BYxVaiip/cppkclkuPXWW3nr\nrbc48MADOe2006IOSUqU5p+9IGM6vwC+AswAlgDr81zzw0qCEpHSnHHGGSxevJghQ4bQvn37qMMR\naVOQ/XTeB77o7vOKXPOiu2+1CnXcmJmPHz9+8+CYiIgUlslkyGQyTJgwIbwxHTOb4+77hRJhndOY\njtSjpqYmJk+ezLp16+jYsSOjRo1i6NChUYclslmxMZ0g3WtTzOy77v6LIh/4vLsfGuDeUkOZTEYt\nuJhpampi9OjRLFiwYPOxlv9W4YmPNP/slV103P1mM/uZmT0HPAe8C7Re7NOAfUKKT0RamTx58qcK\nDmSLzs0336yiI7FQdtExs1OBkWSLS6HWjPqkYiCtf2nF2bp16/IeX7t2bY0jkUqk+WcvSPdaI9lt\nom8BlpJ/9tpzFcQkIgVs3Lgx7/FOnTrVOBKRYIKsvdYd+La7P+Huc9190ZYv4MZww5RqSPOzAnGV\nr7j079+fkSNHRhCNBJXmn70gLZ3ZZLem/qjINU8HC0dEClm4cCGZTAYz48gjj+TDDz+kR48ejBw5\nUuM5EhtBis5FwC1mdp27v1bgmhlAr+Bh1Y/GxsbEPqeTxO8pySZOnMgnn3zCmWeeyV133RV1OFKB\npP7stTynU0yQ53SagS5kl7r5GFjJ1rPX9nD32K9gred0pF6sXr2aAQMGsHz5cl5//XUGDhwYdUgi\nBYW9iVsv4BXgz8ALZNdbW9zq9SbwSaBIpabS3K8cN507d2bu3Lk8+OCDmwuO8hdfac5dkNbIe+5+\nVLELzGxpwHhEpIAuXbpw/PHHRx2GSEWCdK991d0fbeOaz7v7/1UUWR1Q95qISPlC3U/HzO4k+/Dn\nPe7+pxDiq1sqOiIi5Qt7TOcsoAOwrKKoJHJp7ldOAuUvvtKcuyBF5x13H+Hur4QejYhs9uabb3LI\nIYfwwAMPRB2KSGiCFJ1XzKzoMzhmpocIYiCpzwokxTXXXMOLL77Ib3/727znlb/4SnPughSdUcCt\nZlZs64JjAsZTdxobG1PdFJZoLF68mKlTp9KuXTvGjh0bdTgiJclkMjQ2Nha9ptKHQ9cAK9j64dDe\n7t6hrBvXoaRPJEjznh717oILLuDnP/85p512GtOnT897jfIXX0nPXdibuPUiu7Za3hvm9AxwXxEh\n28q54447MDPGjRsXdTgioQrS0lnq7kWLSinXxEHSWzpSn55++mlGjBjBYYcdxj333BN1OCJlC/s5\nna+19XyOHg4VqcyGDRv46KOP2HnnnaMORaRsoT6nU8oDoUkoOGmgCRL1q0OHDm0WHOUvvtKcu0Ar\nQZuZAWcCw4H+ucPzgBnufndIsYmISMIE6V7bFngQGFLgkoeBE9x9Q4WxRU7dayIi5Qt7GZzLgYOB\nHwH7ADvmXvsCl+bOXREsVJF0+vvf/866deuiDkOk6oIUnTOAr7v7v7v7PHdflXvNdfcbgaHAiHDD\nlGpIc79yvRk7diwDBgzgkUceKflrlL/4SnPugozp7OjuLxY66e4vmNkOFcQkkipLlizhF7/4BRs2\nbKBXr0Ts8i5SUJCWzgYz263QSTPrQYJ2Dk3yMjhJfiI6Tq699lrWr1/PKaecwgEHHFDy1yl/8ZXU\n3FVrGZzbyI7fjN6yxWNmhwCTgDnu/p2yblyHNJFAqm3JkiX079+fdevWMXv27LKKjki9CnsiwThg\nT+B5M3vbzF7IvZYCs4DeuWukziW1BRcn1113HevWrSu7lQPKX5ylOXdBHg5dBgwCpgKdyc5WOxjY\nDrgDGJS7RkTacNxxxzFo0CCuuuqqqEMRqYmyu9c+9cVm7YBdc29XuPum3PH93H1OCPFFSt1rUgvu\nTvZ5a5FkCHXttRI/8G13j/00HBUdEZHyhT2mg5mdaGZ3mtnDZvbYFq/Hye61I3Uuzf3KSaD8xVea\nc1f2czpmdjFwE9lp0e8C6/NcFqiYiYhIsgWZMj0fuB24yd3zFRztpyNSxMyZMzn88MPp2rVr1KGI\nVEXY++msALoX+21sZg3uninrxnVIRUfCtnTpUvr160enTp2YP38+3bqpJ1qSJ+wxnVeBtnaWUvda\nDKS5XzkqN9xwA2vXruWoo46quOAof/GV5twFKQ4/AKaY2YFFrpkeMB6RxFq2bBm33norgJ7LkdQK\n0r3WDHQhO0NtNdnJBJtaXwL0dvcOYQUZFXWvSZh++MMfctNNN3HiiSfy29/+NupwRKqmWPdakFWm\newFPky0uhcR+EkGLxsZGGhoaErtAn9TG+++/r1aOJF4mk2mz6zBIS6fNmWmavRYPmUxGxbSG/vrX\nv/Loo48yZsyYUO6n/MVX0nMXdkunlA3ajg1wX5FEO+ywwzjssMOiDkMkUhUvg2Nmh7v7syHFU1eS\n3tIREamGqq69lpSutHxUdEREyhf62muSDGl+ViAJlL/4SnPuVHREquSdd95h1KhRvPXWW1GHIlI3\n1L1WhLrXpBKXXnopN9xwg57LkdSp9pjOl9396YpuUqdUdCSoFStW0KdPH1avXs3zzz/PIYccEnVI\nIjVT1TGdpBacNEhzv3K13XjjjaxevZrjjz++agVH+YuvNOdOYzoiIVuxYgW33HILAOPHj484GpH6\nUpXtqpNC3WsSxIwZM/j2t7/Ncccdxx/+8IeowxGpuaqO6ZQYwN7uPrfqHxQyFR0Jat68eWzatIl9\n9tkn6lBEaq4entM5s0afI2VIc79ytQ0cOLDqBUf5i6805y7I2mtbMbOpQN8il3wOGBvGZ4mISHyF\n0r1mZv3JFpVp5N/y4F/d/fiKP6jG1L0mIlK+sFeZ3oq7LzCzF9z9iQIBDAzjc0TqlbtjVmyLKRGB\nEMd03P2WIuduC+tzJDxp7lcO27hx4xg+fDhz59ZuvozyF19pzl0oRcfMjjazoWam534kdVauXMmk\nSZO47777eO+996IOR6SuhTZl2sy+AXwfeBW4093nhHLjCGlMR0px5ZVXMnHiRIYMGcLMmTOjDkck\ncqFMmTazg4udd/eHgBOBgcDssiKsY42NjaluCktxK1euZPLkyYBWHxDJZDI0NjYWvabklo6Z3ePu\np5VwXTfgLXfvXNKN61jSWzpJ36e9FsaOHcu//du/ccwxx/Dwww/X9LOVv/hKeu7Cejh0t1IucveV\ngBYBlVTo0KEDnTt3VitHpETltHQ2AU8AfwIeB/7q7hsLXDvd3U8PLcqIJL2lI+H44IMP6Nq1a9Rh\niNSNsJ7T+Yhsa+fq3PtVZvYU2QL0GPBCq9/Qm4IGKxI3KjgipSune+1hd98f6AWcAcwA9gGuBZ4D\n3jOzB83sYmCv0COV0GmCRLwpf/GV5tyV09K5DsDdlwH35F6Y2V7A4NzrKOAbgPqkRERkK6FvbWBm\n+wK/c/d9Q71xBDSmI601NTUxefJk/v73v/OZz3yGUaNGMXTo0KjDEqk7VV97rTV3f93MXgr7viJR\nampqYvTo0SxYsGDzsXnz5gGo8IiUoVrL1lxVpftKiNLcr1yuyZMnf6rgADQ3N3PzzTdHFJHyF2dp\nzl1Vik4cdwkVKWbdunV5j69du7bGkYjEmxboTLEkPxEdto4dO+Y93qlTpxpH8g/KX3ylOXcqOiIl\nGDVqFP379//Usf79+zNy5MiIIhKJp9AnEkh8JH39pzC1TBa4+eabWbt2LZ06dWLkyJGRTiJQ/uIr\nzblT0REp0dChQzVTTaRCoT+nkyR6TkdEpHxhrTItIiJSERWdFEvzswJJoPzFV5pzp6IjIiI1ozGd\nIjSmIyJSPo3piIhIXVDRSbE09ysngfIXX2nOnYqOiIjUjMZ0itCYjohI+TSmU4CZ/auZbYo6DhGR\ntEht0TGzA4AGUry1dpr7lZNA+YuvNOculUXHzDoAVwNXAHmbgCIiEr66HtMxs57AncAx7h5agTSz\nnwB/AhYBCwvdW2M6IiLli+WYjpmdDDwF9KFIF5iZdTez6Wb2eu51n5nt3ur8KDObl3t91cy+DHR2\n90y1vwcREfm0ui06wA+BwcCzFOgCM7Ntgf8hu0XD/rnXx8DjZrY9gLtPdveBudejwAnATmZ2K/CT\n3H2mmNkp1f6G6k2a+5WTQPmLrzTnrp6LzpHuvqiNa84CPgdc5u6b3H0TcBnQD7gg3xe4++Xufo67\nXwCMzR270N3vDy/0eHjppZeiDkEqoPzFV5pzV7dFp8TBlG8Cb7YuTu6+HHgtd64gM/sK0Ai4md1s\nZp8LHm08ffDBB1GHIBVQ/uIrzbmr26JTogOB5jzHF5FtARXk7k+4+9nu3t7dR7r77EqDKafJXMq1\nxa4pdK7c4/Ug7NiC3K+WuSt2Pm75q4fclft11frZK3SuXnMH0eQv7kVnF+CjPMc/BDqbWcdaBlMP\n/8cv5/iiRYvajKEW6uEXVxyLTj3krx5yV+7X1UPRqYfcQTT5q+sp0wBmNg04M9+0ZjNbB8x093/Z\n4vivgNOA7dx9XQWfXd//OCIidarQlOltah1IyN4FdshzfEfg40oKDhT+RxMRkWDi3r32MtA3z/G+\nQMVjNCIiEq64FJ1C3Vz/BexlZnu1HDCz3YB9gQdqEZiIiJQu7mM6HYDngTnA6WSL0x3Al4GD3X11\nDUNNLDP7GdluzPeBg4A73X16tFFJKcxsZ+BGYBXZn49+wCXuPi/SwCS16ralk1sloJns8zZuZs1m\ntjBXaABw9w3A0cBGss/mvAZ0AQar4IRqvbuf5+7/CowBbjezuv3/jnzKHsBqdx/l7qOBh4GpEcck\nZTCzDmZ2mZmtMrM9o46nUnXf0pH6YmZnAqPc/dCoY5HymdlQ4GZ37xd1LFIaM/sBMAt4Bujj7osj\nDqki+ms1Qcysp5nNrMbGdGZ2oJnNAEYBw8K+v1Q3f618A7iliveXkLn7Le7+16jjCIuKTkJUaVXu\nwS3H3f1ldx8OXAT8OTdWICGpdv5y54YCXdz9pip9G6lWoz8aYk9FJzmqsSr3Y2bWruVc7vxfgTXA\nP1f1u0mfquSv1dcOJdvKGVHV7yKlavFHQ1Ko6CRHVVblBvYEbm95Y2bdgB7AgoojltaqlT/MbBhw\ntLt/393dzCaFFbRsVtU/GpJERSchqrgq90rAzOxOM/t34G5gdBgLpMo/VCt/ZnYgcA8w3MyWmtlS\n4PzKI5YtVO2Phi3EfpWUuC+DI+U5EHg9z/FFZP9K24q7fwScWsWYpHRB8vcy0CHfOQlPJX80mFnL\nHw035vsiM/snYDjZbrtGM/uduz9YedTRUNFJlzZX5a50vTqpKuUv3sr+owHA3Z8EngRGVies2lL3\nWrrooax4U/7ira62YomKik66VHVVbqk65S/e9EcDKjppo1W54035izf90YCKTlJpVe54U/6SSX80\noKKTVIWmVU4j+3/u68ysfW7RzmuBhcCtNYpN2qb8xZv+aChCRSchtCp3vCl/iaI/GorQKtMiIhUy\nsynAcWRnqHUGFpNt8eyT+2Oh5bruwE+BQ3PnZwMXu/uSmgcdERUdERGpGXWviYhIzajoiIhIzajo\niIhIzajoiIhIzajoiIhIzajoiIhIzajoiIhIzajoiIhIzajoiIhIzajoiIhIzajoiIhIzajoiMSA\nme1lZivMbO8Srt3PzL5ai7hEyqWiIxIPVwI7A/9WwrXXAydVNxyRYFR0ROqcmR0AvAPcB3zTzA4t\ncm074AjgsRqFJ1IWbW0gUufM7E5gNNCd7MZtf3b3rxW49mDgeWA3d3+3dlGKlEYtHZE6ZmZHAC+7\n+4fuPh+4DRhsZkdvcd3JZnY3cBewAvipmf1H7SMWKU4tHZE6ZmbTgXPcfX3u/W7AfOANd9+qm83M\nfge85e4jaxupSGnU0hGpU2b2DeDhloID4O7LyW53/AUzG77F9e2BrwBP1DRQkTKopSNSh3ITAu52\n99PznNsBWAC8D+zv7htzx78IPAv0cPd3ahmvSKnU0hGpT2cA0/OdcPePyE6dHgic1+rUYLLdbio4\nUrdUdETqjJltCwx29z8WuWwKsAi4ysw65Y4NJte1Zmbbmtm4qgYqEsA2UQcgIlu5AHAzu7iN6+YA\nx5GdTn0d0AP4fe7cxcDdVYtQJCCN6YjUkVyr5U1g1xK/xIEPgL2AbwDfBl4E/uTuf6lKkCIVUNER\nEZGa0ZiOiIjUjIqOiIjUjIqOiIjUjIqOiIjUjIqOiIjUjIqOiIjUjIqOiIjUjIqOiIjUjIqOiIjU\nzP8H50NbGbioopAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot using the matplotlib function loglog()\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel(r'$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.xlim(1e-4,1)\n", + "pyplot.ylim(1e-4,1)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='--', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking good! The difference relative to our fine-grid solution is decreasing with the mesh size at a faster rate than in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), but *how much faster?* When we computed the observed order of convergence with Euler's method, we got a value close to 1—it's a first-order method. Can you guess what we'll get now with RK2?\n", + "\n", + "To compute the observed order of convergence, we use three grid resolutions that are refined at a constant rate, in this case $r=2$. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 1.983\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " ### call rk2_step() ###\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Probably you're not too surprised to see that the observed order of convergence is close to $2$. Because we used a second-order method! This means that the numerical solution is converging with the grid resolution twice as fast compared with Euler's method in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), or in other words, the error scales as ${\\mathcal O}(\\Delta t^2)$. That is a lot faster! However, we are paying a price here: second-order Runge-Kutta requires more computations per iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How much longer does it take to get the solution with RK2, compared to Euler's method? Run the same solution (same time grid, same parameters), but find a way to *time* the calculation with Python, and compare the runtimes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multi-step methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The screencast *\"Euler's method is a first-order method\"* motivated graphically an idea to get increased accuracy: using intermediate points between $u_{n}$ and $u_{n+1}$ and evaluating the right-hand side of the differential equation at those intermediate points. The idea is to somehow get a better approximation using more data from the function $f(u)$.\n", + "\n", + "Another way to bring more information about $f(u)$ into the numerical solution is to look at time data $t\\lt t_{n}$. For example, we can involve in the calculation of the solution $u_{n+1}$ the known solution at $u_{n-1}$, in addition to $u_{n}$. Schemes that use this idea are called _multi-step methods_.\n", + "\n", + "\n", + "A classical multi-step method achieves second order by applying a _centered difference_ approximation of the derivative $u'$:\n", + "\n", + "$$ u'(t) \\approx \\frac{u_{n+1} - u_{n-1}}{2\\Delta t}.$$\n", + "\n", + "Isolate the future value of the solution $u_{n+1}$ and apply the differential equation $u'=f(u)$, to get the following formula for this method:\n", + "\n", + "$$ u_{n+1} = u_{n-1} + 2\\Delta t \\, f(u_n),$$\n", + "\n", + "This scheme is known as the **leapfrog method**. Notice that it is using the right-hand side of the differential equation, $f(u)$, evaluated at the _midpoint_ between $u_{n-1}$ and $u_{n+1}$, where the time interval between these two solutions is $2\\Delta t$. Why is it called \"leapfrog\"? If you imagine for a moment all of the _even_ indices $n$ of the numerical solution, you notice that these solution values are computed using the slope estimated from _odd_ values $n$, and vice-versa.\n", + "\n", + "Let's define a function that computes the numerical solution using the leapfrog method:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def leapfrog_step(unm1, u, f, dt):\n", + " \"\"\"Returns the solution time-step n+1) using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " unm1 : array of float\n", + " solution at time-step n-1.\n", + " u : array of float\n", + " solution at time-step n.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at time-step n+1.\n", + " \"\"\"\n", + " return unm1 + 2.0*dt*f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But wait ... what will we do at the _initial_ time step, when we don't have information for $u_{n-1}$? This is an issue with all multi-step methods: we say that they are _not self-starting_. In the first time step, we need to use another method to get the first \"kick\"—either Euler's method or 2nd-order Runge Kutta could do: let's use RK2, since it's also second order.\n", + "\n", + "For this calculation, we are going to re-enter the model parameters in the code cell below, so that later on we can experiment here using the leapfrog method and different starting values. At the end of this notebook, we'll give you some other model parameters to try that will create a very interesting situation!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude\n", + "\n", + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# set initial conditions\n", + "u_leapfrog = numpy.empty((N, 4))\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_leapfrog[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "# first step using RK2\n", + "u_leapfrog[1] = rk2_step(u_leapfrog[0], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the required information to loop in time using the leapfrog method. The code cell below calls the leapfrog function for each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for loop to call the function leapfrog_step()\n", + "for n in range(1,N-1):\n", + " \n", + " u_leapfrog[n+1] = leapfrog_step(u_leapfrog[n-1], u_leapfrog[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we extract from the solution array the information about the glider's position in time and find where it reaches the ground." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider position in time\n", + "x_leapfrog = u_leapfrog[:,2]\n", + "y_leapfrog = u_leapfrog[:,3]\n", + "\n", + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_leapfrog = numpy.where(y_leapfrog<0.0)[0]\n", + "\n", + "if len(idx_negative_leapfrog)==0:\n", + " idx_ground_leapfrog = N-1\n", + " print ('The glider has not reached the ground yet!')\n", + "else:\n", + " idx_ground_leapfrog = idx_negative_leapfrog[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the glider's trajectory with both the leapfrog and RK2 methods, we find that the solutions are very close to each other now: we don't see the differences that were apparent when we compared Euler's method and RK2." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nz6bl5ZdTu3btDKbcO/nLlrHoxBMpW7069WbMgAMO8B1JpMTQiVMhFaYeE2WJLxNZKlasmNAJVCXt\ndUlUmLKUZGaGVaoEL7/MotataTtoEPuMHOk71i7t2LGDhfPmwQMPkHPyyaw85xzm3XtvZAvUqP+e\naHwlg4pUEQ8uv/xyAF544QU2bNjgOY1IMZix/003sWr0aCrVqQPAokWLWLp0qedg/2vx55+z9YQT\n2DJhAsycSaUePbjgwgt9xxKR3dDhfhFPmjdvzowZM3jyySd3Fq2SXUry4f5dcc7RqlUrunfvzmWX\nXZaGZImbN28eBx10ENWqVQNg+LXXctTFF3NSs2Zec4mUZDrcL5IFrrzySgAee+wx9EeURMXmzZtp\n06YNPXv2BMDl5/P4gw+yZcuWjGd58sknue+++3Y+7vHooypQRbKIitQMClOPibLEl8ksF1xwAbVr\n12bBggW8//77XrPsibJIoipUqMDdd99NqVKlAPho6FC63HorZQcNgm+/Zfv27Wn7o2zJ4sW82LMn\nDBoEwB133LHL651GfR5pfNkt6uNLlIpUEU/Kli3LFVdcAcCjjz7qOY1IelRq2ZIlw4Zha9bAUUex\nqmlThrVtC+vXF/tr79ixg1defhlmzYKbbuKIM87guJEjWVe5MgC1a9fm3nvvLfb3ERE/1JMq4tH3\n33/PwQcfzLZt21i2bBmHH36470iSBPWkJumnn3iyQwfO3rqVOtdeC927c+ONN9KoUSO6desGwKxZ\nszjooIOoWbMmACtWrKBGjRpUjhWegwcP5oorrqBy5co455hdrhyN69ShTJcucOGFvL9mDc1btKBc\nuXKpzS4iKaGeVJEsccABB9ClSxecczz22GO+44ik13770WfGDA749FPo3h2AadOmkZubu/Mpq889\nFzvrLOjaFS6+mJUnncSmDh3giy8AePPNN/n000+B4M3us1tuYdGbb8K990KTJrQ5/XQVqCIRoSI1\ng8LUY6Is8fnIcs011wDw3HPPsb7QIdCS/rrsSpiySPJycnIoXbr0zscTJkygWaGTmb5o3ZqtffpA\nhw7QqROLjz6anzp02Hk90xtuuGHnXlaAy+++m8Z7cUOMqM8jjS+7RX18iSq956eISDodd9xxtGzZ\nkmnTpjF8+HCuvvpq35FEMqborUhvKXJDgCu6dPmfx+eee27aM4lIOKgnVSQExowZwwUXXMARRxzB\n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\nB0lEQVTo/D9EAVodDt65OwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(11,8))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls='-', lw=2)\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_leapfrog[idx_ground_leapfrog-1]), fontsize=18);\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls=':', lw=2)\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about the observed order of convergence? We'll repeat the process we have used before, with a grid-refinement ratio $r=2$ ... here we go:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 2.186\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " u[1] = rk2_step(u[0], f, dt)\n", + " for n in range(1, N-1):\n", + " u[n+1] = leapfrog_step(u[n-1], u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical evidence that our calculation with the leapfrog method indeed exhibits second-order convergence, i.e., the method is ${\\mathcal O}(\\Delta t^2)$. _The leapfrog method is a second-order method_. Good job!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### But chew on this ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go back to the cell that re-enters the model parameters, just above the leapfrog-method time loop, and change the following: the initial height `y0` to 25, and the final time `T` to 36. Now re-run the leapfrog calculation and the two code cells below that, which extract the glider's position and plot it.\n", + "\n", + "_What is going on?_\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tobies, R. \"Iris Runge: A life at the crossroads of mathematics, science and industry,\" Springer Basel, 1st ed. (2012). [Read on Google books, page 73](http://books.google.com/books?id=EDm0eQqFUQ4C&lpg=PA73&dq=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&pg=PA73#v=onepage&q=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&f=false)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/01_01_Phugoid_Theory.ipynb b/lecture_22/01_phugoid/01_01_Phugoid_Theory.ipynb new file mode 100644 index 0000000..2d67c76 --- /dev/null +++ b/lecture_22/01_phugoid/01_01_Phugoid_Theory.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, C. Cooper, G.F. Forsyth, A. Krishnan." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Motion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome to [**\"Practical Numerical Methods with Python!\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) This course is a collaborative, online, open education project, where we aim to give a foundation in scientific computing. The focus is on numerical solution of problems modeled by ordinary and partial differential equations.\n", + "\n", + "This IPython Notebook introduces the problem we'll be studying in the **first module** of the course: the _phugoid model of glider flight_. We'll start with some background, explaining the physics, and working out the mathematical model. \n", + "\n", + "First, we'll look at an idealized motion where there is no drag, resulting in a simple harmonic motion. We can plot some interesting trajectories that will pique your imagination. In the next notebook, you'll learn to numerically integrate the differential equation using Euler's method. But hang on ... first things first. \n", + "\n", + "The term \"phugoid\" is used in aeronautics to refer to a motion pattern where an aircraft oscillates up and down —nose-up and climb, then nose-down and descend— around an equilibrium trajectory. The aircraft oscillates in altitude, speed and pitch, with only small (neglected) variations in the angle of attack, as it repeatedly exchanges kinetic and potential energy.\n", + "\n", + "A low-amplitude phugoid motion can be just a nuisance, as the aircraft does not exceed the stall angle of attack and nothing bad happens. But the mode can also be unstable leading to a stall or even a loop!\n", + "\n", + "Look at this video showing a Cessna single-engine airplane in phugoid motion:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz\nODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj\nY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED\nEQH/xAAaAAACAwEBAAAAAAAAAAAAAAACAwABBAUG/8QAQBAAAgIBAwEDCAgFBAIDAQEBAQIAAxEE\nEiExE0FRBRQiMmFxgZEjQlJTcpKhsRUzYsHRBkOC4SRjovDxNMIW/8QAGQEBAQEBAQEAAAAAAAAA\nAAAAAAECAwQF/8QAKBEBAAIBBAICAQQDAQAAAAAAAAERAgMSMVETIUFhBCJSgaEyYnEU/9oADAMB\nAAIRAxEAPwBlFdfYp9GnqjuEcKqvu0/KJKax2Nf4R+0PYRPpxEU8coKaj/tp8oa01/dp8oPIlhyI\nqCzeyr+6r/KJfY0/cp+UQFsEMWCZ2ra+yp+7T8oliuof7SflkyDB57o2wWaqUfdp+UQxXQf9tPyi\nZt57xJvPuk2ltfYUn/bT8ok7Cn7pPyiZO1Yd8IXtG0to7CodKk/KJDVWf9tPyiKF5MMOTJtLEtVQ\n/wBqv8olGmvORUn5RJuMm4xULYjXSRg1Jn8IgCmjPNSflEvcZecxUFgfT6furT8ok7Cnb/Lr/KIR\nJlFj4RSWUdPVn+Un5RJ2FQ/20/KIRfxEE2CWi1dnV91X+USdjT92n5RL3r3S+090UWX2NP3SflEr\nsqvu0/KI4FD1/SUwTuYy1BZRqq+6T8ogNp6T/tp+URpU9xEEhx3RUJZLaav7tPyiLOnr+7X5TTk+\nEHM0WzHTp92v5RKFNf3a/lmk+6TEIQKqe+tPkIxaqs/yk+Qh9lmEtWIqF9qFFP3afljFop+7T8ol\npXHKoHSZmlL83p7qk/KJR09XdUn5RNG2Q5EgStNXfWn5RD83p+6T8olk5lB8SUWIU1D/AGk/KIa1\n1fdJ+USltHfGKymSltBVV90n5RC7Kr7pPyiECJczRYOwp+6T8ok83q+6T8ohyRRYOwq+6T8ok7Cn\n7pPyiMzKigs0VfdJ+USjRT90n5RG5lEiKCeyo+6T8oldjV90n5RGnEA++WiwGqr7qv8AKJR09P3a\nflELMmT4S0gOwo+5T8olnTUEfy6x/wARLJlFhLQW2mqHStPyiCaKvuk/KIzMm7MUWzmir7pPyiKv\npq7Cz6NPVP1RNbCI1A+gs/Cf2l+CyaR9DX+EftCiKd3Yp+ERgYzccMyLmWIO+QtKD4liKzL3SB4f\nHhC3CZtxg7jFFtRIgNtiCxgkmKDyJURuPjLDmWkaFMchmRbDGLZJMLbWrHxhZJ8JmFkMOPGZpbPz\njrBLCAHl7pKUWZROJW6UWB6wiExbMO+Edp74DLnvE1AHIlEyFJNhHfKitxErtJe0yikCdrCFkDs/\nbBIxAbuzIYnMm+UN4lQM5l5gMDEQu09kWphYHWQMW0juhiwmZ5N4EUNXaGUbJn7QSBxJS2aXlhgY\nvIMNVHjAMYjVEWq4jF4mVNWGIsMJe4TIOTEDePGTcYoHKzALwDaRFBpMWxPjAN0HtZaBFmEm4yt2\nZWZRe72Qd0hOIOT4yoYLD7JRYHrFHMHMUGnHdKzA3SbooHkxV5PYWfhP7Sy8VfYOws5+qf2iY9EK\nodDTXyPVH7RnomYqT9CnH1RC3Dwmoj0ky0lEMo1jxiO098LtMd8tJY+zk2kd0Htj4ydrAuTMrtR4\nSt6+ECy48IJeQskr0PGBRMrMvA7jKwfZKClgxeSO6XuPhAcGMIPM+8yb5KGkWe2UbiIjtJC+YoNb\nUGB5wYskeEHIloO7b2yG72xBIlcRQf2n9Rl9q46NM/EmTFDULz3rmWL1mTJk3GKG3tQZN4Mx7pN8\nUNZAMEqJn3++TtG8YoOwRKLGK7VpO0MUGGwiV2reMDtPZJvHhKC7U+Mm/MDgywBAYG9sMNFACHkS\nBytGq0yhhCFklDYrww8xC2WbfbM0ttvae2UbR4zCXPjBLHxjaW3dqJO2mHcfGTe3jLtLbe39krzg\nd4mPeZO0MUW2duh6y9yHoZi3SbvAxtLbQR4wt0xCw+MvtGii2veIJcTN20naiKLPNgMHcPGILgyu\nD3xRbRkeMFiPGZyPbBOR3mWks8uo6xV9q9i/4TF5MC3+U/4TEx6IXUD2KfhEPElQ+hT8Ih4iOCS8\nSYjMSYlQvEmIwKWOAMxnYN7PnFjPiTEa1bL1EHEAMSYh4kxACTmHiTEAcyZhYkxKB48JOIWJMSAZ\nMwsSYgBJiHiTEoXiTEZiTEBeJMQ8SYgBiTEPEmIAYkxDxJiAGJMQ8SYgBiTEPEmIAYkxDxJiAGJe\nIWJMQKxJCxJiQViViFiXiAOD4y8QsSdIVUmJeZeYA4kl5kzAqVC+EnwgDiVDxJiAMkLEmIQMmIWJ\nMQBxJiXJArEmJckCsRd38l/wmNgXD6F/wmSeFgdI+hT8Ih4l0j6Cv8Ih4kjhJLxJiMxJiUQMFGBK\n3mXiTECb8jB6RZXBh7ZeIC8SYh7ZNsAMSYh7ZeICsSYjcSsQF7ZNsZtk2wF7ZMRm2XtEBW2TbG7R\nK2wF7ZNsZtk2wF7ZNsZiTEBe2TbGYkxAXiTEZiTEWF4kxGYkxFheJMRmJMRYXiTEZiTEWF4kxGYk\nxFhe2XiHtk2xYDEmIe2TbFgMSYh7ZNsAMSYh7ZMRYDEmIe2TbFgMSYh7ZNsWAxJiHtk2wAxJiMxJ\niAvEmIzEmIC8SYjMSYgLxJiMxJiLC8QLh9C/4TH4gXD6Cz8JknggdA+gr/CP2jMQaR9BX+EftDxJ\nHCyHEmIWJMSoHEmIWJMQBxJthYl4gBtkxCxJAHEmIUkAdsm2FJAHbJthSYgDtjEpLdBM+p1I0qq7\nVlgTjg4j6fLWlordwjs4QsFI6nuE456sY+nfS093K3qK9RF4ms6qvWaau5ABuXkDuPeJnI5m8Mpm\nLZ1MYxn0DbJthYkxNuQdsm2FJAHbJthSQB2ybYUkAdsm2FJAHbJthSQB2ybYUkAdsm2FJAHbJthS\nQB2ybYUkAdsm2FJAHbJthSQB2ybYUkAdsm2FJAHEmIUkAdsm2FJiAO2TEPErEAcSYhYkxAHEvEvE\nmIFYi7x9BZ+E/tG4gXD6Cz8J/aSeFgdH8iv8I/aHBoH0Ff4R+0ZiSOCQ4kxCxJiVA4kxCxJiLA4k\nxCxJiAOJMQsSRYHEmIUkWBxJiFJFgcSYl4kgYPK4zo/cwM4tfqsPEmd3ysP/AAW94nBBCsc9OJ5N\nb/J6tL/F1PId/FunJ6HcP7zqzzWlt8219VnRSdre4z02J20srxcdSKlWJMS5J1c1YkxLkgViTEuS\nBWJMS5IFYkxLkgViTEuSBWJMS5IFYkxLkgViTEuSBWJMS5IFYkxLkgViTEuSBWJMS5MQKxJiFJFg\ncSYhSRYHEmIUmIsDiTELEmIA4kxCxJiLA4kxCxJiAMC/+RZ+E/tG4i7x9BZ+E/tJPCwOj+RX+Eft\nDg0D6Cv8I/aMxJBPIZIWJMQBkhYkxAHEmIWJMQBxJiFiTEAcSYhYkxAHEmIWJMQBxJiFiVAxeVeP\nJ1vw/cTzdnRvwz03lQA+Tr93cuflPNjkrPNrcu+lwq8bqlYd4zPS+TrvOdDVZ34wfeJ5+1B2eB3T\nf/py/Ha6dj37hLpT7o1Y9O3iTEuSehwViTEvEmIFYkxLxJiBWJMS8SYgViTEvEmIFYkxLxJiBWJM\nS8SYgViTEvEmIFYkxLxJiBWJMS8SQKxJiXJArEmJckCsSYly8QBxJiFiTEAcSYhYkxAHEmIWJMQB\nxJiFiTEAZIWJMQBkhYkxAGBf/Is/Cf2jcRd4+gs/Cf2iSORUf/z1/hH7RmJNOmdPX+EftGbJmGpg\nvEmIzZK2GW0oGJMQ9smw+EAMSYh7SO6ViAOJMQsSmetTh3A95gViTEYArD0efdJsPhJcFSlVIsyd\n2AOoxHeZoRy5z7pn9Jc7Dtac5dbc+tQW6TUnYSPRZlQ+/jB985ak5RPp0wiJj27I0y59XPvaMGnT\n7C/mMyHVKeH0F/Het/8A3CHlDTKvpaLVD/5H95ynf9ukRiLV6FNVob6gMFlOAvUGeGurs0hCXDGG\nADfH957geUvJ/wBanUIfajTJrLPIWtUrbY9bdCdpB+PEz7+WoiPh5gHMuupq7e1pYq/7zbZ5PoqJ\nOj8o0WJ9h8qf1laRtHYxqvsaq0HquGWWJmOCffLVpPKDDC6lSP6p2K6hdXvpsRx7DzOcvky7buoZ\nL1/oPPyMLTp2NmGL6V/EggfETpGrbnOm3NW6Y3jEGPXfXQRq99inkWqNw/SZkvptI7I2OD3msqPm\nZ1xzvlznGuBSQsSYnRkMkLErocH4SCpIWJMSgZJYHOJeJAMkLEmJQMkPErEgGSGBkwxWMRZRMmI7\naAeRxKZB3RZRWJMQ8eyViAOJMQ9vslYgDiTELEmIQOJMQ8CViVQ4kxDAzJt5xIAxJiMKcQcQBxJi\nFiTEqBxJiFiTEAcSYhYkxAHEXf8AyLPwn9o7EXqB/wCPZ+E/tJKwOj/+ev8ACP2hwaB/49f4R+0O\nSFVLyZMSSiSZMmJMQJkypckCoq/TpcOeG7mHUR0kg5NyazSHcE7VB9avgj4R+l8s/RlmwQDgh1wR\nN8zaryfptX/OqBPiOD85icLbjJt0vlbQ38NtQ+3pN+NM3Q1n4ieX/gGmVNlVtyL4bsiUPIYHTV3C\ncp0p+HSNTt6rstOegSTzag/UE8mPI2oHTyg/5T/mX/C9cp9Hyg2PjM+PNd+L1XmlB+r+sF9Bp3Uq\nyZUjBBM8sdD5WU+hrgR7WI/tL7Dy2nTVq3ub/qNuZeDqt/pTya1hcC5M9y2HEW/+j/Jzg4e9W+0G\n/wCpz8+XkGRcG9gYSec/6hUZ6/Ff8ybcl3Yutpv9O16Ujs9ZqeOmSP8AE6Sadwuy2wXJ4Os8ld5c\n8saUjtxtz0yvWAP9V64dWq+UzMStw9immWo/RegveoPB+ETboFZi1YCMfA8GeXH+rNaOq1mGP9W6\nr7quSLjgmp5eh8ws+0so6G3+n5zgj/V2p79OnzhD/WF3fpk+c6eTNnZi7nmNv9PziNTorx2RrXcR\nYM47l7zOYP8AWD9+lX80If6wPfpB+aPJmbMXa8ws+0srzGzxE4J/1PUbxedEwsAxkWEce6OH+sk7\n9IfzR5MzZi6Gq0moUVGpCxFgzg9B3maPMbMdROOn+p9VcS1Onq2d27Of3gD/AFVqScCmjPx/zG/N\nNuLtjQv9oS/MG+2PlOH/AP8AVarOOwq/X/MB/wDUbXV51WhJCsNuwshBjfqdrtweg8wb7Yljyee9\n/wBJxx/qm9gCnk6wjx5/xKP+p9X3eTX+IP8AiTfqG3B2v4f/AF/pJ5h/WflOGn+p9baAa/J+4HoQ\nCcyrP9R+Uq1y2g2DxIMbs+1rF3vMf6jLOhXHUzzy/wCoPK9oBr0XB6HacSj5W/1E9hC6RFXx4H7m\nP1n6HoxolA9YyeYp4mcHzzy+4/2U9hxK3eXWxnV1L447v0jbml4O8dAvc5EBvJ5+q4PvE4nm/lRz\n6XlIgexZQ0GrI9PyleT7OJuI1IZmcJdWzT3J1XI9kTMP8L3Y36zVN4+nNVFC6eoVoWIHexyZ2x3f\nLnlXwZJLxJNsqklyYgVJLxJiBUkuSBUkvEmIFSS8SYgVF3/yLPwn9o3EC/8AkWfhP7SSQxU+UQKK\nx2R9Ud8P+Ij7o/OZKdRpOxTKfVEM6nReB+c4b57a/iWj+I+FR+cn8Q/9RmbzrRe35yvOdEfrN85N\n89n8S1fxA/dH5yefn7o/OZPONH9tvmJO30h+u8b8u19dS1+fn7o/OT+IH7r9Zk7XSfbshb9KfrvG\n/Ls9dNH8QP3P6yfxA/dfrEBtN9poQOm8Wjfl2XHUnfxA/dfrJ5+fuv1id2m+00LdpftH9Y3Zdpcd\nSZ5+fux85PPz92PnAB0mPW/eEBpfFfiZq8u034x8Sn8QP3Y/NL/iB+7/AFlivTnoF+cLzen7Al/X\n2z5cOgfxA/d/rL8/P3f6wvN6fsCX2NX2RFZ9p5sOi/4j/R+sr+I/0RnZVfYWTsqfu1+UtZdp5sei\nbdWlyFLKQynuInD1nk9clq1JXw7xPSbE+wPlKKDuVR8JmcZnmVjXiPh4tqnTp6Q8IKNhsrwe8Geo\n1fkxb8shCWe7gzh6rSNU+y5MHuPjMTExy74Z45cE9qQMnlf2gPWLPSrYe6Q1unqncPAwdo9ZMqR1\nEzToNa18TkeMtEHrc5gi1h64z7RDRw3qn4GSlsduq/8ACrrIBY/W7xiL09hUq7c7WBizWwZcj0RH\nNyDjpICoY2o7ZO5W3Rnk3BsbocCYaLuzuAPRvRM0Bmou3L1msUl0rkUAFVwczs0ahvN09EEhQefd\nPMmy6x9+T8Ok6Gk8oWoypfu2dMgdJuJYmPTr+ev92JPPX+7ESKXYZW0keOZHqKLua0zV5OO7G6Wl\n506gLVsQcBcnEBrLLrhZbXlB0XnEX1AJYnwhiw/bMz7lqcojho89s+6/eUfKDDrXBUbhkWCXkDvE\n3c9sTl9L/iDfdSfxE/dQdy+Ik3jxEtz2m/6F/EW+6Mn8S/8ASYO4eyCXx3iS57Xd9D/iX/pMn8S/\n9J+cDtPaso2e1fnFz2u76OHlD/1H5y/Px92Zla5UGSyD4yu2Qru3JiLns3fTZ5+v2G+Unny/YMxd\nun20ldtXn10i57N303HXKPqGQa4HohmHzhAfXWV50o6OB8Zbnsv6dDz3/wBZk89/oM541Y+9HzhD\nUZ6WD5xc9l/Td56PsSefD7P7zB2+fr/rKN39Ub/s99OgNcD3D5yefD7I+c5+/Mresb47Knp0fPh9\nn9Yu7Wg0Wej9U9/smHevhAudexf8JjfHaxGXRFVadknoD1R3Q+yT7C/KdKjTUCivIPqj9owU0Dun\nGNHIn8rCPhyuyr+yPyydnX4H8s63Z0fZEILUOij5S+Ce2Z/Ljpx+zT7LfllCoHpW5/4zsH+gD5RL\nHVfVVJfDXyn/AKZn4YFpbupf5QxRaelB+Ue38Q7tgHsglPKR+sPnJ44+1809wEUX/cwuwv8AuR84\nBq8pn64/NB818onk2r+Yx446k8v+0HjT3Ecool+bWd+wTKdBriebV/MZP4XqG9a1f1jZ9Hk/2hq7\nAjq1cm2tettQmYeSbO+1PlCHknxtX8suyemZzxnnL+msXUL/ALtX/wB+MvzzTj/eWZB5JX77/wCM\nMeSqh1sf5TcRn05zOn20ee6f70QTr6B0JPwih5Mo+8shjydpR13n3tFZpejHaHyhX3KZXn4PSon4\nwxodKPqn8xjF0mnHSsfONup21v0epKGsY/7J/NIdYe+s/OP83pHRBL7KsdFEmzU7TyaP7WNtUD9R\n/wA0Va1dq4ep2H4p0ti/ZEm1fAR48p5lY18I4x/t523SsCTWjFfA9RMxHiOZ6zA8Jk1fk+nUZYeh\nZ9of3idKfh0x/KiZqYeZeolsoR7u6LZcH0lKnxE36nT2aZ9to9xHQxPBE5cPVFTFwQtjgdQ4hraj\nHHQ+BltSp5HB8RFtU47g4hRPpq2OcYPXM1afVX6fuDL4gTCGKnCsV9jRo1BUYdcc9RzLE0k+3Zp1\n1VgxnaT8o8HPOcjxnEzXZyp58RG0320nCtuHhO0Z4zy5ThMcOwrMpyrERdt3aWemeB3TOurVl59F\nvCDvB6mJhzpqI3QTWPb84CuyjJzt90aXGAQc5kqJc53YpSoFgGTgzSdKftGZFb0xz3zpEgLnkxGn\njLOWrnHEs/mx+2ZPNx9syW6yqrqGz7ohvKf2VHxmZx04bxy18uGjsAB1zB7ETG3lK0ngqBFNrbT1\ns4nOfH8O+Pm+W/YgPIk7Kv7InO86J62fpINSScdqPlOUx07438uj2Nf2RJ2Nf2ROf2/jaILWqf8A\nd/WSmnQOnQwTpUPef0mFbD3Wf/KMW+zuszj2y1I0+aL9o/pJ5qv2jMx1VmMbpY1ln9Mez01DTV9/\nMvzev7My+e2fZWWNc3eg+cns9NHm9f2ZfY1+Ez+fAdVHzgHyj/6ifjJ7PTX2NfhJ2FZ7plHlDPWo\niH58nepEez0adLSeqwbdNSKXwv1TA8+XuQn4wLdepqcdm3qnwl9np1aB9BXwPVH7Rm0eAiqCPN6+\nfqjv9kZkDvn0ofDnlTOidYltdQnUN8o/cJRZT1H6STfwuMx8wyt5X0y9zQD5bo7q7D8JpYUnqg+U\nHsdMetS/KYrPt13af7Wc+Wq/u2+MA+W17qSfj/1NnmumP+wvyleaaf7qStTtYy0fmJYz5b/9B/N/\n1K/jf/pA/wCZ/wATZ5jpj/tiCfJ+m+6itTtqMtDqWU+WT92v5j/iC3lpx0qU/Gaz5L0rcmo/OCfJ\nGkP1CPjJt1O13/j9Mf8AG7j/ALK/rL/jFx/21/KZp/g+l8GHxkPkmgdGcfGTbqdrv/H6Z/4vd4Jn\n3GUfK2p7hX8od/k+hAcXHPtInPt0xGSjMQO/MxlOccy64eHLjFs/i1/ivwSCfK2oI4P/AMJhWq1h\nlFdh4iX2dvg494nPfl27RpYftaj5U1RHrD8o/wASv4jqic7/ANBMwDD1g0gs59FSfjG/LtfFh01j\nW6o/7jc+6UdVqehvb5xC2ljgKPzSyxz05k3Zdr48Ojm1Gs7rX+BEHt9Yetlv5oolwcnb84LudhJO\nAOSQe6N09r48emkW6nvss/PIbtR983znHbyuQc9jhD0JPWdryY2mOmHlG5coDiuonO9h/YRcm3Ho\nsXblPaOXYdFMS1QxlSc+3EO64X2tZb6LMcnHA/aDuUcISfdJbVFEEEBpXOZbWleqNiWXLV7QcDrg\nnpLZQSA3UAxT1AY2kj2RhLAjgEewymPpL75pCDWwPK/FZA5zg4b38GaO+QqrdQDCFNqdqhSCPfzM\ni67U2azb2hWsZ4E0W1jfxkRYTHQ9evAhR6HU9vfYb7GCjgYbEdWl1ZKV6iy1Oqndzj2zPTpV3nHU\n9ZqCmseiij4xM+kqzkGoDjNj4982C+0HBvtHxxMCtnnKD3iPArboyKfYJm5NmPTQCLCd1pPxgMiD\n64+Jmc7qjz6fzlNWxG7ssD2NJaxjEcGNXX32fIxTVJu4Y4jOztA6L8CJW1u8fpIoOyX7f6SdmBzn\nI90q0HjCg46GJxbnw+Eo0BR4LCx4AfOLWnUOOgx7SJMPUMOV+JBkBZ64XMtW6Hb+suq5wMBlx/Sg\nhdozplQR8MQLXceiEwgjsMhGx7MxDOwbkn3GX2oxycfGAza2eePexhiv2r+aZWcn1WJ98ido3B3Y\n9kDS1YJHoq364gldo9UceEigAYNhB8CIDbwcgK3zEonQ9GhKQevEQ17qf5X6w6DYwCgY9pYSBhKd\nN4+UCwJ2bHcPVMd5ra3Is/SJu0lwrfLA8HugNTyhdtQB8LtHIUS/P7+S1xUY+yP8RCaVnqGaigAH\nJbrx1gGh1wNueM7lm9+XbHiw6abNbaOV1O4+6ANZqT1tx7hFGsgYyPfAWps+s/J5wJN2XZ48Omm3\nWOFXNhBJxnmV55Yucahx7miWqpUZdLT74sbM4WrJ8M8xuldmPRv8RvyQ1zkeO6Q6+zI+mcZ/qMEV\nLuAKFSffBtpQgqOvuPEm6TbHR/nd+P57/BjCGu1W84vcj+oxLPhdvZZHTpBzswqqB7ARLuk2Y9Ny\narUn1tWFA9sJtZd36kn2gmYSFYZcIceJz/eTgKNrAY8GEbsu02YdNNl9jAHtmOf6iYvKYzZazf0j\nrMwvUksGAA9biS22scM5BPfiLtYxxj4b8aJRuGT7G5lBkf0hWFHdjPPwmJ02plkP/EQldgPRQ/vI\n0abHJOSoH9IhgoCGFh9hiDbfn0VUStjWHLvg+6BsNqEesfeRAbaTtY/pElK1wBcCd2CAvT3xzV1L\ngC+pmHIyp/zADFaHKlVPTjjMApvfO1vfmVZawP8AMX/iDAxY3pBvmYGjoQAo+cVqaWtqdEOCVIxm\nCu5cnOCesNcuOSc+Of8AqB5+2wdmEwQwPII6TreS62TRZY4DNuHPdHnR1s25uzLe1Mn9pS17uBYC\nB4YEWGYBbO6WCp3DcTjwghCCfSQ+9hBCKpLGxQe/GID1VGGSrSmUH1QxHyiHvReO0LGCNQPqiQPC\nL3r8zF6jT2Pg0siEePQyxq+MFWJ/SDktnAKg9e+FCocDDsm7vweImy9gVStMux4B4jbNiVO9jMAv\nhM6X0nW7X3IOgb2zUSlGWpZgZAB98Cqu4k7lG32dZrYrjhi3PBMpbSBh2OPYYsICPvAHEep1AIU5\nx48GNV6QPWfPujxZpccbyfaZBk+kUnO4n2KJeCeGX47TNgaouFVQQe/OQIRq29GTJ6ekIGFlwueR\n44Bi+c87vlOiqMccBj7OYTlguGpA+GIGFK7NpIbj2gSl3rwrDA/omtVU9VHzMs1U7SRYVI6wMrMu\nRnY5PguJQYhsBT8pSaiosoXO5vEAYmgV2MMoR8oCskZznn2ZiSN1u0kjjOdvEtmbeec4PU8Aw2uZ\nhtG0e3EUF7CPrL8VkTGee/wh/wA30VxnxxiX2LZ5FeIoU25ejfI5lh7cd5HujFqAOcAe4QW1wHAX\n44xFAqyT6yMT7obIGHRh/wAsRPnaMMFH+f8A1A7dfq5+MUGmkAeux8BuMsLWOvafmP8AiZu3O7HH\nPsjEscHuhT+yqOCS/s9KFsqUj0X9+YrtWP1FPwMhLd9BA9hgP3oB6LkfH/uKubNbfSMeD0Y/5ggr\nn1XH/KS7b2THB6GEBXbbYqYILAAcDke+aOQdrkZx0EXTquzpVKq1UbRjuH6wDqrdzsdgAHI//IUD\n3ODhlUQUZM7nc+icrjmUtzMC+8AHvHGJQDk5BZv/AL7YtD21h49ZgfYIpr8nP6RR25Odo+OJW4cq\nQn5QYDqW7Vh6JGO8tibWpwcsK1HiTzOaGOcAqvwGJdZyzE4w3PTGJBrfUVlhWGOT0wYtqx3Nj24E\nz5HosFUE5A9HOI01WZwK63I6lWzmA36PZkL8SR+0WbFFmOOnwkSrUqi/RsVHgpwZtp1KpT2diKGI\n4BB/xG4ZU1I3tnawOMAd0l7U2Dc9eMDvGZNQwXlNufxdJkaw/WJJPXngRY1nXhelSOVHugr5QBDV\nsvJOQVOMeyZjv8eI2u1UxlfiBJaCqsNjFuuFxk9YZ07sNxKsPDtF5iC679wBJ9sUSdxIJEqnJYar\nCoJDZ5ksu5OWbPTGZmdl3bnYsSc8nmHsVyDtye6SwSMob0s7f6esIIzNmvhfaRKesKRlSPhIFK8s\nq49uJbBcucG0nae6SwsoBVjkHOM4iWPPAx7pana2frHrA0V3K5xghm5yOINpKDhjg8+MnatUwJUe\nl055hK/aHaEY4HIHMAHavHov7srByT0249wjtlVgIY7APCEmn0+M9rnHgJBlPrHOPj3S1GD6Ocew\ndY41UDlbAx9ohIezcMCB4YAiwyqzb6K4Gf6eRKft7LMBnPdgDEofR2F8sDYfscZks1Co4PZLvz4c\nywMmuptFedjHawYgDmc60+cXItQJJ44E9KfLOtShqqqlRiPW2CA2o7YAmlFsI9JsYzLYz12VLg9O\nMZkd6e02EA88n2Qr0ryHbaMDGAYGnZVdkQgq3rKw/bmQPrq0zn115yArDB9nWONGnAepGxZjghMi\nYWAN+1lKADjHGZtW2gVAM7qfeTJSsqozBgbByTgc5IjVpRVHaHLY9XbmZ2Ia84VrEHTJx85FFt6f\nRMV8QW6/PumkON2zha69o6Y/6i82sdy0ke0MQJa9tWoR6t4znIA/xKasvWyn0CemecQq7X1GwB32\njwz/AIidru4LsQvjg4mqt6URQ6DPTPIyfGXZZps/y3J8Q+f3ktGU9ihOFD89cmaUusHq8Ljoxgjk\nYrYrnqWrBEMWtVgMC48VyAJVF2Vbrk8+IXJEjabTkfXU+wmQ7LMejj2xVmp7MsnYkjOAwJ+cC7NJ\ntHo6gE9wK/3iCl6HFmceKqTINZzkcfExqal35UXN3+iM/wBoCw1ZPrtnw5/tGLata/y7MeOWm8qV\nXcduPEkiKvocetU3wWRbYjfXnIsb3ZkBVv5dvJIBB9sd2dYxurz8AQIu4UuR2YWrHX0MZlQyqkMz\nL2jei23ivOTKNOPVtA9hGIFWnLNk2VEe/E1LpcJgWBc+BJ/vJZ7VdXSwApsK+JyIC6Cx+RcD78Sr\nltqRnZ1ZV54HMlN9dgWx2Cr9k9T8cy2GJ5Otz6V4X8PMbdpazQ6vqV9U8ZPPzExPql7QryK/xdY8\nU0W6dzTUzDBzmEc1LX7NBauV4Iz0llkIyR7yJpsW6jSIz0oFYAKSO+LG8V9s9KlG9vfIqCtWGErI\nGOvJi3Vw2X38cZwYym64ZDoh56gw2ZkBIfjwPP8AeWkJJrYHNfsBgdju8AJoTVKB6TKD7pG1S7si\n1ceGCcyBaV1gb62duOMdT8I5FtbJVWIPcywk1ue6vHd3Ql1e4jisA8DugZhobTZuzg93PSaK6aUc\nLa4NnXAziaBqAq82J8GEQ+qDW+gU2gZyRnMinix6xil2RR4RRW7UXLZ2jl04DFsYk87rZSApBHiu\nP3mZmS23KIikd7HiA/UVXbhvZmJ4zvzMnmjuQM8HPU8TRsY9Uqb3PIUszwK1A7twgZWqatsBlIHt\nzK3Nt64Mc711sSzqwx6q+MNEpeoNtOSO4wjGQx6sMeyCTxyZuNS7fo+W9plHTjvU/AwMQIOM8++P\n3qFB9D4CE1CDlvR9pMnZ0DlXOfw5/eAdGoVerKR4HMtFquzuYBvYuIjs6y49MqOpyIRSrAYXcE4O\nZARqKIzjFm04IAziM2ZVgNh/4/tFL6DbhepU84B5jFcMA/akHnKYBJlEptRTtKqPeAM/OOZ6WT1K\nh7hz+kzfRsch8N7TJTU1mVZ62bwDZxKGOa9wdMHHcWl9qpBU1ooYdQ0p9PatZ7QLtzjKjMUNNYh7\nRlJTEAnRSvFi59+JFZFVSTkgSIzIDhBgnqccRuBYu7GD8vlCj7XeoZV3AfDEz2O2846eJlOgCHaS\nSO7MZVonZNzOit7TzCEGxycEH4GEm/wwh7zmbV0CikszYA9kxMyjLBnIXgEnn4RQciVsDlHOOSQO\nP1mdw4tHZqApONwwY9SpUixnLHgjx9kCsNVWQzDax6E9IAv9GTtc7u/oJBrMn0kDY784jDWCQwVT\nnwB5/SKsOOgXkeGZasNOuIX1Rj35lDUCwAgfLmZ6hnA8TN+kfTI4rtqZieQSOYqiCld2y6DkDBLf\n/saupUrtKL795H95sC6dyB6CbuQvBOIVddFle6r0hnHAA5+MWOSy2m0OteVBzgtxH023q5K6ZefC\nHrdNqNPa7qjdmcYKnrx4RVBsVjZZW+3bwWl+BqbW6sY/8WwD+lusi6jU9m3aaMt4HbFNq61YKBuJ\n+ywOIztDn0bCfYoMwAvvSus5pZW+10mHz1ui24nVNgQEsN+PHEGuzS6nIdKBgZ5I/tKrmpqSfW2k\nwxrWRuGYe0EzbdpNEl9NXohrvVIyAPfmVf5FCNgMP+LgwhA1L7gxsZj7RKv8o2bCqN2ZP1gcQ+xO\nnGGDFOnKf3kRKXONrYxxlDgfpKpZ1tdmN4JbxBzLFzIGIBxnHK5/eaK9AOWDs6A9FXEzXUsHbD93\nQgwCVmzuTDDxAEM6hmr5yPcZjG+voawPa2P3jNttqDYATnnA7pkGn0ir9K3PcYnaUDFzgg42+I8Z\nbblGN5Bz0zjj4ysg+kzup9waUVsDE/W9mekIkVq3pKno9AYlrSrFkYsR04xG26izs22h3OPrd0IG\n/V6jU6ULbvNY5B+ELS1vbp2VFOSc7mbEpKqgKzXvLY5C85+MspUenrN0B65hWurT20gF9jezcOYF\nuSrejWnOT6RP6TMUFfWsqw7yTALVjBNW727jAJqkrDMzbcjpjGYKFduN4AMalSXgZAQeLf8A7F+b\nKbCK2LEdM4Hy5gQ2YU1Ic59ggbVZgCAGjl0rhtrLhj4CBbSos25O4HDDGMSIWDWl2GAK4564h2OC\nylU47sSdjhyCGx9oiMampSQS58NuMSgEuB3K4znvGMiOREeo9lUzDxxFrpvT2mw57sd8ZUjJ6AYp\nn7LAGFdHTV13aYhadrgd4nPuo1FaHdRxnJO2INKF22XksOceMcHIXY+4g9zsR+0DKrBmI9AeAIjq\n3Ttdtu1UK87CRDq0/aNkIVwM8j/uZlH0hDqMZ6fGEab+wrO2rUAjxUQ6tdXUrYRnJ+10gXJUdjFm\nDHjkZyPEGKauvgK2c9+YE1F63uDtNY7wOhig6L9UMB1l2LsOA4Y+Ijk0tpHhu6ZOM/OBdd2nYelW\nAfwmX9FjIpck+HH94VVTI+w1M57yuDj5QrCtLH6JjjqfCQLNDlQVo2/ieKCsrFio+YkOpXUHZX6P\n4jDallA9KvkcHOYiBLGyRuFfPcqgGPqsFI409gbvO3iKVFKBSqDP1iT/AIhUqOQQxXpxkj+0tK0P\nq9u3bVYee8YzFW3E2f8Ak766jyNh5zJcpZFwAq/0gCIspV7M4Kg90RCScmuo3YRcDpvtYn9BAfco\n3bvH0SMRNgFa7UPrdZYppHovYQSOCV6Shu1ryMElcfV7oyoad0G4hyOp5iUqUABbmGR9n/uD2Fig\nBLQOee4ftJStRpodsKQW7gDAXTJuydVWhB9WxsfpMj6cg72srYDwJ5/SEh5BKoR056RwWdau24hG\n3+Lo3H6RfYgHPAA6kPNCuqof5IJ8CBiJ7fYSLFDg/ZHT9Y5CkvsKYO3YD7Y+qxCoDBTg8kDMt7VC\neoTnwwIFNhNoQqNp6bsZltDAVDHYgI7vVB/WNqpNljMUDKo6kYjFp1NrBVowP6RtB/tG+bafTvh3\nG89wHP6QrEAxdjW4BAwQMcCaNHdSan84foeN2Rx8BF3ImnsdmVDU2BuB5+UzppkvduxsJUc4/wDp\ngo2xDbZsR6mVvV9IiFqKatOAWJOcAwEoYsAtPZ/1EHj4wrdYWqNbLz0JzIM9yorehjx6Sl1IBH0d\nfxWNNtRoChsbeOmYhqtq9p6OAcnEhLWLDZUD2KH+nGBMrhFsAFQ59hAE6LuX06kgg9OuJjRe0Zq2\nbnpjJMoXY+1VLkHHTiRb2IOXPpeHWaDo1Ws/Tj3bhMyGpAu13544MgabHK7O2YIBwGEfTfYqFcjg\ncYbrMrEDcTY+3HGeSZfZpjC2knGeDiUPY02P6RKP3+jmRkVULedOAB0GYgVbAxf1m9XLf4/vKVlQ\n7C6YJ544EgFkTUZ7PJ/qOM9YSA0v2aWN0+r/AHwYypqVAZlABOPRzKJrLN2S8txkJyc+yEDUyM3N\ni+PpiMzkeg1KHuwwixprqV3NUx/q3f26wCLGA53DrzKHsoySDkjrhusFLSyMqVbjtJy2eJl3DcRw\nfYOZZJFbbX28faiw1iCFCgL6IyOf8RZuWkdCW9vhNDoa0Rdg3FRt7v8AMQe2Z9psGfDIEKDtFtb0\nWA9hMdvoqI9Ase/PjCXRWMOWUn2An+0L+HHHJBkuERbgzbUQL/UxAEyXFhecuG/DyJpbRWBQqlcZ\n8TKXSoWKlyWXryYuAJay0AYxnociOtoXT0i1tSth6bdsEaVUG42EN45PEz3gbs+ky9+T1i4V0Uzs\n7VK1IIHUTPqLWNgVqlr3DhcTNUdhBJOe4HPH6ze7VrUpsZCwHOcHP6yjG5NvoFE44BhbF2g2uVI/\np4mp9MuosXs3UL3bRM2t0bqQjXBj78SUUm57FJrGMd45zF2Le7KxJ3dMk4jadOXRq6yinGcs2IX8\nhuzJDEdSPSEooHsqMajls5Uhhx/mRHRnDNZWFI6ZETqHa3KbcL3AgD4xbM1ahEVQMeOZBqpcLUVs\ns9M5AIOePjFNsVcIr7v6uMxSnewHO7nAEYbDTZk7X7iCeJREFYwzjB9pOJsYip0bYjv0zu4Exsza\nhgyqFA6BeZr02l+23on6pSSQJ1C53WUjk4PpRVxYYFamtD44/adDzfToMZAidQmnYjLE48AIuEtj\n7Blq3hdw72l01M49KwKMdd3OPdND2I1QqVMJ75Sdig+txLagqROzYW5cfVOc/tB7fs/QrReeOG2/\nvHFxgbXbryCOIW6o8lM/CLFVWnAXa5YZ6WiOtpYLlbbMH2DEzm3T5wace4SltVV2otjfjbA+Ql5E\nd6Wfb6du3rtEOvTBibFXqO/BxAVrSu1CEXrisYl7SqDLYX+oxQavmyDLozN9kDbj45imL6g/+NQp\nAyp9MZHzlrsJwSWP9AziVSEBZltVST0KnMoA1GgEW19RgZOcfKUHCW7UBZQOAccx+8nCBG3A+tvz\nn4R4pRs9rhGIwWY5bEkwjPUpuT0tlQ6+oef1h2aJym5GS1eo2qR+8Zpk0+m3Kqh8n1n5mp9Qli7b\nHOPYJmZacymhmJU1kN0nQp0BVRjfZ/SDAOqooswxbpxleJaeVzUfo70UexD/AIgXZXq1BCaaxF8Q\nDMrai3TVtldntI/zG6jX+dei2p4645A/WZ7FS+rY7Ar7MQhO83kDtXHGc8EfoTDsuenT9ml4Of8A\n1jPzkrorqQpW2AevtjVU1ncjYOMcS3Awq9gPIeaq66mX6QAnw3YP6xosux1EpbLFJ31q4PgBn9Yo\nRkrrx2SK3/ID+8TYlrdFUd/rj/Mfv7QArWoz4hcw7FAX0dmfAkCKgJoR1qPaFefBhmZs1O+GUbcn\nnvm/sz2QD1gH7QaJ7BCcKcH2vn+0oQ9iKEWtywA5zmJOc4AsI9mSJ1tPp6qVKgp2jdMn9hM5N3aM\nuGyOoWBk0+4WE5Y9xBHSaLbNQ9ZrViOc8AH9zM2oru39pWp5PJ25nRo11LlV1gfj7tQDIMK2OSWu\nLsy8cKAPlHmklDmlix6HAGIWt8xN4uoe0qSPQsXvHcT4GOHlXR4Q2o9ZwN4QcE+zMIxupSkixGPP\nHBECh27RQV9EDB2nnE3XeUaLX7JKHNTAclhmKXza42NbW6EdNi90kC7HFo2gWKvjxmKupBQtgW47\n92MfpF7WVgaGJG7A3YBktsIYi0tu7xwRLYSaLgMDAGMjkS+xsKEnYMrkEuJKrLQpVV4bvxnHuguz\n+mDgY+EBraixqwGuUDA6RaNWhLdorH3dYpOxasHeOnhBa0KcJj2nEitw8okDHZjA9sr+IufVQD2z\nO9qNX6IJI68Shsbq5Q46FZKhLOOtuc8Y+CxdVlvbOysQzcniGlaMMl9x7j2eRKVK1cqwbP8ASMSg\n6tUzld5yD3marNhp9IVIPEggzLo+xfU9mRjHe3GI6yitmJrtVz3DJBP6QtMlOm7VjtG4HoBLWpA4\nFiDI455AjajdkpwnjtyT+mYsVWu7deueeCZSTyWyQRhQOvdEteM4poRh47f+op31HfnHgYxX24bq\ncdIsNWxyh3aRWPcc4xAra2ty5VF/pZpfpl2cqezA5IMSSWOEUceMiCs1DOMt4eMScMQWswfdDNj7\n/Sq4AwcnAj6SFcZGxW6nqBAWtda17+0Vz3L3wg7AetWE+znmbzZSiE173HGSpCk+7iIp7VyxO6us\nfWIBzCotrpWy0kMijrsGTE+cX4BZnUHoD1mmiyktgq7nr3f4gtvsb06Vq8MENLR6Zt4Y8tmXv9s1\nV6JLh6TKjf1Db/eHR5OTtCO0LY/oOJKKYwx7gZDYw+rNOobSjUFabbN4GGAQgH490yWO75rclh14\nEUILndyuw48QIYVg3Xv4xzDqqSpd9mqCr3JWdx/wIxNdVVW3ZVAH6pPJPtlooSUM67tgQDvbOZFs\n01f1TZx44i7dUtlO92UHI+jQnn39wgA2Xoy0VpTVggkEZP8AcwejWuRzlNy9OFIMc2mDoCxKeBPf\nFaXyeWQNSjlem9+FHxmzUaemqpd9hLIOQM4PuEDJ2VanlnfPUb8Rdq0I247kJ6DeCB8JNVe+AOw7\nJSeG75l24BbYWAPBEBj6y1R2QBK9xAw2JG1ysCSpDxe9mVgckHxMMDdxtrx3DGT+khyuvWHZuZQe\nehhWaxF2AIwJ5PhiLTSizC7WDtwoAPJhWpdSGotIBXggnkf3ikNGp0juDaljHpkkSreyKq2nqZue\nfRz+0zdg4G5gGHiG5jK1sQgotg9m0zStBFKKGtDkHorIy7fZkdYfAVSXXay8YQ8eERel2w7r2cdQ\nhJwPZyYCtq2qDCywc9N/UfOAa1WEK7AYB9LjrH1cOMmoZ7mYwKX1CUvgqWYcdpnIhCmu9EttRQ6Y\nDNhv2yO+BHsrNbEV2j3txM9DUuT2ttqr3YOc/pNHb10h2e0Mz5worPHszniWld1le/sa9mMqQTn9\n4QDkqD2NYtHcOh+MJKWZQzJ35JHcIFtlJrDLpw1h+qwyP3m3s2NOwdnWD3AgYkaIZ1aroSo4wZla\n1ah6JNWePHIm0UHsggK8dTuxMWv0zBFOVwfbmRKRntu7MBvS3Z3Cae0t0+pALMVbp6U54LVKgyAP\nDEs3vwdoz4mLlG7V6u6t2Sp7NuOdrEATPpzdeu4Iu5T1YnmI34Uhsc+3kTZprT2Z2CvJ6kjmANun\nLYJrIbPQEkGL7O7YTZUAoPU9MzUpZWCbVx4BRz+ku13IC7aNuejCW4Vn7epBuCZI6YPfDqvexy5Z\niz8c/wBsSrajaD9BWv4f/wBlU031N6WCntGZLDmuKIxLqcDpnmZLwLkFxU8cH0s4MeaKc5XT4Ydf\nRi7alKHns93XA/7lmYQgXlmUD0nXGBLVirO71KSQfRY8e+StNlm1AhYjGQeZbMQrE2FV6ZkE04rb\nTk4xjGMZ5+MLdWqEdmobxMbfQnmiMgAIA4AiLFDoMOGY87e8e4iWlNqRb0O5V2r1YECA1mnFgqRC\nR4g5I/tM5dUt+kFyL4Z6zfoloJ84ClEHjzn4QM9qr4OFPQgjA/SXVrq66+zBCn7RYn9hNOvv7VAK\naS9fezDHsmF7+0ZFXTrXUvrbRyTFh/0Do1jqjN9ohj/eI7RWBCVhR9UheTOkdT5PWsBNI7tjnNxU\nRL6jSlB2eiVGQ55sL59/EDFVZaHy7Mq9+0An5QnYNapNZtUePok/KFbZZqSQOw06k/VGOJprqSvT\nmsOLmI+oDmRZYGZ0tOyoJ/SSZZbc5Pj3YzNw8m2X1m0p2Yz0L8maRpKkXLIK9o6esD8ZUcqrzxx2\na1kqe8EmMr30EopFdnVg65PwE09tuUqXAx3ezwwJltsC+kMDPeW5+UDQ9x9Zq8so5ZjATVV2hk2b\nnwSByB+hmLfaScAEe7EqhLbLcKuPw9RINmitXcVIVieFU9Jp1hzUoSsuuMnacYmc0WI2z1SO7JbM\nzanKWCtmYk8jcP7SjfpdIrU9ti1B1JTDACAwrZirvcT0Ax1/SaFt0zaOtDpXFq9WXCA+/rmZG04B\n3VM1bHkjO6LGlRj1je57ge6Ka+usGxRZvPGWP94b11tXtAIPiXJ/SXToNPZSxssrVl+0xBPuxFwM\nj2IpKhHO7BHI+UfRqbK0NaaZUC9CDg/GabdF5NFK9nXY9veXsyP2zKr0mhNZNlLG36u2wgfHjmLg\nc9dNayF8eiOc5meljcSgXnxzOmNKwsLVhUTuGcwAWotJqt2P3nk/3ktGcmuio/Rdoc43E5Huh0Fx\nWGq2ts6oy8GDqNRfrAiOzMN3HoMBLFVlQYVoGtTjk/HPtlHU85vsQdnV2R7x4TK1pYE15e49C3SZ\nn1t91PZeipP2AcmDYt9anT3C5gvUITiVab1atbM6rddYo9VT6A/zMTOtlpU/RKevHAEUd61gYAUn\nPJJMlO1HDWOWXPOOf3klHVTS6UVotT9s1nAAXDfPMRZo9NVYaxkOOp5JH6zVT5KYaprjXelKji5X\nP6ATonydpn05FenF7H/ctcgj9YtXnm8oJSxVarcr6O4Xf5EGrstc7ttdCmCS1m7PPuE6Q8i11H6W\n/Tge30v2i2opqYrVsKnvAxn9ImYSxXWCjSGxO0sA9EKSGXPiRmc2jX3WHlU69cYm41q64cAjwxFp\n5O3EnTh0zwdvAPykuCwPS9zXk3BU4wxbr8I6jSX7STrXAIyrEECYbKbtOGTssDwJJzGnyhqrq1qu\n7NFAwNucfKaVttS69lUalacNkE49L5Q37RcLcqsD4JOclb6lwS9akHAYnGJ1NXpdRVpgWZQAPWHI\nPxksIU1V7kIRwOSTwRLtqosqLKprfHGPSB+HExI+xcud3u6/rNFFrV207fRRsgng/wBv0kDKbalq\nxdpq3f7WMfpLa6pwQNPWPcsbc+nessKr9w6soVR8iZnWs55dMHkelkn5CSpBWEFQuwEHuxOfdU+4\n4qJX+k5xN2pKoAcnPuicpn1hnrL7SXMuS0EFAfj1jaqiuDYuT064mmzUIfRO75QuyrJQtfYd/QZ4\nkBU3oiMDSrAHGcy6tZVXeqpQqZ4JXrBTTVM/0eocc7toxiMt0S2WC032I694AxJ6GbVk12BktLK3\nIzM1jXWcFwVByAZ0W0iXU5NpYno7cTIdOO3Zcn+5EsSD011rWqLAGXPTOJ0rV3IOyDHx3HInMOmR\njtUtnpnEPTmyjC4yvsMvKtIQKPTGPgZYCOCvaV48cQe0rsYq5BbwziCT2ZBLcDuBzIBehDkMGYfa\nUCJIrrRsox4PJGJprvVGLZYEnwk1Fi2VN/5K52k4IEBdev8AoualHojqeszO7XD+WgUeCzpB6Bp0\nsWit/RHLCZTrmcHs6Kh714MtyjHwwKqE57+f8zSmk1Loqh/RHQbhgRV2rt9HtdJp1A71UyLauptV\nWuVARnHQSDcnkvCDtdUufADOI0aHRIOWtsPvA/aLFekVMNaD7d0XY/k6v13dvZkyKbdpNM1Z2VAD\nxOZlq0wU8q237OTgwq7qHZkrodFXoAf3iSlSFms5OeALDn9JRo1FmmStFGlVm7zubP6GLTVWgOUO\n0jA9AAYErzYWJuFQB7i1hwPhmUuiur9Msq5+ypOZRtFmjagM7O7DrvfqZmfXUhHC6VASMKcDj4wL\nlRkya33gYAC4zA0+HsxtSv8AqYShW644OFAB+rFbg7sFIJ6njpOrbZ0yCcfWHAmWvSjUOzdh6Pe2\nD/iQovShHYixWb2jGI6/UGnNakouPqkDPvxN9aWVVZRqAnTJXmc7zV9RcXOHH2SQCfdC001XugD1\n7a2YY9UHPxgdi915ZsFvtkyrO2FgSpU06KOQB/8AsfpabtRnsq0cd7l+IQsq1YAtKjPQ5lsVUZzn\n3R1nZAN1RumUO7+0yulB53Wn2uQJKU0L6O6WAoG484icbWXs2Jrzwc5mprgW7KvL5+uoHHzigqmz\nfnlQT0HhBpsBLbm55K+BE2VeTdIoc3WXEleMY6xI0ulrCu/aEDjG7H7QgPO9Oq+nbg46AZmXUNZq\nlxSrGs9SVAnVpp07afs69JVWxGTYWJY/OD2qKVQN2jezmWIGKnTmmscKCP0h6NApe+9i6dfSOP2M\n7F9Y02n7Sy/T7iOFGS3wBE4uq1112yk3PXpx0QcTQf52z3qQ6qpIO3cMn3986XlbV3qv0K0ojJwy\nqAw+M49JWio71U1cgHGSx9s2MBrfJ6VLYisp6HvHh0kGPTB0LW7lsdhwVGdvjEraEtyxVx15HSNF\nPmzKWuCqD6h5JHwgWrXa+5FYZHrWN/aJG+vUOF+hubn6q8GRblYZs1BDfZIJM511bdkqi6sPnu/z\nBoemy1zfcd/1WJmaHVNmnzns7GH4sRdmorxhUVR7Tkzmrqay+x3tBP2SP8RllabfRtcHxJiMEaHv\nRFLMDj2CJOuotpbbuPiuMfvEHSo7BbbC4HTnEiaamsegxHv5l2A9PqrWrCVaY8dN7yhTqtU7Baa8\ng4IV4xVpBDWJ2h8MkAfARfZ9hqS62C0MdzKv1fZLVBT0tS5R3ZLV+oBmOs1V2n22vtZX4xkc/wB5\nq8823MtFa7TX1FeCD4+MGnykadOaa66hbuPpMMn/ABIpg01Ny9tVsrJH8u0459kxW6ezTMrdsrZO\ncA9D7BJdq/Oa/wDyHdiD6q45Hy4i7Lm2nzWplUDqWBhDXvBKgeg3ewUkn/qbtLQa6STeCSc4AmDS\ni/etig/8QMzqMQwBNJqY9Qz5PylUi9qAApaxrT3A90QdO7kstGF/rbBM3LUKGNj4weY19TQE9F05\n90gx1V+SrKwdRbtsHBGSMS9R5nXpidFqS7jhVyMftEtpdPaxKk5Jzw0i6StDgbs/ilmYQB1FqKPo\njx37II11m7ik48cTdTWqJ6JYt4ZmUXWduwsr2bzhc85mRBqWVCXGR34H/UzEqACu1T7ZpusCbVI9\ndtvEWNAN7Dc/E1FAEevjfgn2GFafVwSPjDGgrXl3ZfAkjEa1aOmWIIXIyT3S3Ay16bznLh8FMc78\nRj21IMAFieMl84jq6BUcrYBX9YZzB1GqNzdlWSoz6w8JJlWZSlrgVmzc3qjIOTFV1hXbtcggEYK5\nJmvROKdQwI7VM9T4eM1eUUo1Q3FmQgEAjEDmoLtRp6vRCAAeiRGV1F3KbgdvrY6/CO0N/b18DlQI\n2x66jliiE9+OTJQyGu4EnaNniesZv07cdgWPgZqps9IAHeD1yYwLcWYU1oEXv4liBydRRuYPVQKs\nD6qzJssd8nUMvs75320+otBJdDjrg5I+U5WrXs3HasWPtODFEsjNUGx2jl89ck5mpKNU6r9Hawzw\nc4h6a1a7N9dJZu7b3Tauote5UfhWIDYt5X5REQnsvVadqqV24Q9+TyYmnT6mzlrHCH6qcmde2/SU\nVgJduCd7Nkmc3VeUnsytPoL4/WMf8artl1CsrlVBRAcHe3pfIRVtTIygXKWPJ2jpNlWlFujsa0EN\n6yE8Z/SL02mazGEAT7XjHCBTUupCdmTngcTp1rYas5yfb3frJTVXSOFyfGGX3TM5FLbfYhW5g4+y\nRkfrF06daSWSpWbxbmWupq5G8ZBxzDS5WP8AMX3AyXJZGo0NGqu3YtWxuuCMfLEuzTvTV2WncV4G\nBvHt5htqKa2yL0DfimjX+VKfJ+n0pWjT6qy3LOXOcAd2B0zLEjkWV6o/zbKuPbia10lddQserccc\nhX4+U6Fuu8lazybTe+iqqd/WRXx0Mzlq9anZivaD09LM1Zbnomj1J3l7KucHC7xJbSpVxTqUcIM8\nV7eI1fJw0ZzaAechoCBqlufTZO8bW5GMeEWImrNC7A7pkZ9FsAxQ1i17LEXc5ySxOZnu07dnna6u\nD85ndNiYJOM8yQjoJ5S1HRlqKHruEmrtt1Qq7GobaxwEGAP1mFTvUDPTvIhq9icKSBEyW32au61F\nNyqWQYzsyfnMbWbsNu5zwcRle6zbluhyY2xeMYxnwksDRqdOhHnCWWAdWBwceE3VHT6xSaKrgxY8\n7xwM8DHHdiYWOAPRJA6kShtbPaIRzgYiw/VPUrdiG23IOAVMQ1r9l2dxAGcjk4izodPY7NuIKnnJ\ngmisAKrFs8+79Zbhbaq9StbKKxWB7h1h72W3tK889RWgyfecTPRpqFI7U78HJxNSqpsJrDVKeigZ\ni4LZztt1JtWhwxOcHrNTNRwFrvwfW4PHuMdpKQ94rttRVJ5dmxgfOei/gWhs06FLLNxHG11OfaJR\n5Ky21iEqqOwHjcOfjCuRjhq6rMjk8z0F/wDp5qKy62Et3K1Z/tmch6tSCygV5Hf2mP0OIuThjWnV\nWphVK44wQv7xyVasv2KtzjnJUCWNBfZlgQWz0XDfsYZRqK27RbLmU8jBAHvgJt0Wr0/FqAg8gK+f\n1ia9DbexNYVEx4/3ib9a72nKttXjjoPYIS+VLAMdswHtUGWIDz5MvQcBD7Q3OJKsBXCdiHUelvGQ\nflFNr7r/AKNGLs3AVF5MVSaUdl1KNY3cEbAWKRsVTU9RrIc9N1Qxj485mvdgEvuPtJzOLYyK4Nas\nox03Zm3Tn/xCVU4PTiFhNfr03VqiApzuz7vCDoUFmR6RUjoPGBXozcQy1qCpyc8GNuvv0ifQKq46\n7gTMrFfLbSnYE50b2KftgwtQanq40gqfxWc6ny55RTBIrZfAkidBvKvndQW6s1HHdzJRUOc+mGoP\npmxcdMGENKtZBBbcO+wzdRraKk2bFCj65HfDW6q5sBlY9ZJmimKvSJaSbL8H2MeJhrzSXYWu4zjD\nMZ2LXoV9pUY7zgYETbRprF+jSts9Sv8A1LE2jmdq5Ibd04HJ5kIvuT0lPHTwI5/zNjOqMKalwPtY\nyYntFqY9r2hI6MF/zKUCzTlauuSe7OBNNdDLQyGl3DdWX9odGv0uoGxnBOPrLjH6RguuK7a9wXoC\nPSilYgSjoClhAHORG2tXbWQEdcL9maatRcr9mym497N3fCN8oVhtI+w7H256QjjaLU1omfRUkAEA\n/rOgbKTWHdlHgMcmXJKuLTQdOQxrtRyR0JwZl1/ZindXbtY9wOB8R3ySSwTyyhU7WsNqVP4gMZ7p\npp0YvYlrg1ntcAYkkgl0Hu0Nel7PzZGtH+4r+jOVR2qXNZS9WSeuF492TJJAT5te7n6M9fWPT5xq\n+b6OvfZssszwGYYHwkkhGfU6uy+zDgHPeTxNFOuOnrG7YF8Q4Mkkk+w2zU6e9EZrGQA54PWO890x\nrba6k+B4kkmdpbhO+18F0G48CHXvZ9uUHvPSSSaQ21dMOWGPaJdT6UkFw91aHBUNgCXJEQGh1wa1\nZFV8nYzcr8Zr8mamh3VTaQ68YAGPnJJFEOpqzRWgZrK3fOQDyT8ohrUp0j22WZU5K1j/ABJJFNOO\n2+1iVPo9x7/2ibdIETD2P2h+qccS5IpDNBpGrUXMcZ5XdwD85H7IOS1q7j7sSSRRSglbMEVqjaee\nTjAjX0iMy/8AkJWB63pnHzzLkikX5vVXZ9Hq0fjgBgR85pXYK1cncD4Y49vWSSJgY9R2gcmsIqk9\nT1Ptg06W6y3a3ZtuBPoESSRQYBWlmwOofGTMo1WxDtcnBxgn9ZJJKG0+UPJ1ejauytr7SQWBO39Y\n/S+WfJ1a1KunccexivukkhD18pUnVL5ra1IPA5wWPie6Nd0B9KxSfHcDJJJMKDfWT/MXHvi9LdXW\nXrZk3ZznPUSSRQryhrXQ0bNQwVrAHIfPHunfan/T1pybazxjBC/3EkkvAztpvIukB1Ndio6cggqS\nfgCJz9ZTpH3AqnZv6W9jtOT18ZJJpWCw6PydWXorF9nducnH6CO0tgvCH1iRkqOf0kklAaqrQpYh\nDebt3iwOoJ+IiNXZpNOuxbQXPI2uApEkkzQQjiwstdlZHcu8TseTPJmmeuu2687s5NYZD/8A6zLk\nihs1ujpuJC3Gte7dSTj4zjX6elLzixbPwvtzLkihi1FSk5NRQD7T7s/GMayvToq6dQc+vgZkklBu\nUuZEDmhm43MD6Pt4mjU6WtKqqDq6ryM7rVbOeZJIGB6KVQt26BA2Aw5J94B4mYAs5KMrjPecZ90k\nklENN2osFX0dNilfWxZn9jNOi1iLUxsJyVPrPn95JJaWZt//2Q==\n", + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('ysdU4mnRYdM')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That doesn't look too good! What's happening? \n", + "\n", + "It can get a lot worse when an aircraft enters one of these modes that is unstable. For example, one of [NASA's Helios Solar Powered Aircraft](http://www.nasa.gov/centers/dryden/history/pastprojects/Helios/) prototype broke up in mid air due to extreme phugoid oscillations!\n", + "\n", + "Helios was a proof-of-concept solar electric-powered flying wing that broke the world altitude record for a non-rocket-powered aircraft in August 2001. But in June 26, 2003, it broke something else. The aircraft entered phugoid motion after encountering turbulence near the Hawaiian Island of Kauai. The high speed in the oscillatory movement exceeded the design limits, and it ended up wrecked in the Pacific Ocean. Luckily, the Helios was remotely operated, and nobody got hurt." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The physics of phugoids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The phugoid oscillation has the aircraft pitching up and down, as it decelerates and accelerates. The trajectory might look like a sinusoid, as in the figure below. The assumption is that the forward velocity of the aircraft, $v$, varies in such a way that the angle of attack remains (nearly) constant, which means that we can assume a constant lift coefficient." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/oscillatory_trajectory.png)\n", + "#### Figure 1. Trajectory of an aircraft in phugoid motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the descending portion of the trajectory, the aircraft's velocity increases as it proceeds from a peak to the minimum height—gaining kinetic energy at the expense of potential energy. The contrary happens in the upward segment, as its velocity decreases there.\n", + "\n", + "We measure the pitch angle (between the aircraft's longitudinal axis and the horizontal) as positive when the aircraft's nose is pointing up. In the portion of the trajectory below the center-line, where it curves upwards, the pitch angle $\\theta$ is increasing: $\\dot{\\theta}>0$. And where the trajectory curves down, the pitch angle is decreasing: $\\dot{\\theta}<0$, as shown in the figure.\n", + "\n", + "Let's remind ourselves of the forces affecting an aircraft in a downward glide. Look at the figure below: we show the flight path, the forces on the glider (no thrust), and the _glide angle_ or flight path angle, $\\gamma$, between the flight path and the horizontal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces.png)\n", + "#### Figure 2. Forces on a glider." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The force of lift, $L$ —created by the airflow around the wings— is perpendicular to the trajectory, and the force of drag, $D$, is parallel to the trajectory. Both forces are expressed in terms of coefficients of lift and drag, $C_L$ and $C_D$, respectively, that depend on the wing design and _angle of attack_—the angle between the wing chord and the flight path.\n", + "\n", + "If you are not familiar with airplane aerodynamics, you might be getting confused with some terms here ... and all those angles! But be patient and look things up, if you need to. We're giving you a quick summary here.\n", + "\n", + "Lift and drag are proportional to a surface area, $S$, and the dynamic pressure: $1/2 \\rho v^2$, where $\\rho$ is the density of air, and $v$ the forward velocity of the aircraft. The equations for lift and drag are:\n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "If the glider were in equilibrium, the forces would balance each other. We can equate the forces in the directions perpendicular and parallel to the trajectory, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "L = W \\cos \\gamma \\quad \\text{and} \\quad D = W \\sin \\gamma\n", + "\\end{equation}$$\n", + "\n", + "where $W$ repesents the weight of the glider.\n", + "\n", + "In the figure, we've drawn the angle $\\gamma$ as the _glide angle_, formed between the direction of motion and the horizontal. We are not bothered with the _sign_ of the angle, because we draw a free-body diagram and take the direction of the forces into account in writing our balance equations. But later on, we will need to be careful with the sign of the angles. It can cause you a real headache to keep this straight, so be patient!\n", + "\n", + "It looks like we've set this up to do a little bit of mathematics. Are you ready?\n", + "\n", + "But before, a short glimpse of the history." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Lanchester's Aerodonetics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Phugoid theory\" was first described by the British engineer Frederick W. Lanchester in _\"Aerodonetics\"_ (1909). This book is so old that it is now in the public domain, so you can actually download [from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&dq=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&pg=PA37#v=onepage&q=%22phugoid%20theory%20deals%20with%20the%20longitudinal%20stability%22&f=false) a PDF file of a scan, or read it online. \n", + "\n", + "Lanchester defines phugoid theory as the study of longitudinal stability of a flying machine (aerodone). He first considered the simplification where drag and moment of inertia are neglected. Then he included these effects, obtaining an equation of stability. In addition to describing many experiments by himself and others, Lanchester also reports on _\"numerical work ... done by the aid of an ordinary 25-cm slide rule.\"_ Go figure!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ideal case of zero drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section, we follow the derivation given by Milne-Thompson (1966), which we find a little bit easier than that of the original in \"Aerodonetics\"!\n", + "\n", + "An aircraft flying in a steady, straight horizontal flight has a lift equal to its weight. The velocity in this condition is sometimes called _trim velocity_ (\"trim\" is what pilots do to set the controls to just stay in a steady flight). Let's use $v_t$ for the trim velocity, and from $L=W$ deduce that:\n", + "\n", + "$$\\begin{equation}\n", + "W = C_L S \\times\\frac{1}{2} \\rho v_t^2\n", + "\\end{equation}$$\n", + "\n", + "The weight $W$ is constant for the aircraft, but the lift at any other flight condition depends on the flight speed, $v$. We can use the expression for the weight in terms of $v_t$ to obtain the ratio $L/W$ at any other flight velocity, as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}= \\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "Imagine that the aircraft experienced a little upset, a wind gust, and it finds itself off the \"trim\" level, in a curved path with an instantaneous angle $\\theta$. In the sketch below, we exaggerate the curved trajectory of flight to help you visualize what we'll do next. The angle $\\theta$ (using the same name as Milne-Thompson) is between the _trajectory_ and the horizontal, positive up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "#### Figure 3. Curved trajectory of the aircraft going up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can form a free body diagram to determine the balance of forces. \n", + "\n", + "\n", + "\n", + "#### Figure 4. Free body diagram of the aircraft trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the free body diagram, we can see that\n", + "\n", + "\\begin{equation}\n", + "\\vec{L} + \\vec{W} = m\\vec{a} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "where $\\frac{v^2}{R}$ is the centripetal acceleration and $R$ is the radius of curvature of the trajectory.\n", + "If we decompose the lift and weight into their normal and tangential components we get\n", + "\n", + "\\begin{equation}\n", + "L\\hat{n} + W_n\\hat{n} + W_t\\hat{t} = \\frac{mv^2}{R}\\hat{n} + m \\frac{dv}{dt}\\hat{t}\n", + "\\end{equation}\n", + "\n", + "The component of the weight in the normal direction ($W_n$) is\n", + "\n", + "\\begin{equation}\n", + "W_n = -W \\cos \\theta\n", + "\\end{equation}\n", + "\n", + "If we then consider that all of the components in $\\hat{n}$ must balance out, we arrive at\n", + "\n", + "\\begin{equation}\n", + "L - W \\cos \\theta = \\frac{mv^2}{R}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite this as\n", + "\n", + "$$\\begin{equation}\n", + "L- W \\cos \\theta = \\frac{W}{g} \\frac{v^2}{R}\n", + "\\end{equation}$$\n", + "\n", + "where $g$ is the acceleration due to gravity. Rearrange this by dividing the equation by the weight, and use the expression we found for $L/W$, above. The following equation results:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{v^2}{v_t^2}-\\cos \\theta = \\frac{v^2}{g R}\n", + "\\end{equation}$$\n", + "\n", + "Recall that we simplified the problem assuming that there is no friction, which means that the total energy is constant (the lift does no work). If $z$ represents the depth below a reference horizontal line, the energy per unit mass is (kinetic plus potential energy):\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{2}v^2-g z = \\text{constant}\n", + "\\end{equation}$$\n", + "\n", + "To get rid of that pesky constant, we can choose the reference horizontal line at the level that makes the constant energy equal to zero, so $v^2 = 2 g z$. That helps us re-write the phugoid equation in terms of $z$ as follows:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z}{z_t}-\\cos \\theta = \\frac{2z}{R}\n", + "\\end{equation}$$\n", + "\n", + "Let $ds$ represent a small arc-length of the trajectory. We can write \n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} \\quad \\text{and}\\quad \\sin\\theta = -\\frac{dz}{ds}\n", + "\\end{equation}$$\n", + "\n", + "Employing the chain rule of calculus,\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{1}{R} = \\frac{d\\theta}{ds} = \\frac{dz}{ds}\\frac{d\\theta}{dz} = -\\sin \\theta\\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "Multiply the phugoid equation by $\\frac{1}{2\\sqrt{z}}$ to get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} - \\frac{\\cos\\theta}{2\\sqrt{z}} = \\frac{\\sqrt{z}}{R}\n", + "\\end{equation}$$\n", + "\n", + "Substituting for $1/R$ on the right hand side and bringing the cosine term over to the right, we get:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{\\sqrt{z}}{2z_t} = \\frac{\\cos \\theta}{2 \\sqrt{z}} - \\sqrt{z} \\sin \\theta \\frac{d\\theta}{dz}\n", + "\\end{equation}$$\n", + "\n", + "The right-hand-side is an exact derivative! We can rewrite it as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d}{dz} \\left(\\sqrt{z}\\cos\\theta \\right) = \\frac{\\sqrt{z}}{2z_t}\n", + "\\end{equation}$$\n", + "\n", + "Integrating this equation, we add an arbitrary constant, chosen as $C\\sqrt{z_t}$ which (after dividing through by $\\sqrt{z}$) gives:\n", + "\n", + "$$\\begin{equation}\n", + "\\cos \\theta = \\frac{1}{3}\\frac{z}{z_t} + C\\sqrt{\\frac{z_t}{z}}\n", + "\\end{equation}$$\n", + "\n", + "Taking the derivative of both sides of equation (15) and applying the relations from equation (10) yields:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{z_t}{R} = \\frac{1}{3} - \\frac{C}{2}\\sqrt{\\frac{z_t^3}{z^3}}\n", + "\\end{equation}$$\n", + "\n", + "Make sure you have followed the derivation, and perhaps write it out on paper!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Phugoid Curves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Equation (15) is non-linear, which usually means we are hard-pressed to write a clean expression for the variable of interest, $z$. In fact, Lanchester himself said that he was unable to _\"reduce this expression to a form suitable for co-ordinate plotting.\"_ If the great polymath couldn't do it, we can't either!\n", + "\n", + "But Lanchester _was_ able to plot a suitable approximation of the phugoid flight path using what he called the \"trammel\" method. If you're interested in seeing how he did it, his explanation begins on page [48 of Aerodonetics](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PA49&lpg=PA48&dq=aerodonetics+the+use+of+the+trammel&source=bl&ots=lB6EVKYQuT&sig=aVE2kiDWZoWftaWczMIrcYftMOs&hl=en&sa=X&ei=gTD_U82fGYjzgwT3moGwCQ&ved=0CCAQ6AEwAA#v=onepage&q=aerodonetics%20the%20use%20of%20the%20trammel&f=false). It's a trip.\n", + "\n", + "Lanchester used Equations (15) and (16) to solve for the constant $C$ and the radius of curvature $R$ and then iteratively plotted small arcs of the phugoid path. By hand.\n", + "\n", + "We wrote a neat little code that duplicates the manual trammel method, but it might be a bit much for you to absorb in the first lesson. If you want to look it over, you are more than welcome to. If you are just starting with Python, skip it for the moment and we'll return to it at the end of this module. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plotting the flight path" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we mentioned, we wrote a Python code to reproduce programmatically what Lanchester did graphically. Here's a neat feature of IPython Notebooks: you can run external programs with the magical keyword ... wait for it ... `run`. And the jargon of IPython _is_ to call this \"magic.\" In fact, there are a bunch of [magic functions](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) that you will learn about. They will make you a happy camper.\n", + "\n", + "Let's do it:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%run phugoid.py\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This code cell loaded our simulated-trammel code, `phugoid.py`. The code defined a function for you in the background, called `plot_flight_path`, taking three inputs: $z_t$, $z$ and $\\theta$. \n", + "\n", + "Look again at Equation (15), where we take the positive square root. There are several possibilities, depending on the value that the constant $C$ takes. \n", + "\n", + "* There are no physical solutions for $C>2/3$, because it would result in $\\cos\\theta>1$. \n", + "\n", + "* If $C=2/3$, then the solution is a horizontal straight line, because $\\cos\\theta=1$, $\\theta=0$ and $R=\\infty$.\n", + "\n", + "* Any value of $C$ for which $0 < C < \\frac{2}{3}$ will produce \"trochoidal\"-like paths. What does this look like? Let's use our custom function `plot_flight_path` to find out!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n5MgRihQpQt++fQE4fPgw+fLlo1SpUpw8eTLV19+1axfFihULPC5WrBixsbFZ10G/zPQzNefrf0oy\n2tfBgwczdOhQALZu3UpERESq22amn+mtL7XtixcvniM/0wtR4BMRkWxlluFzxf7JuT/a6bV69WqG\nDx9OxYoVyZcvH506daJHjx5/2q5atWqMGDEiQ6+xf/9+Nm7cyJQpUwBo27Ytbdq0oXr16syYMYP7\n77+fCRMmnHcfR44c4aKLLgo8joyM5Pfff0/T66e1j5C5fqbmfP1PSUb6unfvXr799lu+++471qxZ\nw6RJk3j++edT3T4z/UxvfefbPqM/06ykKV0REfG8Zs2a8dVXX9GoUSMKFChAjx49eP3119m/f3+W\nvUaRIkVo0KBB4HHlypWJjo7m22+/5aqrrkrzPoJD7R9//EGJEiXS9L3J+xgVFcXIkSMZP3483333\nXfo6kwGp9f9826e3r4sWLaJr16488MAD3HXXXezZs4cOHTpkSz/TW19q22fmZ5qVNMInIiLZKqOj\nclnt5ZdfZv/+/bz99tuAbzqwbNmySbYJngIMlpYpwHr16rFs2bLA43z58pGQkMC3337LqVOnmDt3\nLsuXL+f06dPMnj07xf1cccUVrFmzJvD48OHDNGnSJEN9fP3112nfvj1NmjShT58+fPrpp1nSz9Sk\n1v/UZKSvO3fupE6dOoBv5Wvnzp355JNPsqWf6a0vte2LFSuWqZ9plsnMio/cfEMrykREsky4/059\n+eWX3bPPPuucc27jxo1u6dKl7oYbbnArVqzIstc4ffq0a9GiReBxq1at3LZt25JsM3z48CSrdH/6\n6SeXmJgYeHzy5EnXoEGDwOOGDRu6/fv3O+eci42NTbJtcsn7+PDDD7tff/3VOefcDTfckImepWz8\n+PGub9++gcfn63/yfjqXsb6OHTvWjR071jnnXOfOnd2OHTvcI488ki39PF996enP+faTktT+L5HJ\nVbrmwuSTV04zM5dX+y4iktVSu+B7OPjPf/7Db7/9RtGiRRk2bBjXXHMNd911F59//jmDBg3K0tea\nP38+y5cvxzlH7dq1ueOOOwLPTZs2jREjRmBmDB06lJtvvpkmTZowbtw4GjduHNhu0qRJbN++Hecc\n1apVC+yjTp06vPXWW1x//fVp6uO+fft45plnqFChAp07d2bOnDlZ1s933nmHqVOnsnPnTvr27cuT\nTz5JkSJFUu1/Sv3MSF+PHz/O888/T4MGDahfvz4tWrTg4Ycf5tlnn82WfqZWX3r7k1p7SlL7v+Rv\nz/ABsQp8IiKSaeEc+FIyefJkqlSpQuXKlbnssstCXU6aJCYm8s0331zw1C7nvP3227Rt25Y6derQ\nt29fPvvss2yuMOukp6+5uZ8pUeDLYgp8IiJZJ7cFvlmzZhEXF0ezZs3Oe664cDJ16lS6devGxRdf\nnKbtDx8+zMcff0yxYsWoX78+LVu2zOYKs056+pqb+5kSBb4spsAnIpJ1clvgy41OnjzJJZdcEuoy\nckRe6mtyCnxZTIFPRCTrKPCJZI3sCnw6D5+IiIiIxynwiYiIiHicAp+IiIiIxynwiYiIiHicAp+I\niIiIx+lauiIikmlVqlT50/VKRST9suu8kDoti4iIiEiY02lZREREROS8FPhEREREPE6BT0RERMTj\nFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RE\nRMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6B\nT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjFPhEREREPE6BT0RERMTjwj7wmdk4\nM9tvZhuC2oqbWbSZbTGz+WZWNOi5oWYWa2abzKxDaKoWERERCR9hH/iAfwIdk7UNARY652oBi4Ch\nAGZWF+gF1AFuAN4zM8vBWkVERETCTtgHPufcMuBIsubuwAT//QlAD//9G4Epzrl459x2IBZonhN1\nioiIiISrsA98qSjjnNsP4JzbB5Txt1cEdgZtt9vfJiIiIpJn5dbAl5wLdQEiIiIi4Sp/qAvIoP1m\nVtY5t9/MygEH/O27gcuCtqvkb0vR8OHDA/ejoqKIiorK+kpFRERE0ikmJoaYmJgs2585F/6DY2ZW\nFfjSOdfA/3gk8JtzbqSZDQaKO+eG+BdtfApchW8qdwFQw6XQSTNLqVlEREQk7JgZzrkML0QN+xE+\nM5sMRAElzexXYBjwCjDNzO4FduBbmYtz7kczmwr8CMQBDynViYiISF6XK0b4soNG+ERERCS3yOwI\nn1cWbYiIiIhIKhT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9E\nRETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxO\ngU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERE\nRDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4\nRERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE4xT4RERERDxOgU9ERETE\n4zwZ+Mysk5ltNrOtZjY41PWIiIiIhJI550JdQ5Yys3zAVuBaYA+wGrjVObc52XbOa30XERERbzIz\nnHOW0e/34ghfcyDWObfDORcHTAG6h7gmERERkZDxYuCrCOwMerzL3yYiIiKSJ3kx8ImIiIhIkPyh\nLiAb7AYqBz2u5G/7k+HDhwfuR0VFERUVlZ11iYiIiKRJTEwMMTExWbY/Ly7aiAC24Fu0sRf4FrjN\nObcp2XZatCEiIiK5QmYXbXhuhM85l2BmjwDR+KasxyUPeyIiIiJ5iedG+NJKI3wiIiKSW+i0LCIi\nIiJyXgp8IiIiIh6nwCciIiLicQp8IiIiIh7nuVW66ZGYmEi+fMq8IuI9Z86c4ddff2Xnzp3s27eP\ns2fPEh8fT6FChShdujTly5enZs2aREZGhrpUEckBeTrwRUREUKJECa644gqqV69O06ZNadWqFU2b\nNtUvQRHJVU6dOsXXX3/N/PnzWbVqFevXrycuLu6835M/f37q1KlDy5Yt6dixI9dccw3FihXLoYpF\nJCfl6dOypPZc4cKF6dy5Mz179qR79+5cfPHFOVmaiEiaJCQksGDBAsaOHctXX33F6dOnA8+ZGZUr\nV6Zy5cpUqFCBiy66iIiICE6ePMmBAwfYtWsX27ZtI/hvQIECBejSpQt33nknN954IwUKFAhFt0Qk\nBZk9LUueDnzx8fEcOnSIn376ic2bN7Ny5UqWLVvGpk3/O09z8eLFufvuu3nwwQepU6dOCCsWEfE5\nfvw477//Pu+++y47d+4MtDdr1oyuXbvStm1bmjZtyqWXXnre/Zw8eZINGzawePFi5s+fz7Jly0hM\nTASgUqVKDBgwgPvvv5+iRYtma39E5MIU+DLofCde/uWXX5g1axaffvopa9asCbR3796d559/nqZN\nm+ZUmSIiAceOHeP111/nzTff5OjRowBUq1aNfv360adPHypWrJip/e/du5fPPvuMsWPHBj74FilS\nhIEDB/LEE09QuHDhTPdBRDJGgS+D0nqljbVr1/LBBx8wceLEwHRJ165defXVVzXiJyI5Ij4+nrFj\nx/K3v/2NgwcPAtC2bVueeeYZOnTokOWLzxITE5k3bx6vvfZa4OLtZcuW5cUXX6Rfv35ERERk6euJ\nyIUp8GVQei+ttm/fPkaPHs17773HqVOniIiI4OGHH2bYsGGUKFEiGysVkbxs8eLFPProo2zcuBHw\nBb2///3vtG3bNkdePyYmhkGDBrF69WoAmjdvzgcffECjRo1y5PVFxEeBL4Myei3dAwcO8PzzzzN2\n7FgSExMpUaIE//jHP7j77rsxy/DPQUQkiaNHjzJo0CA++ugjAC6//HJee+01brrpphz/XeOcY+rU\nqTz55JPs2bOHiIgInnjiCV588UUtahPJIQp8GZTRwHfO+vXreeKJJ1i8eDEAHTt25IMPPqBKlSpZ\nVaKI5FGzZ8+mf//+7Nmzh8jISJ577jkGDhzIRRddFNK6jh8/zvPPP88777xDYmIidevWZdKkSTRu\n3DikdYnkBQp8GZTZwAe+T70TJ07kiSee4MiRIxQuXJhXX32Vv/71rxrtE5F0+/3333n00UcZP348\nAC1atGDcuHHUrVs3tIUls3r1au6++242b95MgQIFePHFFxk4cKCO7RPJRgp8GZQVge+cffv28cgj\njzB9+nQAunXrxscff0ypUqWyZP8i4n1r1qzh9ttvJzY2losuuogRI0bw6KOPhm2IOnXqFIMHD+ad\nd94BICoqis8++4xy5cqFuDIRb1Lgy6CsDHznTJ06lQcffJCjR49Svnx5Jk6cyHXXXZelryEi3pKY\nmMjo0aN59tlniYuLo379+nz22WfUr18/1KWlybx58+jbty/79++nfPnyfP755zm2oEQkL8ls4NOF\nZLNQr169WL9+PW3btmXv3r1cf/31DB48mPj4+FCXJiJh6Pjx49x0000MGjSIuLg4Hn30Ub799ttc\n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\n9dVXqf4eVOBT4Atrq1atcj179nRmluSP++zZs11CQkKoy5MckpiY6ObOnZvkQ4CZuW7durmlS5eG\nujyRTImPj3eTJ092derUCby/K1eu7N566y134sSJUJcnYeTIkSPu73//uytdunTgvVK/fn03c+bM\nC37gVeBT4MsVfvrpJzdgwABXuHDhJFfuGDVqlM5m72GHDx92r7/+epIrYxQqVMg99NBDujqGeE58\nfLybMmWKq1u3buD9Xrx4cffMM8+4PXv2hLo8CaHdu3e7gQMHBhZjAK5p06Zu2rRpaR78UOBT4MtV\njh496kaNGuUqV66cZLr31ltv1ZSeRyQmJrqlS5e6O++8M8m0bYUKFdyIESO0kEc8LyEhwU2fPt21\natUqye+5e+65x/3www+hLk9y0MqVK92dd97pIiMjA++Fa6+91i1YsCDdf+8yG/jC/jx82cXMXF7t\neziIj49nzpw5fPjhh8yZM+dcCKdGjRr069eP22+/ncsuuyzEVUp67NmzhylTpjBu3Dh+/PFHAMyM\nDh068MADD9CtWzcKFCgQ4ipFctZ//vMfRo8ezcyZMwO/59q1a0f//v3p2bMnkZGRIa5QstqZM2f4\n/PPPeeedd1i92ne113z58tGzZ0+GDBnClVdemaH9mhkuE+fhU+CTkPv1118ZN24c48aNC1yqzcxo\n164dd9xxBzfffDPFihULcZWSkuPHjzNjxgw+/fRTvv7668AftHLlynHvvfdy3333cfnll4e4SpHQ\n27ZtG2+88Qbjx4/n5MmTAJQpU4Z+/frxwAMPULVq1dAWKJkWGxvLP//5T8aOHcvBgwcBKFGiBPfd\ndx/9+/fP9M9YgS+DFPjCT3x8PHPnzuWTTz5h9uzZnDlzBoDIyEi6du1K7969ueGGGyhSpEiIK83b\nTp48ybx585g6dSqzZ88OXPYnMjKSLl26cOedd2o0TyQVx48f59NPP+X999/nhx9+AP43Et6nTx+6\nd+9OoUKFQlylpNXvv//OtGnT+Pjjj1m2bFmgvVGjRjz66KPcdtttXHzxxVnyWgp8GaTAF96OHTsW\nGDlatGhRYOQoMjKS6667jp49e9KtWzfKli0b4krzhkOHDvHll1/yxRdfEB0dneTajldffTV33nkn\nN998M8WLFw9hlSK5h3OO//znP4wZM4apU6dy9uxZAIoUKcLNN9/MXXfdRbt27ciXL6SXvJcUJCQk\n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\nKVasGMWKFaNo0aIUK1aMMmXKUL58eSpUqEDx4sU9H+guRIEvgxT4REREJLfIbODTsj0RERERj1Pg\nExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERER\nj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4R\nERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4\nBT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExEREfE4BT4RERERj1PgExER\nEfE4BT4RERERjwvbwGdmr5rZJjP73symm9mlQc8NNbNY//MdgtqbmNkGM9tqZm+EpnIRERGR8BK2\ngQ+IBuo55xoBscBQADOrC/QC6gA3AO+Zmfm/532gn3OuJlDTzDrmfNkiIiIi4SVsA59zbqFzLtH/\ncCVQyX//RmCKcy7eObcdXxhsbmblgCLOudX+7SYCPXKyZhEREZFwFLaBL5l7gTn++xWBnUHP7fa3\nVQR2BbXv8reJiIiI5Gn5Q/niZrYAKBvcBDjgWefcl/5tngXinHOfhaBEERERkVwvpIHPOXf9+Z43\ns75AZ+CaoObdwGVBjyv521JrT9Xw4cMD96OiooiKirpw0SIiIiLZLCYmhpiYmCzbnznnsmxnWcnM\nOgGjgaudc4eD2usCnwJX4ZuyXQDUcM45M1sJPAasBr4C3nLOzUtl/y5c+y4iIiISzMxwztmFt0xZ\nSEf4LuBtIBJY4F+Eu9I595Bz7kczmwr8CMQBDwUlt4eB8cBFwJzUwp6IiIhIXhK2I3zZTSN8IiIi\nkltkdoQvt6zSFREREZEMUuATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER\n8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+AT\nERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGP\nU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhER\nERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgFPhERERGPU+ATERER8TgF\nPhERERGPC9vAZ2Yvmtl6M1tnZvPMrFzQc0PNLNbMNplZh6D2Jma2wcy2mtkboalcREREJLyYcy7U\nNaTIzAo75373338UqOuc629mdYFPgWZAJWAhUMM558xsFfCIc261mc0B3nTOzU9l/y5c+y4iIiIS\nzMxwzllGvz9sR/jOhT2/S4BE//0bgSnOuXjn3HYgFmjuHwEs4pxb7d9uItAjp+oVERERCVf5Q13A\n+ZjZS8DdwFGgvb+5IrAiaLPd/rZ4YFdQ+y5/u4iIiEieFtIRPjNb4D/m7tztB//XbgDOueecc5Xx\nTeE+GspaRURERHKrkI7wOeeuT+Omk4GvgOH4RvQuC3qukr8ttfZUDR8+PHA/KiqKqKioNJYjIiIi\nkn1iYmKIiYnJsv2F86KN6s65bf77jwJtnXO9ghZtXIVvynYB/1u0sRJ4DFiNLyC+5Zybl8r+tWhD\nREREcoXMLtoI52P4XjGzmvgWa+wA/grgnPvRzKYCPwJxwENBye1hYDxwETAntbAnIiIikpeE7Qhf\ndtMIn4iIiOQWnj0ti4iIiIhkDQU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T\n4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+EREREY9T4BMRERHxOAU+ERER\nEY9T4BMRERHxOAU+EREREY9T4BMRERHxOAW+PCYmJibUJYSE+p23qN95i/qdt+TVfmeWAl8ek1f/\no6jfeYv6nbeo33lLXu13ZinwiYiIiHicAp+IiIiIx5lzLtQ1hISZ5c2Oi4iISK7knLOMfm+eDXwi\nIiIieYWmdEVEREQ8ToFPRERExOPyXOAzs05mttnMtprZ4FDXk5XMbJyZ7TezDUFtxc0s2sy2mNl8\nMysa9NxQM4s1s01m1iE0VWeemVUys0VmttHMfjCzx/ztnu67mRU0s1Vmts7f72H+dk/3+xwzy2dm\na81stv+x5/ttZtvNbL3/Z/6tvy0v9LuomU3z92OjmV3l9X6bWU3/z3mt/+sxM3vM6/0GMLMnzOy/\nZuMP4E8AAAXQSURBVLbBzD41s8g80u8B/t/l2fN3zDmXZ274Au42oApQAPgeqB3qurKwf22ARsCG\noLaRwCD//cHAK/77dYF1QH6gqv/fxULdhwz2uxzQyH+/MLAFqJ1H+l7I/zUCWAk0zwv99vfnCWAS\nMNv/2PP9Bn4Giidrywv9Hg/c47+fHyiaF/od1P98wB7gMq/3G6jgf59H+h9/DvTJA/2uB2wACvp/\nn0cDV2Rlv/PaCF9zINY5t8P9//bu7sWqKozj+PeprBxL7M2CbKzohaiQpCISycykDLS6KCOigl4u\nuugq6eWivyCioJuIJAwTslKDqIwQ6yKzF1NTIzJRpzSlMlKQsqeLtQZPU3RhJw+u8/3AcPZeHJj1\n23v2nGevtddM5m/AImBOj/vUNZn5IfDTiOY5wEt1+yXg5ro9G1iUmb9n5hbga8rxOeJk5o7MXFO3\nfwU2AhPoj+z76uZxlAs/6YPcETEBmAW80NHcfG4g+PvMTNO5I2IsMDUz5wPUPHtoPPcIM4BvMnMb\n/ZH7aGBMRBwDjAaGaD/3RcCqzNyfmQeAlcCtlHxdyd1vBd+ZwLaO/e21rWXjM3MnlMIIGF/bRx6L\nIRo4FhFxNmWU8yPg9Naz12nNz4EdwPLMXE0f5AaeBh6hFLjD+iF3AssjYnVE3FfbWs99DrA7IubX\n6c3nI2KA9nN3uh1YWLebzp2Z3wFPAVspGfZk5ns0nhtYD0ytU7gDlBvas+hi7n4r+PTXD8imRMQJ\nwGLg4TrSNzJrc9kz84/MvIwyonllRFxM47kj4iZgZx3V/be/SdVU7mpKZk6mfBg8FBFTafx8U0au\nJwPP1ex7gUdpPzcAETGKMprzam1qOndEjKOM5k2kTO+OiYg7aTx3Zm6iTN8uB96iTNce+Ke3Hur3\n6LeCbwgY7NifUNtatjMiTgeIiDOAH2r7EOXuYdgRfSzq0P9iYEFmLq3NfZEdIDN/AVYAN9B+7inA\n7IjYDLwCTI+IBcCOxnOTmd/X113AEsoUTuvnezuwLTM/qfuvUQrA1nMPuxH4NDN31/3Wc88ANmfm\nj3Vq8w3gatrPTWbOz8zLM3Ma8DPlefSu5e63gm81cF5ETIyIY4G5wLIe96nbgr+OeiwD7qnbdwNL\nO9rn1tVP5wDnAR8frk7+D14ENmTmMx1tTWePiFOHV2xFxGjgesrzi03nzszHM3MwM8+lXMPvZ+Zd\nwJs0nDsiBuooNhExBpgJrKP9870T2BYRF9Sm64AvaTx3hzsoNzbDWs+9FbgqIo6PiKCc7w20n5uI\nOK2+DgK3UKbxu5e71ytTDvcXZQTkK8oDjo/2uj9dzraQspJrP+WiuRc4CXivZn4XGNfx/scoK3s2\nAjN73f//kHsKZeh7DWUY/LN6nk9uOTtwac26hrK664na3nTuEcfgGg6u0m06N+VZtuGf8XXDv79a\nz11zTKLcsK8BXqes0u2H3APALuDEjrZ+yP1kzbCWslBhVJ/kXkl5lu9zYFq3z7f/Wk2SJKlx/Tal\nK0mS1Hcs+CRJkhpnwSdJktQ4Cz5JkqTGWfBJkiQ1zoJPkiSpcRZ8kiRJjbPgkyRJapwFnyRJUuMs\n+CRJkhpnwSdJktQ4Cz5JkqTGHdPrDkjSkS4iHgBOBS4EFgATgfHAJcC8zBzqYfckicjMXvdBko5Y\nEXE/sDYzV0XEFcBy4B5gL/A2MCsz3+lhFyXJET5J+o9OycxVdXsQOJCZSyJiNDAtMz/oYd8kCXCE\nT5K6JiKeBc7KzFt63RdJ6uSiDUnqnmuBFb3uhCSNZMEnSYcoIo6KiBlRjAcupqPgi4h5PeucJHWw\n4JOkQ/cg8C5wPnAbsA/YDhARs4H1veuaJB3kM3ySdIgiYhLwCLAJ+AIYC0wHtgDfZubLveudJB1k\nwSdJktQ4p3QlSZIaZ8EnSZLUOAs+SZKkxlnwSZIkNc6CT5IkqXEWfJIkSY2z4JMkSWqcBZ8kSVLj\nLPgkSZIaZ8EnSZLUuD8BNDBkjW1LjH8AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#zt = 64, z = 16, theta=0\n", + "plot_flight_path(64, 16, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cool! Note that the plot title tells us what the calculated value of $C$ was for our input conditions. We have a value of $C$ between $0$ and $\\frac{2}{3}$ and our path is trochoidal, like we announced it would be.\n", + "\n", + "* For negative values of $C$, the resultant flight path consists of a series of loops. Let's try it out!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnIAAAGXCAYAAAA3T705AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4VFXixvHvSZMWQEQUEZAWehWkCIq6ghQVlXUFpCiK\nKKwFK4qKrgooq/5EwBVUehERFFZWUaQIShcQUJCu9E4gBJKc3x8zE2NMSGGSMzd5P88zT8idO3fe\nmwR4c84txlqLiIiIiHhPmOsAIiIiIpI9KnIiIiIiHqUiJyIiIuJRKnIiIiIiHqUiJyIiIuJRKnIi\nIiIiHqUiJyIiIuJRKnIiIiIiHqUiJ+IxxphrjTFJxphu51qWxW1297/+muAldS9Y+2WMucIYM9MY\ns9+/vQ+DlVFE5HyoyImEiBRlLK1HojHmqhSrp3VLlvO9TUumX2+MqWuMedEYU+483/O8ZSJLMG5f\nMxZoAQwC7gb+E4RtBp0xJtJ1BgDj85gxZqMxJs4Ys9MYM9QYUyiL20nv78PxDF5X0Biz1b/uO2k8\nX8UY87Ix5nt/OT9ujFltjHk2qxlFXItwHUBE/mIS8EUay39N8WeT8glr7QJjTEHgbE4GS6Ee8CLw\nLbAzl97TSRZjTBTQHHjHWvtWsLefxSyVgF5AXeCY/3EUX8Gsjy/ny84C/uFt4J/AdGAoUB14GN/3\n6m9Z3NZC4P1UyzL6Of8XcBHpl/h7gYeAz4EJ/u1dB7wC/N0Y08RaG5/FnCJOqMiJhJ5V1tpJWX2R\ntfZMToRJhyE4I13BkNNZLvW/x5FgbtQYEwZcYK2Ny8S6EfjKWkegH/CM9d8o2xhTEhgJtAFuDWbG\n7DDG1AD6Ap9Ya+9MsXw78I4x5i5r7ZQsbHJrVv4+GGMaAI8ATwJvprPaNOA1a+2JFMveN8b8CjwL\n9ARGZCGjiDOaWhXJA9I7Rs4YU94YM90Yc8z/mOFftt0YMy+NTYUZY54wxvxqjDltjPkljW2+CASO\nEZufYror3ePGUhyrdoMxZqD//U8bY9YYY/6RxvpFjDGvGGN+MMYc8K+72RgzyD/ymNUsGe5XOrk/\nArbjK4oDU0xzX+N//iJjzHD/1GG8/+O7xpgS59j/5/2FIQ74eyYyXAB8BbQHGllrZwRKHIC19iC+\nka8wYHFG28sFnf0f3061fBRwCt/UdJYYYyKNMYUzsV6Y/32+AGakt561dlWqEhcwFV9pr5XVjCKu\naEROJPQUMsZclGpZvLU2NoPX/WlUyl8mvgMuxjdi8zO+47zmAwVTvxjff2CDgALAe0A88CDwkTFm\ns7X2e/9604HSwP34pqJ+9i/fkuGewRCgEDDc//k9wGRjzAXW2nEp1iuDb/prOjARSACuBZ7CNz3X\nJgtZMrtfaXkPWI2vlHzqfwBsNMYUBb4HKgIf+Ner79/2dcaYq6y1J1Ntbyi+f3ffB44Dv5zjvQPG\nAlcBdf2lLS1rgIXW2jSnHI0xBiiR1nPpOJyyLGZRQyAJWJ5yobU23hjzI9Aoi9vrCHQFwo0xB/CV\nrQHW2rSOk+sHxAAdyN5ARVn/x33ZeK2IG9ZaPfTQIwQe+IpKEpDo/5jyMSmN9bplsOx1/7buSvU+\nQ/zrzkuxrLt/2UogPMXyy4DTwMRU2+ju3/Y1mdy3wPa3AUVSLC+Kb8TrIL5pxsDyiJQ5Uix/2f++\nDTOTJav7lU728v5tvJBq+av+930g1fKH/Ou/lEaOjSn3MxPv3d7/upczWK8s0DkT+5CZRyJQ7jx+\njtcCe9J5bqp/+xGZ3Nb3wGPALfhG8ib5M/4IFEq1bgUgFngi1T6/k8n3CgOW4Cv6VbK7/3rokdsP\njciJhJ738R3Dk9LebGynPb7/UFMfjzQU3/FDaRlurU0MfGKt3W2M2QRUycb7p2WETTGyaK09box5\nD18pagl86V+eEFjHGBMORAPhwDfAAKAxsCIL75sT+9UBOIBvKi+l/+A7+eI2/8eURtisHUT/GL4y\nMvxcK1lrd+ErOenZS9ZOMsjOz1tAIXxlKC2nU6xzzjNPAay1TVMtmmCMWYfv5+URfCOtAe/hOyEo\nuyek/B++n6v+1trN2dyGSK5TkRMJPZuttWkdv5ZVFYClqRdaaw8YY46msb7FN2KW2iEgGJcZsfwx\n9ZnSBnzTnxVTLjTGPAQ8ANTkz9NkFrgwi++bE/tVAVhurU3605tZm+gvifXTyJHpguAvsNcA66y1\n5zXV5y+PwfiZApKPRbs41eI465vuPJXGcwEF/B9Pncfbv4GvILfDX+SMMXcDNwAtUhb2zDLG/Avo\nA7xnrX39PLKJ5DoVORFJKb3/BE06y3OEMaYfvpHD/+EbKdkNnMF37NxYsn78U0jsF1krMCXxjUKe\ns/z5j3+77lzlP53idS4HUhfUVMriK8eWP76GY/Ad17gbqG6MibR/PWavDHAw5YhrVllrE4wxu/F9\nfQKXh/k3vhMc9vsv0QJwuf9jMf+yg9baY6m3Z4wZCDwHfGCtfSi7uURcUZETybu2A5VTLzTGXAwU\nP89tZ+dAeIPvemKzUi2v6d/e1hTL7ga2WWvb/mkDxrQOUpZg2ApUNcaEpSw9/pG0GP68P9lxkPSn\nKFMKTPGeS6B4ZYbFN9p4rmvypTVVu9v/cTlwI74TNJLPovWffVsP38k22ebfzuX4jp8D34k7F+Mb\noWufanWL70SJu0njciT+EvcC8JG19v7zySXiioqcSN41C3jcGNPJWjs5xfL0jo/Lilh8xSwrZ0IC\nPGiMec8/BYcxphjQG99FbRekWC8RsMYYY60NXC8tAujPX4tbdrOcr5n+PPfx5wvW9uKPM4WzzT9F\nOw24wRgTkdYolvHdzaK+tfaFDDYX1GPkMpiqnYrvWmyP8ufLofTCV7omplzZ/32tBJzyH+sXWF7C\nWns4je2/gm+k8nP/5yfxndmaWuB7MAcYDaxL9b4v4CtxY621PdPZF5GQpyInkncNwXdNr4+MMY35\n4/IjzfCN4KQuRFmZZlyO7yD85/yXOTmJbwRtWQavOwgs9V+fzeC7/MjlQE9r7ekU630CvAb8zxjz\nKVAM6IRvejV1zoyy5NT06ev4rgM33BhzJb7LjzTAN724Ed+xXCllJ8dj+MrQB8aYB1J+jYwxbYEm\nwMCMNhLsY+QyeK+fjDHDgT7GmOn4pjxr4LvTw/xUv1SAb7p1I76RuutTLB9gjGnCH3fsKAK0xXcH\nhu+Bd/3vl8Afl4VJZowp7//jFmvtjFTP9cH3ddsBzDPGdEn18n3W2q+zsNsizqjIiYQWS+amCjO8\n16q19pAx5mp8xw/d439+Pr7/LJfhuyBtRttMb9u7jDH3AE/juwJ+JL5j185V5Kx//Rb4LtFxCbAJ\n32UzpqZaN3DAeU9813DbC0zBdxzWhpR5MpEl0/uVwXqpvwbHjTHNgJfwXR6jB77rj40ABtq/XkMu\ny1PA/u/hlfj2ba4xZhdwGN/Zn19mYiTOlUfwTeX2wle+DuI71jH1WbwBaf3cz8c3Fd8N3+22EvEd\nL9gfeMtm7k4m6f19auhfXg7fz1RqCwAVOfEE45+1yFOMMTfh+8c/DN8BrEMcRxIJGf5Rq4P4ztDL\nlYO7jTHd8d2B4Tpr7cLceE8Rkfwgz92iy3921rtAa3wHUXcyxlRzm0rEDWNMgTQWB44z+yqX44iI\nSJDlxanVq/Bdh2sHgDFmCr4bSad1/SqRvO4LY8wOYBW+X9z+hu/svu+Az3I5S25f6kNEJM/Li0Wu\nDLArxee/4St3IvnRLHzHGHXAd8bgb/gOwn/Z5v5xFXnvOA4REcfyYpETET9r7Vtk/5ZFwcwxFt8J\nCCIiEkR5scj9zp9vu3O5f9mfGGM0OiAiIiKeYa39yyEqebHILQcq+68htAe4C9/1p/4iL56xm9MG\nDhzIwIEDXceQEKOfC0mLfi4kLfq5yB7f3fj+Ks8VOf/V0PviOyMvcPmRjY5jiYiIiARdnityANba\n/wFVXecQERERyUl57jpykrNatmzpOoKEIP1cSFr0cyFp0c9FcOXJOztkRop7cYuIiIiENGNMvjnZ\nQUREctkVV1zBjh07XMcQ8bzy5cuzffv2TK+vETkRETlv/tEC1zFEPC+9v0vpjcjpGDkRERERj1KR\nExEREfEoFTkRERERj1KRExEREfEonbUqIiISJCdPnmTIkCGUK1eOY8eO8fjjj//p+dWrV/Pll1/y\nzDPPpLuNzz77jPXr1xMeHs5ll11G165dczp2tqxZs4bx48czdOjQ5GUZ7X9qob6vs2bN4vjx42zZ\nsoWSJUvy0EMPZfiatL4uAZn5/meVipyIiEiQPPzww7z44ouUK1eOWrVq0bFjR8qXLw/47u/9/PPP\nc9VVV6X7+uPHj/Pyyy+zcuVKAJo2bUrbtm256KKLciV/Zr355pt89913FC9e/E/Lz7X/qZ3Pvi5Z\nsoSff/6ZI0eO0LNnz7/kCIZjx45x5513cvToUaKioihZsiTt2rVLd38g/a8LZO77nx2aWhUREQmC\nbdu2sXv3bsqVKwfAV1999af/9KdPn8511113zm0sXLiQmjVrJn9et25dvv3225wJfB769evHrbfe\n+qdlGe1/atnd1y1btjBmzBjuvfdeypUrxyeffJLNvTi3YsWKsWLFCi644AKMMSQmJmZ4iZ20vi4B\nmfn+Z4dG5ERERPy2bt3KqFGj/nQtr8CfjTE0adKEW265Jc3Xzps3j2LFijFhwgSOHDlCdHQ0PXr0\nAODQoUOEhYVRsmRJTp48me77//bbb38azSlevDibN28O3g76nc9+pudc+5+W7O7r008/Tf/+/QHY\ntGkT4eHh6a57vvsZKJqLFi3immuu4YorrsgwX1oy+/3PDhU5ERHJUcb85Rqm2Zbdiw4vX76cgQMH\nUqZMGcLCwrjpppvo0KHDX9arWLEigwYNytZ77Nu3j/Xr1zNlyhQAWrRoQfPmzalcuTKffvop999/\nP2PHjj3nNo4cOUKBAgWSP4+KiiI2NjZT75/ZfYTz28/0nGv/05Kdfd2zZw/Lli1j5cqVrFixggkT\nJvD888+nu34w9nPy5MnMmDGDN998M9vbyOz3Pzs0tSoiInleo0aN+O9//0u9evWIjIykQ4cOvPXW\nW+zbty9o7xEdHU3t2rWTPy9XrhxfffUVy5Yto3HjxpneRsqyGhcXR4kSJTL12tT72LJlS4YMGcKY\nMWOSj0PLSent/7nWz+q+zps3j/bt29OrVy+6du3K7t27adWqVY7uZ6dOnfjggw+46aabsnUbuqx8\n/7NDI3IiIpKjQuXWXa+99hr79u1j2LBhgG9a7pJLLvnTOimn4lLKzFRczZo1+e6775I/DwsLIzEx\nkWXLlnHq1CnmzJnD4sWLOX36NJ9//nma26lUqRIrVqxI/vzQoUM0aNAgW/v41ltvcd1119GgQQO6\nd+/OxIkTg7Kf6Ulv/9OTnX3dtWsX1atXB3xnvLZt25bx48fnyH5+8cUXvPrqqyxevJjo6GguueQS\nPvnkkwzPxE1t6dKlxMXFZer7ny3W2nz58O26iIgEQ6j/m/raa6/Z5557zlpr7fr16+2iRYtsmzZt\n7Pfffx+09zh9+rRt0qRJ8ufNmjWzv/7665/WGThwoH3ppZeSP9+yZYtNSkpK/vzkyZO2du3ayZ/X\nrVvX7tu3z1pr7ebNm/+0bmqp97FPnz52586d1lpr27Rpcx57lrYxY8bYHj16JH9+rv1PvZ/WZm9f\nR48ebUePHm2ttbZt27Z2x44dtm/fvjmyn3PmzEn+eiYlJdmyZcvar776Kt39CUj9dUkp9fc/Len9\nXfIv/0ufMTZEflPKbcYYm1/3PSNnz55l8+bN7Nixg507d7J3715OnDjBmTNnKF26dPJBpiIiAend\n6DsULFmyhMOHD1OsWDFefPFFrr/+erp27crUqVN56qmngvpeX375JYsXL8ZaS7Vq1ejSpUvyc9Om\nTWPQoEEYY+jfvz8dO3akQYMGfPDBB9SvXz95vQkTJrB9+3astVSsWDF5G9WrV+edd97hxhtvzNQ+\n7t27l2effZbLLruMtm3b8sUXXwRtP999910+/vhjdu3aRY8ePejXrx/R0dHp7n9a+5mdfT1+/DjP\nP/88tWvXplatWjRp0oQ+ffrw3HPP5ch+jhw5koSEBHbs2EGVKlV44IEHzrk/6X1dIO3vf1rS+7vk\nX/6XA05V5ITjx4/z7bffMnfuXJYtW8batWuJj49Pc93atWuzdu3aXE4oIqEulItcWiZNmkT58uUp\nV64cZcuWdR0nU5KSkliwYEGmL2ExbNgwWrRoQfXq1enRoweTJ0/O4YTBk5V99fJ+pkVFLpPye5E7\nfvw4M2bMYNKkScybN4+EhIQ/PV+hQgUqVapEuXLlKF26NEWLFuWCCy6gVKlSdOrUyVFqEQlVXity\nn332GWfPnqVRo0bnvNZZKPn444+5+eabKViwYKbWP3ToEB9++CHFixenVq1aNG3aNIcTBk9W9tXL\n+5kWFblMyq9FbsOGDbzzzjuMGzeOuLg4AMLDw2nSpAmtWrWiRYsW1K9fP0euki0ieZfXipwXnTx5\nksKFC7uOkSvy076mpiKXSfmtyK1evZoXXniB2bNnJy9r0aIFXbp0oWPHjiF3+xcR8RYVOZHgyGqR\n0+VH8rjt27fz5JNPJt/CpFChQnTv3p2+fftSo0YNx+lERETkfKjI5VHx8fEMHjyYwYMHc/r0aQoU\nKECfPn146qmnKFWqlOt4IiIiEgQqcnnQmjVr6Nq1K+vWrQOgc+fOvP7665QpU8ZxMhEREQkm3aIr\nD0lMTGTIkCE0atSIdevWUblyZRYsWMDEiRNV4kRERPIgjcjlEYcOHeKuu+7i66+/BuDBBx/kjTfe\nyLdn/YiIiOQHKnJ5wPr167nlllvYunUrpUqVYuzYsdx0002uY4lIPlK+fPm/3M9SRLIuq9c11NSq\nx82ePZsmTZqwdetWGjRowIoVK1TiRCTXBW6z5IXH8OHDk0vnI488wtmzZ51nyu7j+PHjtG/fHoCI\niAjGjx/vPJMe5/fYvn17lv7uqch52Pjx4+nQoQOxsbF06tSJRYsWeeZWMyIiLgwaNIg+ffpgreX1\n11/n7bffJiLCu5NT0dHRzJw5k8cff5yEhAS6devG6NGjXceSXKQi51EjRoygW7duJCYmMmDAACZO\nnEihQoVcxxIRCVmvvfYazz77LMYY/vOf//Dkk0+6jhQU4eHhDB06lNdeew1rLffffz/Dhw93HUty\nie7s4EFDhw5N/gfojTfe4IknnnCcSEQktI0cOZKHHnoIYwwTJkygc+fOriPliLfffpvHHnsM8O1z\n7969HSeSYNEtulLxapH7z3/+Q+/evTHG8N5779GrVy/XkUREQtqkSZO4++67sdby/vvvc//997uO\nlKNSltaPP/6Yjh07uo4kQaAil4oXi9yUKVPo3Lkz1lpGjBjBgw8+6DqSiEhIW7BgAX/7299ISEhg\nyJAhPPXUU64j5YpXX32VAQMGEBUVxZw5c7j++utdR5LzpCKXiteK3Ny5c2nbti0JCQm8+uqrPPvs\ns64jiYiEtG3bttGoUSMOHTrEY489xptvvuk6Uq6x1vLII48wbNgwoqOjWbp0KdWrV3cdS86Dilwq\nXipyv/zyC40bN+bYsWM8/vjjvPHGG7pek4jIOcTGxtKsWTPWrVvHTTfdxOzZswkPD3cdK1clJSVx\n1113MW3aNKpUqcLSpUu58MILXceSbFKRS8UrRe7IkSM0adKETZs2cdttt/HJJ58QFqaTjUVE0mOt\n5a677uLjjz+matWq/PDDDxQvXtx1LCdOnjxJ8+bN+fHHH2ndujX//e9/812hzSvSK3JqBCEsMTGR\nTp06sWnTJurUqcO4ceNU4kREMjB69Gg+/vhjihQpwueff55vSxxA4cKFmTlzJiVLluTLL7/k+eef\ndx1JgkytIIQNGjSIL7/8kosvvpjPP/+cIkWKuI4kIhLSNmzYwCOPPALAe++9R0xMjONE7pUvXz55\nNmfw4MF88803riNJEKnIhahFixbx4osvAjBhwoQs33tNRCS/iY+P56677iIuLo7u3bvTpUsX15FC\nxrXXXssLL7yAtZauXbty4MAB15EkSFTkQtChQ4fo3LkzSUlJPPPMM7Rq1cp1JBGRkPfqq6+ybt06\nKleuzLBhw1zHCTnPPfccLVq0YM+ePdx777144ThxyZhOdghBnTp1YsqUKTRt2pQFCxYQGRnpOpKI\nSEhbs2YNDRs2JCEhgYULF9KiRQvXkULSzp07qVu3LkePHmXcuHF07drVdSTJJJ3s4BGffvopU6ZM\noXDhwkyYMEElTkQkAwkJCdx7770kJCTQp08flbhzKFeuHG+99RYAjzzyCHv37nWcSM6XilwIOXTo\nUPLdGoYMGULFihUdJxIRCX0jRoxg1apVlC9fnkGDBrmOE/K6d+9O69atOXLkCH379nUdR86TplZD\nSPfu3Rk3bhzXXnst8+bN06VGREQycODAAapUqcKxY8f47LPPuOWWW1xH8oQdO3ZQq1YtYmNjmT17\n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\nli5dyh133MG0adNCqiilnFIdNWoU9913n+tIkgs0tZoPXHnllTzxxBNYa+nevbtu3yUikg0RERFM\nmjSJ6Ohopk+fzujRo11HSpZ6SrVnz56uI4ljGpHLY06fPs2VV17Jhg0bPHGwrohIqJo4cSJ33303\nBQsWZOXKlVSvXt11JCZNmkSXLl2Ijo7mp59+oly5cq4jSS5Jb0RORS4PWr16NY0bN+bs2bPMmTOH\nm266yXUkERFP6tatG+PHj6du3br88MMPFChQwFmWnTt3UrduXY4ePaop1XxIU6v5SP369Xn55ZcB\nuPfeezl06JDjRCIi3jR8+HAqVarEmjVreOqpp5zlSExMpFu3bhw9epT27dtrSlWSqcjlUU8++STN\nmzdnz5499O7dW/diFRHJhujoaCZPnkxkZCTDhg3j448/dpLj9ddfZ8GCBVxyySV88MEHIXXyhbil\nqdU8bNu2bdSpU4fY2FjGjBlD9+7dXUcSEfGkYcOG8fDDD1OkSBGWL19OtWrVcu29ly9fTrNmzUhI\nSNDhMvmYplbzoQoVKjBs2DAAHnroIX7++WfHiUREvKlv377cddddxMbG0rFjx1y78HpsbCxdunQh\nISGBRx55RCVO/kIjcnmctZZu3boxYcIEateuzdKlSylYsKDrWCIinhMbG0ujRo34+eef6dKlC+PH\nj8/xKc577rmHMWPGULt2bZYtW+b0ZAtxSyNy+ZQxhhEjRhATE8O6det47LHHXEcSEfGkIkWKMH36\ndAoXLszEiRMZOXJkjr7fRx99xJgxYyhQoACTJk1SiZM0aUQun/jxxx9p0qQJ8fHxTJkyhX/84x+u\nI4mIeNLkyZPp3LkzERERfPPNN1xzzTVBf4+1a9fSuHFjTp8+zYcffsg999wT9PcQb9GIXD5Xr149\n3nrrLQDuv/9+fv31V8eJRES8qVOnTvTr14+EhATuuOMOduzYEdTtHz9+nL///e+cPn2ae+65RyVO\nzkkjcvmItZY777yTTz75hNq1a/P9999TuHBh17FERDwnISGB9u3b8+WXX1KnTh0WL15MkSJFznu7\n1lo6derE1KlTqV27Nj/88AOFChUKQmLxOo3ICcYYPvjgg+Tj5e6//35dX05EJBsiIiKYMmUKMTEx\nrF27lh49epCUlHTe2x0xYgRTp06lSJEiTJs2TSVOMqQil88ULVqUmTNnUqRIESZPnszbb7/tOpKI\niCcVL16czz//nGLFijF9+vTkO+pk18KFC3n00UcBGD16NFWrVg1GTMnjNLWaT3366afccccdhIeH\n8yGE+i0AACAASURBVPXXX9OyZUvXkUREPGnOnDm0a9cOay0TJ06kc+fOWd7Gzp07adiwIQcOHODx\nxx9n6NChOZBUvExTq/Int99+O8888wyJiYnceeed7Nq1y3UkERFPatOmDW+++Sbgu+7bggULsvT6\nU6dO0aFDBw4cOMCNN97I4MGDcyKm5FEakcvHEhMTadOmDXPnzqV+/fosWrRIJz+IiGTTI488wjvv\nvEPx4sVZsmQJ1atXz/A11lq6dOnC5MmTqVixIsuXL6dEiRK5kFa8RiNy8hfh4eFMnjyZypUrs3r1\narp16xaUg3VFRPKjN998kw4dOnD06FHatGnD3r17M3zN0KFDmTx5MkWKFOHzzz9XiZMsU5HL5y66\n6CJmzZpFsWLF+PTTTxkwYIDrSCIinhQeHs7EiRNp3LgxO3bsoF27dsTGxqa7/syZM3n66acBGD9+\nPDVr1sytqJKHqMgJ1apV45NPPiE8PJxBgwYxduxY15FERDypUKFCfP7551SsWJFVq1Zxxx13cObM\nmb+st3z5cjp37oy1lldeeYUOHTo4SCt5gY6Rk2TvvfceDz74IJGRkXzzzTe0aNHCdSQREU/atGkT\nzZs358CBA9x5551MmjSJ8PBwAHbs2EHjxo3Zt28f99xzDx988AHG/OXQJ5E/Se8YORU5+ZPAwbol\nSpRg8eLFVKtWzXUkERFPWrVqFddddx3Hjx+nV69evPfeexw/fpyrr76a9evXc/311zNnzhyioqJc\nRxUPUJFLRUUubQkJCdx2223Mnj2b8uXLs2TJEi677DLXsUREPGnhwoW0bt2a06dP8/jjj7NmzRq+\n/vprqlevzpIlSyhevLjriOIRKnKpqMil7+TJk9xwww0sXbqUunXrsmDBAooVK+Y6loiIJ82ePZtb\nb701+aoApUqVYunSpVxxxRVug4mn6PIjkmmFCxdm9uzZxMTEsGbNGm6//Xbi4+NdxxIR8aR27dpx\n0UUXJX9+0003qcRJ0KjISZpKlizJ//73Py699FLmzZsXtBtCi4jkN4MHD+bAgQPJn48bN46RI0c6\nTCR5iYqcpKtChQrMmTOH6OhopkyZwsMPP4ymo0VEMm/UqFE8++yzGGOYOnUqw4YNA+Chhx7i/fff\n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\nnfuBvr+KXDIqcpLRXL9+nY0bN7J69Wo2btzIkSNH7nm8YMGCNGrUiKeffhofHx9q1qypk9zTIZfL\nxaFDh9zF7bvvvuPcuXP3PKdYsWL4+vri6+tL8+bNdUhdJB2LiooiIiKCyMhI+vbt+8DfR0UuGRU5\nyehOnz7Nt99+y8aNG9m4cSMnT5685/Hs2bNTu3ZtfHx88PHxoW7duhQvXlwzYtPYxYsXCQ8Pd99+\n+OEH9yXd7nrooYdo2LAhDRs2pEmTJjzxxBP6dxLJZFTkklGRk8zEWsvx48cJDQ1l27ZthIWF3XMt\nwruKFClCzZo177mVKVNGpSEFWGs5e/Yse/bsYe/evezdu5ft27ffc57jXcWLF6dBgwY0atSIRo0a\nUalSJf0biGRyKnLJqMhJZnf58mXCw8MJCwsjLCyMnTt3Eh0d/ZvneXt7U6VKFapUqULlypXdH4sV\nK6ZycR9RUVEcPnyYQ4cOsX//fndxu3Tp0m+emydPHmrXrk29evWoV68edevWpWTJkg6kFpH0TEUu\nGRU5kXtZa4mMjGTXrl3u286dO7l48eLvPt/b25uKFSvy2GOP8eijj/LYY4+5b0WLFs3QJc9aS1RU\nFJGRkURGRnL8+HGOHDnCoUOHOHTo0O8WNoACBQpQrVo1qlevTrVq1ahZsyaVK1fW7GIR+UMqcsmo\nyIn8MWst58+fZ//+/Rw4cOCej5cvX77v1+XKlYtSpUpRokQJSpYsSYkSJdz3ixcvTuHChSlcuDD5\n8uVLd4UvNjaW8+fPc+7cud98PH36tLu8xcTE3Pd75M2bl4oVK7pvTz75JNWrV6dkyZLp7r9XRDyD\nilwyKnIiD+5uwTt69Cg///wzP//8M8eOHXPfv98eqeSyZcvmLnWFCxfG29ubvHnzki9fvns+5s2b\nlxw5cpAtWzb3LXv27GTLlo2sWbPicrlwuVzcuXPHfd/lchEbG0tMTAwxMTHcvHnTfT8mJobo6Ggu\nX77M5cuX+fXXX933r1+//qeye3t7U6ZMGcqUKUPp0qUpX748FStWpEKFCpo0IiIpTkUuGRU5kdRz\n9epVTp8+zenTpzlz5gxnzpxx3z979iyXLl0iKiqKGzduOB31N7y8vHj44YcpVqwYxYoVo2jRou77\nxYsXp2zZspQuXRpvb2+no4pIJqIil4yKnIjzbt68yaVLl7h06RIXL17kypUrXL9+nWvXrnHt2jX3\n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\n8zlOaAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,numpy.pi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can play around with the input values and see what kind of behavior results. Just note that any value of $C > \\frac{2}{3}$ will result in $\\cos \\theta > 1$, which doesn't exist. Python will probably throw a few errors if you hit that condition, but just try again!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The last case is $C = 0$. Take another look at Equation (16) and plug in $C = 0$, what should happen? It looks like it will just reduce to \n", + "\n", + "$$R = 3z_t$$\n", + "\n", + "It's a constant radius of curvature! In fact, this solution is a series of semi-circles, with a cusp between them. One way to force $C = 0$ that we can figure out from Equation (15), is to make:\n", + "\n", + "\n", + "$$z = 3z_t\\ \\ \\ ,\\ \\ \\ \\theta = 0$$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmwAAAGXCAYAAAAOKAxiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XecVNX9//HXoYh0BBUFpSgqikLEWNBIMagRBcGCEiv6\njb23WGIkiYVYY0v5RaNGRCQSC0qkaEABE8EGIihKFQIICkRAyu75/TEDWddd2IXdvXd2X8/H4z52\n5syZO5/rZeXNOfeeCTFGJEmSlF7Vki5AkiRJm2dgkyRJSjkDmyRJUsoZ2CRJklLOwCZJkpRyBjZJ\nkqSUM7BJkiSlnIFNkiQp5QxsUg4IIXQJIeSHEM7eXFsp93lO9v2dy67S5JXVcYUQWoUQXgwhLMnu\n7y9lVaMklZaBTUpQgdBV1JYXQjikQPeivpZkW7+qpMTvDyF0CCHcFkJosY2fuc1KUEtZfIXLU8CR\nwF3AmcCfymCfZS6EULOCPy+EEK4OIUwPIawJIcwLIdwbQqhTXvsoTf+yqE9KoxpJFyAJgMHAiCLa\nPyvwOBR8IcY4LoRQG1hfnoUV8APgNuCfwLwK+sxEagkhbAf8CHgoxvhAWe+/lLXsCVwAdABWZLfl\nZILkgWTq/HUFlvQ74HJgGHAvsC9wBZlz0r2c9lGa/mVRn5Q6BjYpHd6LMQ4u7ZtijOvKo5hiBMpm\n5KoslHctu2Q/4+uy3GkIoRpQK8a4pgR9a5AJZacA1wA3xuyXP4cQdgT+ABwHnFiWNW6hpv2Ay4Dn\nY4x9C7TPAR4KIZweYxxSlvsoTf+yqE9KK6dEpRxV3DVsIYSWIYRhIYQV2e2FbNucEMIbReyqWgjh\nuhDCZyGEb0MInxSxz9uAjddwjS0wbVvsdV0FriX7cQhhQPbzvw0hfBhCOK2I/vVCCLeHEP4VQvgy\n23dmCOGu7EhiaWvZ4nEVU/cTwBwygXBAgenpztnXm4QQHs1Ota3N/nwkhNB4M8d/awjhM2ANcGoJ\naqgFjAJOAA6OMb6wMawBxBiXkhlBqgZM2NL+ytBPsz9/V6j9z8BqMlPHZb2P0vQvi/qkVHKETUqH\nOiGEJoXa1sYYv9nC+74zypQNDeOBnciMwMwgcx3WWKB24TeTGUW6C9ge+COwFrgYeCKEMDPG+Ha2\n3zBgV+BnwO3Z/QJ8vsUjg98CdYBHs8/7A8+GEGrFGP9aoF9z4LzsZz0DbAC6ADeQmc46rhS1lPS4\nivJH4H0yf+n/PbsBTA8hNADeBvYAHs/2OzC7724hhENijKsK7e9eMv+v/X/ASuCTzXz2Rk8BhwAd\nsuGsKB8Cb8YYi5wSDyEEoHFRrxXjq4KhsBg/BPKBSQUbY4xrQwgfAAeX4HNKu4/S9C+L+qR0ijG6\nubkltJEJJPlAXvZnwW1wEf3O3kLb3dl9nV7oc36b7ftGgbZzsm3vAtULtDcDvgWeKbSPc7L77lzC\nY9u4/9lAvQLtDciMYC0lMz24sb1GwToKtP86+7k/LEktpT2uYmpvmd3HLwu135H93AsLtV+S7f+r\nIuqYXvA4S/DZJ2Tf9+st9Nsd+GkJjqEkWx7QogS1TQH+U8xrz2X3U6Ms91Ga/mVRn5tbWjdH2KR0\n+H/A3wq1LdqK/ZxA5i+swtfp3AtcX8x7Ho0x5m18EmNcGEL4FNhrKz6/KL+PBUYKY4wrQwh/JBN+\nugIjs+0bNvYJIVQH6gPVgdeBXwCHApNL8bnlcVy9gS/JTLEV9CcyN0H0yf4s6PcxxrWl+IyryYSo\nRzfXKcY4n8zNKsVZROkusi/Jn7c6ZEYri/JtgT4ry3AfpelfFvVJqWRgk9JhZoyxqOvLSqs18O/C\njTHGL0MIy4voH8mMgBW2DCiL5Tsi/5uyLOhjMtOWexRsDCFcAlwItOO719hGYIdSfm55HFdrYFKM\nMf87HxZjXjYMHlhEHTNLuvNsUO0MTI0xLt6GOsmGxLL4M1XQajLT7UXZvkCfstxHafqXRX1SKhnY\nJOUV0x6KaS8XIYRryIwEvgY8CCwE1pG5tu0pSn+TVCqOi9IFhB3JjCpuNuRlr0/rtrmQn70jtbjw\nUpQvCwfRIiwE9g0h1Izfv3auObC04EhpGe2jNP3Loj4plbxLVKpc5gBtCjeGEHYCGm3jvrdmGY1A\nZh2swtpl9zerQNuZwOwYY48Y419ijK9lA8mSMqqlLMwC9smGoU2yI2N7893j2RpLKX5Kr6DeZMLs\n5uwO/KeE20JgtxJ87iQyf28UXNB5412tP6DQxf5ltI8t9Z9cir4lqU9KJQObVLkMB3YNIfQr1F7c\n9Wul8Q2ZAFaaOw8BLs7eXQlACKEhcBGZxV/HFeiXB8Ts6NHGvjWAm/h+QNvaWrbVi2RGrf6vUPsF\n2fa/f+8dpZC95u5vwBHZY/+ekPl2hwNjjOO3sLuN17CVZDuakl3D9lz251WF2i8gcxfyMwXqrBFC\n2CeEsPvW7qOE/Qdtw76lnOGUqFS5/JbMWlRPhBAO5X/LehxO5mL5wsGnNNODk8hcDH9LdvmQVWRG\nxN7ZwvuWAv/Orm8WyCzrsRtwfozx2wL9ngfuBF4LIfwdaAj0IzOSVLjOLdVSXtOed5NZR+3REMJB\nZJb16EhmOZLpwD2F+m9NHVeTWVvt8RDChQX/G4UQegCHAQO2tJPyuIYtxvhRCOFR4NIQwjAy386x\nH5lvFhgbY3y2QPfmZP6bjAWO2sp9lKp/afct5RIDm5S8SMmm+Lb4XaIxxmUhhCOA+8gEo8j//sJ8\nh8zCrVvaZ3H7nh9C6A/8HPg9UJPMtWWbC2wx2/9IMktfNAU+JbMcxXOF+t6d/Xk+mTXQFgFDgCfJ\n3KRQcOHYLdVS4uPaQr/C/w1WhhAOB34F9ALOBRZnaxgQv78GW6mnbrPn8CAyxzY6hDAf+IrMXY4j\nY4y/LO0+y9iVZG7ouADoQSaQP8j3746F4v9sl2Yfpe1f2n1LOSHEmJZvmilaCOFxMksVLI4xts+2\n7UBm6LslmWt2+sYYVyRWpJRy2VGopcAfY4yXVNBnnkPmGwm6xRjfrIjPlKTKKheuYXsCOLZQ243A\nmBjjPmSG/G+q8KqklAohbF9E88brwEZVcDmSpDKQ+inRGOP4EELLQs0nklnlHTLTIGPJhDhJMCKE\nMBd4j8w/yroDx5P5yqqXKriWil5CQ5IqpdQHtmLsvHFRyRjjohDCzkkXJKXIcOBsMks/1Aa+IHMx\n/K9jxV8Dke5rLiQpR6T+GjaA7Ajb8ALXsH0VY2xc4PVlMcbCX5wtSZJUKeTqCNviEELTGOPiEMIu\nFL2wJiGE9KdRSZKkrBhjkZeS5MJNB5C5DqbgAbxM5nZ6gHPYzHU5xX3rfXlst912W4V+npvnz81z\nVxk2z19ub56/sts2J/WBLYQwGJgI7B1CmJdde2kgcHQI4RPgx9nnkiRJlVLqp0RjjD8t5qXuFVqI\nJElSQlI/wpZLunbtmnQJ2gaev9zlucttnr/c5vmrGDlxl+jWCiHEynx8kiSp8gghEIu56SD1U6KS\npHRo1aoVc+fOTboMKee1bNmSOXPmlOo9jrBJkkok+6//pMuQcl5xv0ubG2HzGjZJkqSUM7BJkiSl\nnIFNkiQp5QxskiRJKeddopIkbYUPP/yQp59+mnvvvXdT26pVq/jtb39LixYtWLFiBddee22x73/p\npZeYNm0a1atXp1mzZpx11lkVUfZWef/99xk5ciQ33ngjAMOHD+eLL75g7dq1tGjRgpNOOmmz70/7\nsZa2vuL6l+txJv29WeX8nVxRklQ2/H/q/9x3332xT58+sX///t9pP++88+LcuXNjjDG2a9cuzpkz\np8j3r1ixInbs2HHT88MOOywuXbq0/AreBvn5+fH444+Pv/rVr2KMMc6fPz/ec889m14///zz4zff\nfFPs+7flWCdMmBAff/zxeO+998avv/56K49g80pbX3H9S7Of4n6Xsu1FZhqnRCVJKqVrrrmGE088\n8Ttts2fPZuHChbRo0QKAUaNG0bJlyyLf/+abb9KuXbtNzzt06MA///nP8it4GwwbNoxu3bptev7l\nl18yZswY1q9fD0C9evXYbrvtin3/1h7r559/zpNPPsl5551HixYteP7557fhKIpX2vqK61/e59Qp\nUUlSlTNr1iz+/Oc/f2c9rI2PQwgcdthh9OrVq1T7fOONN2jYsCGDBg3i66+/pn79+px77rlF9v3i\niy9o1KjRpueNGjVi5syZW308xdnW41y2bBnVqlVjxx13ZNWqVQAceOCB5Ofn88Mf/pALLriAY445\nhpo1axa7j6091p///OfcdNNNAHz66adUr169XI6ztPUV13+HHXYo13NqYJMklYkQilzvs9Q2/oW7\nNSZNmsSAAQNo3rw51apV4yc/+Qm9e/f+Xr899tiDu+66a1vK/J7Fixczbdo0hgwZAsCRRx7Jj370\nI9q0afO9vl9//TXbb7/9pufbbbcd33zzTYk+p6THCNt+nH//+9/52c9+xlNPPfWd9htvvJGBAwdy\n/fXX87vf/W6z+9iaY/3Pf/7DO++8w7vvvsvkyZMZNGgQt956a7H9t+U4S1vf5vpv7TktCadEJUmV\nxsEHH8yrr77KD37wA2rWrEnv3r154IEHWLx4cbl/dv369TnggAM2PW/RogWjRo0qtm/BYLpmzRoa\nN25cos8pfIxdu3blt7/9LU8++STvvvvuth1EAe+88w6HHnro99pnzpzJuHHjGDVqFC+//DK33347\nb7/9drH72ZpjfeONNzjhhBO44IILOOuss1i4cCHHHHNMuRxnaesrrv+2nNOScIRNklQmtmVkrCzd\neeedLF68mIcffhjITKc1bdr0O30KTqEVtC1Tou3atWP8+PGbnlerVo28vLwi++65555Mnjx50/Nl\n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\nSZISMm/ePPr160d+fj633norJ5xwQtIlSZVKoiNsIYTRIYQpBbap2Z89AWKMv4gxtiAzBXp5krVK\nkor27bffcsopp7B06VKOPfZYbrvttqRLkiqdREfYYoxHl7DrYOBVYACZEbXdC7y2W7atSAMGDNj0\nuGvXrnTt2rWUVUqSihNj5IILLmDSpEm0atWKwYMHU7169aTLknLC2LFjGTt2bIn6pvmmgzYxxs+y\njy8Hjowx9i1w08GhZKZCR+NNB5KUiPvuu4/rrruOunXrMnHiRNq3b590SVLO2txNB2m+hm1gCGFv\nMjcbzAUuAogxfhxCGAp8DKwHLjGVSVLFe+2117jhhhsA+Otf/2pYk8pRakfYyoIjbJJUPj755BMO\nPfRQVqxYwW233fady08kbZ3NjbAZ2CRJpbJs2TIOO+wwPvvsM/r06cPzzz9PtWqpXSVKyhkGNklS\nmVi7di1HH300b731FgceeCBvvvkm9erVS7osqVLIyYVzJUnpEmPkZz/7GW+99RbNmjVj+PDhhjWp\nghjYJEklcscdd/D0009Tt25dXnnlFZo3d81yqaI4JSpJ2qJBgwZx1llnEULgpZdeomfPnkmXJFU6\nTolKkrba6NGj6d+/PwAPPPCAYU1KgCNskqRivf/++3Tu3JlvvvmG6667jnvuuSfpkqRKy7tEJUml\nNmfOHDp16sSiRYvo168fgwYNcvkOqRwZ2CRJpfLll19y5JFH8sknn3DUUUcxYsQIatWqlXRZUqVm\nYJMkldjKlSvp1q0b7733Hu3bt+fNN9+kYcOGSZclVXredCBJKpE1a9bQq1cv3nvvPfbcc09Gjhxp\nWJNSwMAmSQJgw4YNnH766YwbN45mzZoxevRodtlll6TLkoSBTZIE5OXl0b9/f15++WUaN27MqFGj\naN26ddJlScoysElSFZefn89FF13EoEGDqFu3LiNGjKBdu3ZJlyWpAAObJFVhMUauvPJKHnvsMWrX\nrs2rr77KoYcemnRZkgoxsElSFRVj5Prrr+eRRx5hu+2248UXX6RLly5JlyWpCAY2SaqCYozccsst\n3HfffdSoUYNhw4ZxzDHHJF2WpGLUSLoASVLFijFy8803M3DgQKpXr86QIUM44YQTki5L0mYY2CSp\nCokxcuONN3L33XdvCmsnn3xy0mVJ2gIDmyRVETFGbrjhBu69915q1KhhWJNyiIFNkqqAGCNXX301\nDz74IDVq1GDo0KH06dMn6bIklZCBTZIquby8PC688EIef/xxatasydChQ+ndu3fSZUkqBQObJFVi\n69ev5+yzz2bIkCFsv/32vPDCC/zkJz9JuixJpWRgk6RK6ttvv+W0007j5Zdfpn79+rzyyit07tw5\n6bIkbQUDmyRVQitXrqRPnz688cYb7LDDDowcOZKDDz446bIkbSUDmyRVMosXL6ZHjx6899577LLL\nLowcOZL27dsnXZakbWBgk6RKZPbs2RxzzDF89tlntGnThpEjR7LHHnskXZakbeRXU0lSJfHhhx9y\n+OGH89lnn3HggQcyfvx4w5pUSRjYJKkSGD16NEceeSSLFi2iW7dujB07lqZNmyZdlqQyYmCTpBz3\n5JNP0qNHD/773//St29fRowYQYMGDZIuS1IZMrBJUo6KMfKrX/2K/v37s2HDBm644QaeffZZtt9+\n+6RLk1TGvOlAknLQunXruOCCC3jqqaeoVq0aDz/8MJdccknSZUkqJwY2ScoxS5cu5aSTTuKtt96i\nTp06DBkyhJ49eyZdlqRyZGCTpBzy8ccf07NnT2bNmkWzZs0YPnw4HTt2TLosSeXMa9gkKUeMHDmS\nTp06MWvWLA466CAmTZpkWJOqCAObJKVcjJH777+fHj16sHLlSk455RTefPNNmjVrlnRpkiqIgU2S\nUmz16tWcddZZXHvtteTn5/OLX/yC5557jjp16iRdmqQK5DVskpRSc+fOpU+fPrz//vvUrVuXp556\nipNPPjnpsiQlwMAmSSn0z3/+k759+7J06VL23HNPXnzxRfbff/+ky5KUEKdEJSlF8vPzueuuu+je\nvTtLly7l2GOPZdKkSYY1qYozsElSSnz99deceOKJ3HzzzZuuV3v11VfZYYcdki5NUsKcEpWkFHjv\nvfc45ZRTmD17NjvssANPP/00xx9/fNJlSUoJR9gkKUExRh5++GE6derE7NmzOeigg3jvvfcMa5K+\nw8AmSQn56quvOOmkk7jiiitYt24dF110EePHj6dVq1ZJlyYpZZwSlaQETJw4kX79+jFv3jwaNmzI\nn//8Z0499dSky5KUUo6wSVIF2rBhA7fffjudO3dm3rx5HHroobz//vuGNUmb5QibJFWQ2bNnc9ZZ\nZzFhwgQArr/+eu644w5q1qyZcGWS0i71I2whhGtDCPkhhMYF2m4KIcwMIUwPIRyTZH2StCUxRp56\n6ik6dOjAhAkTaNasGaNHj+buu+82rEkqkVSPsIUQdgOOBuYWaNsX6AvsC+wGjAkh7BVjjMlUKUnF\nW7p0KRdffDHPP/88ACeffDJ/+tOfaNKkScKVScolaR9hewC4vlDbicCQGOOGGOMcYCZwSEUXJklb\n8uKLL9KuXTuef/556tWrxxNPPMHf/vY3w5qkUkttYAsh9ALmxxinFnqpOTC/wPMF2TZJSoWvv/6a\ns846iz59+rBkyRK6dOnChx9+yLnnnksIIenyJOWgRKdEQwijgaYFm4AI/AK4mcx0qCTljFdeeYUL\nL7yQhQsXUrt2bQYOHMhll11GtWqp/fexpByQaGCLMRYZyEII+wOtgA9D5p+juwHvhRAOITOi1qJA\n992ybUUaMGDApsddu3ala9eu21q2JH3PkiVLuPLKKxkyZAgAnTp14sknn2TvvfdOuDJJaTV27FjG\njh1bor4hF67VDyHMBjrGGL8OIewHPAMcSmYqdDRQ5E0HIQTvRZBUrmKMPPPMM1x11VUsW7aM2rVr\nc/vtt3PllVdSvXr1pMuTlENCCMQYi7xuItV3iRYQyUyXEmP8OIQwFPgYWA9cYiqTlITZs2dz6aWX\n8o9//AOA7t2786c//Yk99tgj4cokVTY5McK2tRxhk1Qe1q1bx3333cdvfvMb1qxZQ6NGjbj//vu9\nqUDSNqkMI2ySlArjxo3j4osvZvr06QD069eP+++/n1122SXhyiRVZt62JEklsGjRIs455xy6du3K\n9OnT2WuvvRg9ejSDBw82rEkqdwY2SdqMjdOfe++9N3/961+pVasWAwYMYMqUKXTv3j3p8iRVEU6J\nSlIxRo0axZVXXsmMGTMAOOGEE3jggQdo06ZNwpVJqmocYZOkQj799FN69+7Nsccey4wZM9hrr714\n9dVXGT58uGFNUiIMbJKUtWzZMq644gratWvHSy+9RN26dRk4cCBTp06lR48eSZcnqQpzSlRSlbd2\n7VoeeeQRbr/9dpYvX04IgfPPP5/f/OY37LrrrkmXJ0kGNklVV15eHoMHD+aXv/wlc+bMATKL3953\n3320b98+2eIkqQADm6QqJ8bIq6++ys0338zUqVMB2G+//bjnnns47rjjXPxWUup4DZukKuWtt96i\nc+fO9OzZk6lTp7L77rvzxBNPMGXKFHr06GFYk5RKjrBJqhImTpzIbbfdxpgxYwBo0qQJv/jFL7jo\noovYfvvtE65OkjbPwCapUvv3v//NbbfdxsiRIwFo0KABV199Nddccw0NGjRIuDpJKhkDm6RKafz4\n8dxxxx289tprANSvX58rr7ySa665hh122CHh6iSpdAxskiqNGCOjRo3ijjvu4K233gKgbt26XHHF\nFVx77bU0adIk4QolaesY2CTlvLy8PF588UUGDhzI5MmTAWjUqBFXXHEFV1xxhUFNUs4zsEnKWatX\nr+bJJ5/k/vvv5/PPPwdgp5124pprruGSSy7xGjVJlYaBTVLOWbJkCY8++iiPPvooy5YtA6B169Zc\nc801nHfeedSpUyfhCiWpbBnYJOWM9957j4ceeohnn32WdevWAXDwwQdz/fXXc9JJJ1G9evWEK5Sk\n8mFgk5Rq69ev54UXXuChhx5iwoQJAIQQ6NmzJ9dddx1HHnmki91KqvQMbJJSaf78+Tz22GM89thj\nLFy4EMisoXb++edz2WWXscceeyRcoSRVHAObpNTIy8tj1KhR/PGPf+SVV14hPz8fgLZt23L55Zdz\n9tlnU69evYSrlKSKZ2CTlLg5c+bw5JNP8uSTTzJ37lwAatasyamnnspFF11Ely5dnPaUVKUZ2CQl\nYvXq1bzwwgv85S9/4Y033tjU3rp1ay688EL69+/PzjvvnGCFkpQeBjZJFSY/P59x48YxaNAgnn/+\neVauXAnA9ttvz8knn8x5551H165dqVatWsKVSlK6GNgklasYI1OnTmXQoEEMHjyYBQsWbHrt4IMP\n5vzzz+e0006jUaNGCVYpSelmYJNULqZNm8bQoUMZOnQoM2bM2NTeqlUrzjzzTM444wzatm2bYIWS\nlDsMbJLKRIyRjz76iGHDhjF06FCmT5++6bXGjRtz2mmnceaZZ9KpUydvIJCkUjKwSdpqeXl5TJw4\nkRdffJEXX3yRWbNmbXqtcePG9OnTh759+9KtWzdq1qyZYKWSlNsMbJJKZcWKFYwePZoRI0YwfPhw\nli5duum1nXbaiZ49e9K3b1+OOuooQ5oklREDm6TNijEybdo0RowYwYgRI5gwYQIbNmzY9Pqee+5J\n79696d27N506dfL7PCWpHBjYJH3PggULeP311xkzZgxjxozhP//5z6bXqlevTufOnenRowfHH388\n7dq185o0SSpnBjZJLF68mDfffJM333yTN954g48//vg7rzdt2pTjjjuOHj16cPTRR7sEhyRVMAOb\nVMXEGJkzZw4TJ07kzTffZNy4cXzyySff6VO3bl26du1K9+7d6d69u6NokpQwA5tUya1atYp3332X\nt99+m7fffpt//etfLF68+Dt96tSpw+GHH06XLl3o0qULhx56KNttt11CFUuSCjOwSZXI6tWr+eCD\nD3j33XeZPHky7777LtOnTyc/P/87/Zo0aUKnTp340Y9+RJcuXTjooIO8o1OSUszAJuWg/Px85syZ\nw5QpU5gyZQpTp05lypQpzJw5kxjjd/pWr16dDh060KlTp01bmzZtnOKUpBxiYJNS7JtvvuHzzz/n\nk08+YcaMGUyfPp0ZM2bwySefsGbNmu/1r169Ou3ateOggw7ihz/8IQcddBDt27endu3aCVQvSSor\nBjYpQWvWrOGLL75g3rx5zJ8/nzlz5vD5559v2pYsWVLse3fddVcOOOAA2rdvv2lr27YttWrVqsAj\nkCRVBAObVMa+/fZbli1bxldffcWyZcv48ssvWbRo0Xe2//znP3zxxRd8+eWXm91XrVq1aN26Nfvs\nsw9t27albdu27Lvvvuyzzz4urSFJVYiBTVXe119/zauvvkp+fj55eXmbtvz8fDZs2MDatWv59ttv\nv7OtWrWKlStX8t///nfTzxUrVvDVV18VOVVZnBo1arDbbrvRokULdt99d1q0aMGee+65aWvevDnV\nqlUrx6OXJOWCUPgC5cokhBAr8/GpbEyZMoUOHTqU2f5q1qxJkyZNaNKkCY0bN2bHHXdk1113ZZdd\ndtm0NW3alN13352mTZsayCRJAIQQiDEWeUeYI2yq8ho3bswZZ5xB9erVqVat2nd+Vq9ene233/57\nW506dWjQoAH169f/zs/GjRtTt25d78CUJJUpR9gkSZJSYHMjbM7FSJIkpZyBTZIkKeUMbJIkSSln\nYJMkSUq51Aa2EMJtIYQvQgjvZbefFHjtphDCzBDC9BDCMUnWKUmSVN5SG9iy7o8xdsxurwGEEPYF\n+gL7AscBvw8pWUNh7NixSZegbeD5y12eu9zm+cttnr+KkfbAVlQQOxEYEmPcEGOcA8wEDqnQqorh\nH9rc5vnLXZ673Ob5y22ev4qR9sB2WQjhgxDCYyGEhtm25sD8An0WZNskSZIqpUQDWwhhdAhhSoFt\navZnT+D3wB4xxh8Ai4D7kqxVkiQpKTnxTQchhJbA8Bhj+xDCjUCMMf42+9prwG0xxn8X8b70H5wk\nSVJWzn2XaAhhlxjjouzTk4CPso9fBp4JITxAZiq0DfBOUfso7qAlSZJySWoDG3B3COEHQD4wB7gQ\nIMb4cQhhKPAxsB64xC8MlSRJlVlOTIlKkiRVZWm/SzQnhBDuzi7i+0EIYVgIoUGB11zkN+VCCD8J\nIcwIIXwaQvh50vVo80IIu4UQ3gghTMveqHRFtn2HEMKoEMInIYSRBe4sV8qEEKplF0R/Ofvcc5cj\nQggNQwh/y/6dNi2EcKjnr2IY2MrGKKBd9o7WmcBNACGE/UjpIr/KCCFUAx4BjgXaAf1CCG2TrUpb\nsAG4JsbYDugEXJo9ZzcCY2KM+wBvkP09VCpdSeaylo08d7njQWBEjHFfoAMwA89fhTCwlYEY45gY\nY3726b+A3bKPe5HSRX61ySHAzBjj3BjjemAImcWZlVIxxkUxxg+yj78BppP5nTsReCrb7SmgdzIV\nanNCCLsBPYDHCjR77nJAdvboyBjjEwDZv9tW4PmrEAa2snceMCL72EV+06/wOfoCz1HOCCG0An5A\n5h9KTWOMiyET6oCdk6tMm/EAcD1Q8AJqz11uaA0sDSE8kZ3S/n8hhDp4/iqEga2EtrDI78Y+twDr\nY4zPJliqVCWEEOoBzwNXZkfaCt9B5R1VKRNCOB5YnB0h3dzlIZ67dKoBdAQejTF2BFaRmQ71d68C\npHlZj1SJMR69uddDCOeSGeY/qkDzAmD3As93y7YpPRYALQo89xzlgBBCDTJh7ekY40vZ5sUhhKYx\nxsUhhF2AJclVqGIcAfQKIfQAagP1QwhPA4s8dznhC2B+jHFy9vkwMoHN370K4AhbGQgh/ITMEH+v\nGOPaAi+9DJweQtguhNCazSzyq8RMAtqEEFqGELYDTidz3pRufwE+jjE+WKDtZeDc7ONzgJcKv0nJ\nijHeHGNsEWPcg8zv2hsxxrOA4XjuUi877Tk/hLB3tunHwDT83asQrsNWBkIIM4HtgGXZpn/FGC/J\nvnYTcD6ZRX6vjDGOSqZKFScbuB8k8w+Yx2OMAxMuSZsRQjgCeBOYSmbqJQI3k/nH0FAyo9pzgb4x\nxuVJ1anNCyF0Aa6NMfYKITTGc5cTQggdyNwwUhOYBfQHquP5K3cGNkmSpJRzSlSSJCnlDGySJEkp\nZ2CTJElKOQObJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElK\nOQObJElSytVIugBJyhUhhAuAHYF9gKeBlsDOwP7ADTHGBQmWJ6kSCzHGpGuQpNQLIfwMmBJj/HcI\n4WBgNHAusAp4DegRYxyZYImSKjFH2CSpZJrEGP+dfdwCyIsxvhhCqA10jTG+lWBtkio5R9gkqZRC\nCA8Bu8cY+yRdi6SqwZsOJKn0ugFjky5CUtVhYJOkLQghVAshdA8ZOwPtKBDYQgg3JFacpCrBwCZJ\nW3YhMArYC+gLrAa+AAgh9AI+Sq40SVWB17BJ0haEEDoA1wMzgA+BBsBRwBxgdoxxUHLVSaoKDGyS\nJEkp55SoJElSyhnYJEmSUs7AJkmSlHIGNkmSpJQzsEmSJKWcgU2SJCnlDGySJEkpZ2CTJElKOQOb\nJElSyhnYJEmSUu7/A9i2e0jPCtaoAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(16,48,0.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks an awful lot like a quarter circle. And what's the radius of the arc? It's $$r = 48 = 3z_t.$$\n", + "\n", + "We can also get a semi-circle out of our simulated trammel by changing to another configuration where $C$ is (near) zero. Here's one example:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nvS8Z0/tyPr0nGdP7kjG9LznDb4/STXNNdhERERGvZozBXsZBG357lK6IiJyvQoUKxMTEOB1DxG+V\nL1+e/fv3e3y9GuETEZFU7lEEp2OI+K3M/g1e7gif9uETERER8XEqfCIiIiI+ToVPRERExMep8ImI\niIj4OBU+ERERkcu0du1aEhISOHv2LOvWrXM6znl0WhYREZF0Tp06xbhx4wgLC+PPP//k2Wef/dfj\nW7duJTIyksGDB2e6jsWLF7Nz504CAwO56qqr6Ny5c07HzpZt27Yxc+ZMJkyYkLrsYtufXl7Z1uzI\n6P3JSEREBDExMZQuXZp33nkHAGstxYsXJyAgIPXI22bNmjF37twcz52eCp+IiEg6Tz75JCNHjiQs\nLIyqVavywAMPUL58ecD1S3z48OHUrl07068/efIkL730Eps3bwagbt263HvvvZQoUSJX8mfV//3f\n/7F+/XqKFSv2r+UX2v70LmdbN2zYwI8//siJEyfo2rXreTmcltn7k5GhQ4fSokULypYtS2BgIAD7\n9+/nrbfe4o477iAgIIBFixZx991353TsDGlKV0REJI1ffvmFw4cPExYWBsDKlSv/VXYWLFhA48aN\nL7iOtWvXUqVKldT7t956K6tXr86ZwJfhmWeeoXXr1v9adrHtTy+727pv3z7ef/99nnjiCcLCwpg/\nf342tyLnZPT+ZCY4OJirr746tewB5M+fn7Zt21KhQgWKFi1KcHAwlStXzqm4F6QRPhER8Tk///wz\n77777r9OYpvyuTGG22+/nVatWmX4tV9++SWhoaF8+OGHnDhxgiJFitClSxcA4uLiCAgIoGTJkpw6\ndSrT1//111//NSpUrFgx9uzZ47kNdLuc7czMhbY/I9nd1ueff54XXngBgN27d/+rKKWXE9vpadHR\n0VhriYuL44YbbqBVq1aULVs29fHJkyfz9NNPO5ZPhU9ERLLEmGyf5P882b2ax8aNGxk1ahTlypUj\nICCAFi1a0KZNm/OeV7FiRcaMGZOt14iNjWXnzp3MmTMHgPr163PnnXdy/fXXs3DhQrp3784HH3xw\nwXWcOHGC/Pnzp97Ply8f8fHxWXr9rG4jXN52ZuZC25+R7Gzrb7/9RnR0NJs3b2bTpk18+OGHDB8+\nPNPn58R2elq3bt2oUaMGANWrV6dhw4aEhoYCrvcoLi6OkJAQx/Kp8ImISJ5x2223sWzZMt566y12\n7dpFmzZteO211+jUqRNXXnmlR16jSJEiVKtWLfV+WFgYK1eu5Pjx49SpUyfL6zh+/Hjq/TNnzlCm\nTJksfW36bWzUqBHjxo3jyiuvpFq1atSsWfPSNugSZbb9mRW+7Gzrl19+yf3330+PHj04ffo0gwYN\nolmzZjm+na+++ioJCQn/WpYyShgREXHBqeuLufXWW1M/L168OFFRUanTwXPnznVsKjeFCp+IiGSJ\nt1xjd/To0cTGxvLGG28ArunA9GUv7RRgWlmZAqxSpQrr169PvR8QEEBSUhLR0dGcPn2a5cuX89VX\nX5GQkMCnn36a4Xquu+46Nm3alHo/Li6O8PDwbG3ja6+9RuPGjQkPDyciIoJZs2Z5ZDszk9n2ZyY7\n23rw4MHUArR48WLuvfdeZs6cmePbOWjQoIs+JztmzZrFZ599lpo5Pj7+X1PUX375JY899liOvHaW\nWWv98ubadBERScvb/28cPXq0HTp0qLXW2p07d9p169bZe+65x3799dcee42EhAR7++23p96/4447\n7N69e//1nFGjRtkXX3wx9f6+fftscnJy6v1Tp07ZatWqpd6/9dZbbWxsrLXW2j179vzrueml38a+\nffvaAwcOWGutveeeey5jyzL2/vvv2y5duqTev9D2p99Oa7O3rVOnTrVTp0611lp777332piYGNuv\nX78c3c7sSv/+WHv++7B+/Xq7Zs0aa6218fHxtkKFCvbUqVOpj1evXt2uWrUqS6+X2b9B9/Js9x4d\npSsiInnChg0bqFatGs2bN6dJkyYsXLiQa665hkaNGnH77bd77HVCQkIYNWoUI0aMYPjw4fTp04fr\nrrsu9fGPP/6YxYsXs3jx4tQjSx944AG+++671OcULFiQQYMG8Z///IeXX36ZgQMHUrp0aQBatmzJ\nqlWrsryNwAUPaLgcb775JtOmTSMqKooXX3yRv/7664Lbn347s7utDz74INu3b2fq1KkMHz6csLAw\nkpOTc2w7syuj9wfOfx/q1avHwYMHmThxIkOHDmXOnDkULFgw9fESJUpQrly5XM+flrFeMkSf24wx\n1l+3XUQkM2mPgswLZs+eTfny5QkLC+Oaa65xOk6WJCcns2bNmoue2iXFG2+8Qf369alcuTJdunTh\no48+yuGEnnMp25qXt9OTMvs36F6e7SOnVPhERCRVXit8ixcvJjExkdtuu+2ydrjPTfPmzaNly5YU\n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\npozTkbyGRvjysB49elC9enUOHDjA2LFjnY4jIiLimISEhNRrz7/44osqex6mET6HffXVV9x5552E\nhITwww8/ULFiRacjiYiI5LqXX36ZESNGULVqVbZu3UpQkKNnjvM6GuHL4+rVq0fnzp05e/Ys/fv3\nxxtKqIiISG7av38/o0ePBuDNN99U2csBKnxe4NVXXyU0NJTPPvuM+fPnOx1HREQk11hr6d27NwkJ\nCXTs2JGGDRs6HcknaUrXS7zzzjv06tWLMmXKsGvXLooVK+Z0JBERkRw3Z84cOnbsSLFixdi1a5f2\n3cuEpnR9RPfu3alXrx6///47gwcPdjqOiIhIjjtx4kTqgRrjx49X2ctBGuHzIjt37qRGjRokJiay\nfv166tWr53QkERGRHNO9e3emTp1KgwYNWL16NQEBGofKjEb4fEiVKlUYNGgQ4Dply99//+1wIhER\nkZyxZs0apk6dSr58+XjnnXdU9nKY3l0vM3ToUK6//np++OEHxowZ43QcERERj0tISKBnz54ADBky\nhJtuusnhRL5PU7peaM2aNTRq1IigoCA2btxI9erVnY4kIiLiMYMGDWL8+PHcdNNNfPfdd4SEhDgd\nyetpStcHNWzYkH79+nHu3Dm6dOlCYmKi05FEREQ8YsOGDUyYMIGAgADef/99lb1cosLnpcaMGcO1\n117Ltm3bUk9GKSIikpedPn2aLl26YK1l0KBB1KlTx+lIfkNTul4sKiqKxo0ba2pXRER8wjPPPMNr\nr71GlSpV2Lx5s0b3LoGmdH1Yo0aN/jW1q6N2RUQkr1q/fj0TJ04kMDBQU7kOUOHzcmPGjKFixYps\n27aNUaNGOR1HRETkksXHx6dO5b7wwgvUqlXL6Uh+R1O6ecD69etp2LAh1lqioqJo0KCB05FERESy\nrFu3bkybNo1bbrmFjRs3ki9fPqcj5Tma0vUDd955Jy+88ALWWjp37swff/zhdCQREZEsWbBgAdOm\nTSN//vzMnj1bZc8hKnx5xMiRI7nttts4cOAAffv2dTqOiIjIRR06dIju3bsDrmvlVqlSxeFE/ktT\nunnI7t27qVGjBqdPn2bWrFl06tTJ6UgiIiIZSk5OplmzZnzxxRfce++9LF26FGOyPSPp9zSl60cq\nVarE66+/DkDv3r3Zv3+/s4FEREQy8dprr/HFF19QqlQppk+frrLnMI3w5THWWtq3b88nn3xC7dq1\nWbdunfaHEBERr7Jx40bq1atHYmIiS5Ys4f7773c6Up6nET4/Y4xh6tSphIWFER0dzeDBg52OJCIi\nkuqPP/6gQ4cOJCYm0q9fP5U9L6ERvjzqm2++oX79+pw7d47FixfTqlUrpyOJiIifSzsLVbNmTb76\n6iudYNlDNMLnp26//XbGjh0LQJcuXYiJiXE4kYiI+LtJkybxySefULRoUebNm6ey50U0wpeHWWtp\n1aoVS5cu5fbbb2ft2rUEBwc7HUtERPxQdHQ0d955J4mJicyfP5/27ds7HcmnaITPjxljeP/997nm\nmmv45ptvGDhwoNORRETEDx0/fpyHHnqIxMREnnzySZU9L6QRPh/w9ddf07BhQxITE3V+PhERyVVJ\nSUncd999REZGUqtWLdavX6+p3BygET6hbt26qefn69atG9u3b3c4kYiI+IsRI0YQGRlJyZIlmT9/\nvsqel9IIn4+w1vLEE0/w/vvvU7FiRTZt2kTx4sWdjiUiIj7sk08+oV27dgQEBPD555/TpEkTpyP5\nLI3wCeD6QXjrrbcIDw/n559/5pFHHiEpKcnpWCIi4qN27drFY489BsCrr76qsuflVPh8SIECBVi4\ncCElSpRg+fLljBw50ulIIiLig/7880/atm1LfHw8Dz/8MM8884zTkeQiNKXrg1atWkXz5s1JTk7m\no48+4uGHH3Y6koiI+IikpCRat27NsmXLuOWWW9iwYQOFChVyOpbP05SunKdp06a89tprADz++ONE\nR0c7nEhERHzFoEGDWLZsGSVKlOCTTz5R2csjNMLno6y19OrViylTplCmTBk2btzI1Vdf7XQsERHJ\nw6ZOnUr37t0JDg5m1apVNGjQwOlIfuNyR/hU+HxYYmIizZo1IyoqivDwcNauXau/xEREJFtWr15N\ns2bNOHfuHNOmTeOJJ55wOpJf0ZSuZCo4OJj58+dz3XXXsWXLFiIiIkhOTnY6loiI5DF79uyhffv2\nnDt3jueee05lLw9S4fNxJUqUYOnSpYSGhrJgwQIGDx7sdCQREclD4uLiuP/++zlx4gQtW7Zk7Nix\nTkeSbFDh8wM33XQT8+fPJygoiPHjx/Pmm286HUlERPKAM2fO0KpVK3bv3s0tt9zCrFmzCAwMdDqW\nZIMKn59o2rQpU6dOBeDJJ59k0aJFDicSERFvlpSUxKOPPsqGDRu4+uqr+eyzzyhSpIjTsSSbVPj8\nSEREBC+99BLWWjp27MjXX3/tdCQREfFC1lqefvppFi5cSGhoKCtWrKBcuXJOx5LLoKN0/Yy1lh49\nejB16lRKlCjB119/zQ033OB0LBER8SITJkxg4MCB5MuXj8jISBo1auR0JL+n07Jkk78WPoBz587R\nqlUrli9fzrXXXsv69eu56qqrnI4lIiJeYPbs2TzyyCMAulqTF9FpWeSSBQUFMW/ePGrVqsUvv/xC\n8+bNOX78uNOxRETEYcuWLSMiIgKA8ePHq+z5EBU+P1W4cGGWL1/OTTfdxI4dO7jvvvs4deqU07FE\nRMQh69at44EHHuDcuXMMHDiQZ5991ulI4kGa0vVzv/76K/Xq1ePAgQM0a9aMTz/9lJCQEKdjiYhI\nLtqyZQuNGzfm5MmTdO/enXfeeQdjsj17KDlAU7pyWa6++mo+//xzSpUqxcqVK+ncuTNJSUlOxxIR\nkVzy008/0aJFC06ePEmHDh14++23VfZ8kAqfUKlSJSIjIylatCgff/wx3bt31yXYRET8QExMDHff\nfTdHjx6lRYsWzJw5UydW9lEqfAJAjRo1WLp0KQUKFOC9996jV69eKn0iIj7swIEDNG7cmIMHD1Kv\nXj0WLFhAvnz5nI4lOUSFT1LVr1+fpUuXkj9/ft5991369euH9nMUEfE9v/76K40bN+aXX36hdu3a\nLFu2jIIFCzodS3KQCp/8S5MmTVIP3Hj77bcZMGCASp+IiA85dOgQjRs35ueff6ZWrVpERkYSGhrq\ndCzJYSp8cp67776bRYsWkS9fPt544w2eeeYZlT4RER9w+PBhmjRpwt69ewkPD2flypUUK1bM6ViS\nC1T4JEMtWrRg4cKFBAcHM3HiRAYNGqTSJyKSh/322280adKE3bt3U716dT7//HOKFy/udCzJJSp8\nkqn77ruP+fPnExQUxIQJE3juuedU+kRE8qDffvuNu+66i59++olbbrmFVatWccUVVzgdS3KRCp9c\nUKtWrZg3bx7BwcH83//9H3369NHRuyIieUhMTAwNGjRg165dVKtWjS+++IISJUo4HUtyma60IVny\n2Wef0b59exISEujcuTPTp08nKCjI6VgiInIBu3fvpmnTphw8eJDw8HAiIyMpWbKk07EkGy73Shsq\nfJJlq1evpmXLlpw6dYr27dsze/ZsnbNJRMRLbd++nWbNmhEbG0u9evVYtmyZjsbNw3RpNck1jRs3\n5vPPPyc0NJQFCxbQpk0bzpw543QsERFJJzo6mkaNGhEbG0vTpk116hVR4ZNLU7duXVavXk3JkiVZ\nvnw59957L3/99ZfTsURExG3NmjXcddddnDhxgtatW7NkyRIKFSrkdCxxmAqfXLIaNWqwdu1aypYt\nS1RUFI0bNyY2NtbpWCIifm/JkiW0aNGC+Ph4OnXqxMcff0z+/PmdjiVewGsLnzHmAWPMDmNMkjEm\nPM3y8saY08aYLe7bW2keCzfGbDfG7DbGTHQmuX+oXLky69ev57rrrmPz5s3ccccd7Nmzx+lYIiJ+\n65133qFNmzYkJCTQo0cPZsyYQXBwsNOxxEt4beEDvgfaAmsyeGyvtTbcfeuTZvnbQFdrbSWgkjGm\neW4E9VcVK1Zkw4YN1KpVi59//pk77riD6Ohop2OJiPgVay0jRoygV69eJCcnM2LECCZPnkxgYKDT\n0cSLeG3hs9b+ZK3dA2R0RMp5y4wxZYAi1tqN7kUzgDY5GFGA0qVLs3r1alq0aMGxY8do3Lgxy5cv\ndzqWiIhfSExMpGvXrrz88ssEBAQwZcoUXnzxRYzJ9sGc4qO8tvBdRAX3dO5qY8yd7mXlgF/TPOdX\n9zLJYYULF+bTTz8lIiKC06dP07JlS95//32nY4mI+LT4+Hhat27Ne++9R4ECBVi8eDHdu3d3OpZ4\nKUfPnGuM+Ry4Mu0iwAJDrbVLMvmyw0CYtfaEe9++RcaYm3M4qlxEcHAw7733HuXKlWP06NE8/vjj\nHDx4kGHDhukvTRERDzty5Aj33XcfmzZtomTJkixdupQ6deo4HUu8mKOFz1p7dza+JhE44f58izFm\nH1AJOARck+apV7uXZWrUqFGpnzdq1IhGjRpdahxJwxjDK6+8wlVXXUX//v0ZMWIEP/74I9OmTdNR\nYiIiHrJ9+3ZatWpFTEwMFStWZMWKFdxwww1OxxIPi4qKIioqymPr8/orbRhjVgPPWWs3u++XBI5b\na5ONMRVxHdRRzVr7hzHmG+BJYCOwDJhkrV2RyXp1pY0ctGTJEjp16kR8fDx16tRh0aJFlClTxulY\nIiJ5Wvr/WxcvXsyVV1558S+UPM9nr7RhjGljjDkI3A4sNcakHAnQANhujNkCzAN6Wmv/cD/WF5gG\n7Ab2ZFb2JOe1bNmSr776irCwML799ltq167Ntm3bnI4lIpInWWsZP348rVu3Tj3HXlRUlMqeZJnX\nj/DlFI3w5Y7Y2Fjatm3L119/TaFChZg9ezatWrVyOpaISJ5x9uxZevXqlXow3H/+8x+GDBmi/aP9\nzOWO8KnwSY5LSEigW7duzJo1C2MM48aN47nnntN/ViIiF3H06FHatWvH+vXrKViwIDNmzKB9+/ZO\nxxIHqPBlkwpf7rLWMnr0aIYNGwbAQw89xNSpUylcuLDDyUREvNOWLVto164dMTExlCtXjk8//ZTw\n8PCLf6H4JBW+bFLhc8bChQuJiIggPj6eKlWq8Mknn+joMhGRdN577z169+7N2bNnqV27NosWLaJs\n2bJOxxIH+exBG+Kb2rVrR3R0NDfeeCM7d+6kVq1aLFmS2SkXRUT8y9mzZ+nZsydPPPFE6udr165V\n2ZPLpsInua5y5cpER0fTtm1bTp48SatWrRg+fDhJSUlORxMRccyBAweoX78+U6ZMISQkhOnTpzN5\n8mRCQkKcjiY+QFO64hhrLa+++ipDhgwhOTmZ5s2bM3v2bK644gqno4mI5KpVq1bx8MMPExcXR4UK\nFViwYIH215N/0ZSu5FnGGJ5//nkiIyMpUaIEkZGR1KhRgw0bNjgdTUQkVyQlJfHyyy/TvHlz4uLi\naN68OZs2bVLZE49T4RPHNW3alC1btlC7dm0OHDhAgwYNGDNmDMnJyU5HExHJMYcOHaJp06aMGDGC\n5ORkhg8fzrJlyyhRooTT0cQHaUpXvMbff//NsGHDGD9+POAqgjNnztQl2UTE5yxbtoyIiAji4uIo\nXbo0M2fOpFmzZk7HEi+m07Jkkwqf91qxYgWPPfYYR48e1X+EIuJTzp49y+DBg5k4cSIAzZo1Y8aM\nGbpEmlyU9uETn9OiRQu+++47mjRpwpEjR2jevDmDBw8mMTHR6WgiItm2Z88e7rjjDiZOnEhQUBDj\nxo1j+fLlKnuSKzTCJ14rKSmJsWPHpu7fEh4ezsyZM7n55pudjiYikmXWWqZPn85TTz1FfHw8FSpU\nYM6cOdSpU8fpaJKHaEo3m1T48o7169fz6KOPEhMTQ0hICGPGjGHAgAEEBGiAWkS822+//UaPHj1Y\nunQpAB06dGDKlCmEhoY6nEzyGk3pis+788472b59O127duXs2bM888wz3HXXXcTExDgdTUQkU/Pm\nzaNq1aosXbqU0NBQZs6cyZw5c1T2xBEa4ZM85dNPP6V79+4cOXKEIkWKMGnSJCIiIjAm23/0iIh4\n1PHjx+nbty9z5swB4O6772b69OlcffXVDieTvEwjfOJXWrVqxY4dO2jbti1//fUXjz/+OG3btuX3\n3393OpqICMuXL6dq1arMmTOHggUL8tZbbxEZGamyJ45T4ZM8p1SpUixYsIAZM2ZQtGhRFi9eTOXK\nlZk2bRoatRURJ8TFxREREcG9997Lb7/9xh133MG2bdvo3bu3ZiDEK6jwSZ5kjKFz5858//333HPP\nPfzxxx9069aNpk2bsnfvXqfjiYifsNYye/ZsKleuzIwZMwgJCWHs2LGsXbuW66+/3ul4Iqm0D5/k\nedZaPvroIwYMGMCxY8fInz8/L730Ek8//TRBQUFOxxMRHxUTE0Pv3r1Zvnw5AA0bNmTKlClUqlTJ\n4WTii7QPn/g9YwydOnVi165dPProoyQkJDBo0CBq167N1q1bnY4nIj4mKSmJ119/nSpVqrB8+XKK\nFSvGu+++y5dffqmyJ15LI3zic1asWEGvXr2IiYkhMDCQ/v37M2rUKJ0KQUQu25YtW+jduzfR0dEA\nPPjgg0yaNEnX/JYcpxE+kXRatGjBjh07GDBgANZaJk6cyI033siHH36ogzpEJFuOHz9O7969qVWr\nFtHR0ZQrV47Fixczb948lT3JEzTCJz5t69at9O3bl6+//hqA+vXr8+abb3LLLbc4nExE8oKkpCSm\nTZvGkCFDiIuLIzAwkAEDBjBy5EiKFi3qdDzxI7q0Wjap8PmP5ORkZsyYwaBBgzh69CiBgYH07duX\nF198kWLFijkdT0S81Lfffku/fv3YtGkTAI0bN+aNN96gSpUqDicTf6QpXZGLCAgIoEuXLuzevZv+\n/ftjrWXSpEnceOONTJs2jaSkJKcjiogXOXLkCN26deP2229n06ZNlCtXjrlz5/LFF1+o7EmepRE+\n8Tvbtm2jX79+rF+/HoBq1aoxYcIEmjVr5nAyEXHS6dOnee211xg7dizx8fEEBwfz7LPPMnToUAoX\nLux0PPFzmtLNJhU+/2atZc6cObzwwgvExMQA0Lx5cyZMmEDVqlUdTiciuSkpKYkZM2YwfPhwDh06\nBMD999/PhAkTuPHGGx1OJ+KiwpdNKnwCkJCQwKRJk3jllVc4efIkAQEBPPHEE7z00kuULVvW6Xgi\nksNWrlzJwIED2b59OwDh4eFMmDCBxo0bO5xM5N9U+LJJhU/SOnbsGC+99BJvv/02586do1ChQjz7\n7LM888wzOn+fiA/atm0bzz//PJGRkQCEhYUxevRoOnbsSECAdm8X76PCl00qfJKR3bt38/zzz7No\n0SIArrjiCgYOHEj//v0pVKiQw+lE5HLt2rWLUaNGMW/ePABCQ0MZMmQITz75JPnz53c4nUjmVPiy\nSYVPLmTdunUMHTqUdevWAVC6dGleeOEFevXqpV8KInnQ3r17efHFF5k9ezbJycmEhITQq1cvhg0b\nRsmSJZ2OJ3JRKnzZpMInF2OtZdWqVQwbNiz1MkrlypVj2LBhPPHEE+TLl8/hhCJyMfv37+fll1/m\ngw8+ICkpieDgYLp168aQIUO4+uqrnY4nkmUqfNmkwidZZa1l6dKlDB8+nG3btgFQoUIFBg8eTERE\nhEb8RLzQ/v37GTduHNOmTSMxMZHAwEAiIiIYPnw4FSpUcDqeyCVT4csmFT65VMnJySxYsIARI0bw\n448/AlC2bFmeffZZevbsqfN0iXiBnTt3Mm7cOGbPnk1SUhLGGB555BFGjBjBDTfc4HQ8kWxT4csm\nFT7JrqSkJObPn8+YMWNSR/yKFy/Ok08+Sf/+/SlRooTDCUX8z7fffsuYMWNYvHgxAIGBgXTs2JEX\nXniBm2++2eF0IpdPhS+bVPjkcllrWb58Oa+88gobNmwAoFChQvTq1Yunn36acuXKOZxQxLel7Gc7\nZswYVq9eDUBISAhdu3blueee49prr3U4oYjnqPBlkwqfeIq1lnXr1jF69OjUc3oFBQXx0EMP8dRT\nT1GrVi2HE4r4lrNnzzJ37lxef/11tmzZAkCRIkXo06cPTz31FGXKlHE4oYjnqfBlkwqf5IQtW7Yw\nduxYFixYQHJyMgD16tXjqaeeok2bNgQFBTmcUCTv+v3335k8eTKTJ08mNjYWgFKlSvHUU0/Rp08f\nihUr5nBCkZyjwpdNKnySk2JiYnjzzTd59913+fPPPwHXmfz79+9P165dKV68uMMJRfKOzZs38/rr\nrzNnzhwSExMBuOWWWxgwYACdOnXSkfLiF1T4skmFT3JDfHw8H3zwAa+//jp79uwBoGDBgjzyyCP0\n7NmTmjVrOpxQxDudPXuWhQsX8tZbb7F+/XrA9QuvdevWDBgwgIYNG2JMtn/3ieQ5KnzZpMInuSk5\nOZnly5czceJEVq1albo8PDycnj170rFjR4oUKeJgQhHv8OOPP/Luu+/ywQcfEBcXB0DRokXp2rUr\n/fr1o2LFig4nFHGGCl82qfCJU3bt2sWUKVP44IMPOHHiBACFCxemU6dO9OzZk/DwcIcTiuSuM2fO\nsOlBxAsAAAxrSURBVGDBAqZMmZJ6OUOA6tWr06NHDx599FH9QSR+T4Uvm1T4xGkJCQnMnz//vF9y\nNWvWJCIigocffphSpUo5mFAk51hr2bp1Kx988AEzZ85M/eOnUKFCdOrUiR49elCzZk1N24q4qfBl\nkwqfeJMffvghdRor5RdfUFAQLVq04LHHHqNly5baMV18QkxMDLNnz+bDDz/khx9+SF1es2ZNevTo\nod0bRDKhwpdNKnzijRISEli8eDEzZ85kxYoVJCUlARAaGsqDDz5I586dufPOOwkICHA4qUjW/fHH\nH8yfP58PP/yQNWvWpC4vWbIkHTt2pEuXLtqVQeQiVPiySYVPvF1sbCxz5szh/9u7+5i66juO4+9v\nkdbWpmKtbekTtrcqpSYCZrTQTgtsVUtitaAxW8jMsodkj9mSabZ/9B8T98eybH/snz0kDp1OaGar\nND6BpCpUGVz6BFSXPkyqZbW1jq6KU777457eQuF2G1JOOefzSm44nHvbfO8333vvh9+55966ujo6\nOjrS+/Py8qipqaGmpoY1a9bokJdckgYGBtixYwf19fU899xzDA4OAnD55ZezefNmamtr2bhxI9nZ\n2SFXKjI1KPCNkwKfTCXd3d3U1dXxxBNP8M4776T3L126lOrqampqaigtLdXKn4Tq1KlTPPvss2zd\nupXnn38+HfLMjPLycmpra9myZQtz5swJuVKRqUeBb5wU+GQqGhoaoq2tjYaGBhoaGujr60tfl5ub\nS3V1NVu2bGH9+vVaOZFJ8f7777Nt2za2bt3Kyy+/nP5gZEh9y0x1dTX33HMPS5YsCbFKkalPgW+c\nFPhkqhsaGqK9vZ36+noaGho4cuRI+rorr7yS2267jaqqKu644w6d7SsTxt3ZvXs3jY2N7Nixg127\ndqW/RnDatGnccsst1NTUcPfdd7No0aKQqxWJDgW+cVLgkyhxdzo6Oqivr2f79u309vamrzMz1qxZ\nQ1VVFVVVVRQWFup9f/J/GRgYoKmpKR3y3n333fR12dnZlJeXU11dzV133cX8+fNDrFQkuhT4xkmB\nT6Ls4MGDNDY20tjYyCuvvMInn3ySvi43N5fKykoqKiqoqKggLy8vxErlUvTpp5/S0dFBc3MzTU1N\n7Ny5c8Sh2tzcXDZt2kRVVRWVlZV6T57IJFDgGycFPomL06dPp1dnGhsbR6zOACQSCSoqKqisrKS8\nvFwrNDE0NDTEnj17aG5uprm5mZ07dzIwMJC+3sxYu3YtVVVVbNq0SavEIiFQ4BsnBT6JI3enu7ub\npqYmmpubaWlp4cMPPxxxm9WrV7N+/XrKysooKysjkUjoxT1iBgcH6ezspLW1ldbWVlpaWjh58uSI\n21x33XXpVeCKigrmzZsXUrUiAgp846bAJ5I6dJdMJtMB8LXXXuOjjz4acZtrrrkmHf7Kysq4+eab\nmTlzZkgVy3gcPXqUtrY2WltbaWtro7Ozc8Rhfkh9xM/ZQ/3l5eU6q1bkEqPAN04KfCKjDQ4O0t7e\nng4Hr7/+OsePHx9xm+zsbFavXk1RURHFxcUUFRVx0003MXv27JCqlrPcnb6+PpLJJF1dXSSTSTo6\nOkZ8diOkXjgKCgooLS2ltLSUW2+9lRUrVmglV+QSpsA3Tgp8o7W0tLBhw4awy7jkxLkv7s7BgwfT\nh/5aW1vZu3cv5z92zIzrr78+HQBvvPFGVq1axbJly2L3YdCTNS8ff/wxb731Fvv37yeZTKYvJ06c\nGHXbOXPmsHbtWkpLSykrK6OkpIScnJyLXuNZcX4MXYj6Mjb1ZWyfN/BdNpHFyNSmB9nY4twXMyOR\nSJBIJKitrQVSJ4Hs3r2bRx55hIULF5JMJtm3bx8HDhzgwIEDPPnkk+l/P2vWLG644QYKCgpYtWpV\n+pJIJJg+fXpYd+uimuh5OXHiBL29vfT29tLT05P+eejQoVHBG2Du3LkUFRWlL4WFheTn54cavOP8\nGLoQ9WVs6svFocAnIv+X2bNns27dOkpKSnj44YeB1KHg/fv309nZSVdXF93d3XR3d9Pf359eeRrO\nzFi8eDHLly8f87Jo0SKysrJCuHeT7/Tp0xw+fHjE5dChQ+nt80+mOCsrK4tEIkFBQQGFhYUUFhZS\nVFTE0qVLdWhWREZR4BORz23GjBkUFxdTXFw8Yv8HH3xAT0/PqMuRI0fo6+ujr6+PV199ddT/l5WV\nxYIFC8jNzSU3N5eFCxeO2p47dy45OTnk5ORcUquF7s6ZM2c4deoUJ0+epL+/n2PHjqUv77333ojt\nTIHurCuuuIL8/Hzy8/PTK6T5+fmsXLnykrrfInJpi/V7+MKuQUREROR/pZM2RERERCSjeJ0+JyIi\nIhJDCnwiIiIiERe7wGdmt5tZr5m9ZWYPhl1PmMzssJntNrOkmb0Z7LvKzF40swNm9oKZXRl2nReb\nmf3ezPrNbM+wfRn7YGY/NbO3zazHzDaGU/XFl6EvD5lZn5l1Bpfbh10X+b6Y2RIzazaz/Wa218x+\nEOyP9byM0ZfvB/tjOy9mNsPM3gieX/ea2UPB/rjPSqa+xHZWhjOzacH93x78PnHz4u6xuZAKuH8D\n8oBsoAvID7uuEPtxELjqvH0/Bx4Ith8EHg27zknow3qgENjz3/oAFABJUme4XxvMk4V9HyaxLw8B\nPx7jtqvi0BdgIVAYbM8GDgD5cZ+XC/Ql7vMyK/iZBewCSuI+KxfoS6xnZdj9/RHwOLA9+H3C5iVu\nK3wlwNvufsTd/w08BWwOuaYwGaNXeTcDjwXbjwF3TWpFIXD314APztudqQ93Ak+5+6fufhh4m9Rc\nRU6GvkBqbs63mRj0xd2PuXtXsH0a6AGWEPN5ydCXxcHVcZ6XM8HmDFIvzE7MZwUy9gViPCuQWikH\nNgG/G7Z7wuYlboFvMTD8SyX7OPekFEcOvGRm7Wb2jWDfAnfvh9STODA/tOrCNT9DH86foaPEb4a+\nZ2ZdZva7YYcXYtcXM7uW1AroLjI/buLclzeCXbGdl+DwXBI4Brzk7u1oVjL1BWI8K4FfAj/hXACG\nCZyXuAU+GWmduxeT+oviu2b2RUYOGmP8HlfqQ8pvgBXuXkjqyfoXIdcTCjObDTQAPwxWtPS4Ycy+\nxHpe3H3I3YtIrQKXmNlqNCtj9aWAmM+KmVUB/cFK+YU+a2/c8xK3wHcUWDbs9yXBvlhy9/eCn8eB\nZ0gtB/eb2QIAM1sI/CO8CkOVqQ9HgaXDbherGXL34x68gQT4LecOIcSmL2Z2GalQU+fu24LdsZ+X\nsfqieUlx938CLcDtaFbShvdFs8I64E4zOwg8CVSYWR1wbKLmJW6Brx1YaWZ5ZjYduA/YHnJNoTCz\nWcFf45jZFcBGYC+pftwf3OxrwLYx/4PoMUb+VZWpD9uB+8xsupktB1YCb05WkSEY0ZfgCeesLcC+\nYDtOffkD0O3uvxq2T/MyRl/iPC9mNu/sYUkzmwl8mdR7G2M9Kxn60hvnWQFw95+5+zJ3X0EqmzS7\ney3wLBM0L7H6Ll13/8zMvge8SCrs/t7de0IuKywLgL9Y6ivmLgOecPcXzeyvwNNm9nXgCHBvmEVO\nBjP7E7ABuNrM/k7qbLFHgfrz++Du3Wb2NNAN/Bv4zrC/SiMlQ1/KzawQGAIOA9+G+PTFzNYBXwX2\nBu9BcuBnpM6kG/W4UV/4SoznJRd4zMymkXq9+bO77zCzXcR4Vsjclz/GeFYu5FEmaF701WoiIiIi\nERe3Q7oiIiIisaPAJyIiIhJxCnwiIiIiEafAJyIiIhJxCnwiIiIiEafAJyIiIhJxCnwiIiIiEafA\nJyIiIhJxCnwiIiIiEafAJyIiIhJxCnwiIiIiEafAJyIiIhJxl4VdgIjIVGdm3wLmATcAdUAeMB+4\nEXjA3Y+GWJ6ICObuYdcgIjJlmdk3gT3u/oaZfQF4Cbgf+BfwPLDJ3V8IsUQREa3wiYh8Tle7+xvB\n9jLgM3d/xsxmAhvc/dUQaxMRAbTCJyIyYczs18BSd7877FpERIbTSRsiIhOnHGgJuwgRkfMp8ImI\njJOZTTOzL1nKfGA1wwKfmT0QWnEiIsMo8ImIjN+3gReB64B7gTNAH4CZ3QnsC680EZFz9B4+EZFx\nMrObgJ8AvcBuYA5QARwGDrn74+FVJyJyjgKfiIiISMTpkK6IiIhIxCnwiYiIiEScAp+IiIhIxCnw\niYiIiEScAp+IiIhIxCnwiYiIiEScAp+IiIhIxCnwiYiIiEScAp+IiIhIxCnwiYiIiETcfwDSVBrB\nvMsjiwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_flight_path(64,16,-numpy.pi/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is so nice. We have reproduced the trajectories that Lanchester found more than a hundred years ago, painstakingly drawing them by hand with a contraption called a \"trammel.\" It must have taken him days!\n", + "\n", + "Here is how the different phugoid curves are drawn in von Kármán's book, _Aerodynamics_ (1957). He never says _how_ he drew them, but we're guessing by hand, also. We did pretty good!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/vonKarman-phugoids.png)\n", + "\n", + "#### Figure 4. Phugoid curves in von Kármán (1957)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next notebook of this series, we'll look at the differential equation that arises when you consider small perturbations on the horizontal phugoid, and we'll learn to numerically integrate that to get the flight paths." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Lanchester, F. W. _Aerodonetics_, D. van Nostrand Company: New York, 1909. On the public domain. [Get it from Google Books](http://books.google.com/books?id=6hxDAAAAIAAJ&pg=PP1#v=onepage&q&f=false).\n", + "\n", + "2. Milne-Thompson, L. M. _Theoretical Aerodynamics_, Dover 2012 reprint of the revised 1966 edition. [Read on Google Books](http://books.google.com/books?id=EMfCAgAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see section 18.5)\n", + "\n", + "3. Sinha, N. K. and Ananthkrishnan, N. _Elementary Flight Dynamics with an introduction to Bifurcation and Continuation Methods_, CRC Press, 2013. [Read on Google Books](http://books.google.com/books?id=yXL6AQAAQBAJ&lpg=PP1&pg=PP1#v=onepage&q&f=false) (see chapter 5)\n", + "\n", + "4. von Kármán, T. _Aerodynamics_, Dover 2004 reprint of the 1957 2nd edition. (see pages 149–151)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook. " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Execute this cell to load the notebook's style sheet, then ignore it\n", + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/01_02_Phugoid_Oscillation.ipynb b/lecture_22/01_phugoid/01_02_Phugoid_Oscillation.ipynb new file mode 100644 index 0000000..eb6283b --- /dev/null +++ b/lecture_22/01_phugoid/01_02_Phugoid_Oscillation.ipynb @@ -0,0 +1,949 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth. Partly based on David Ketcheson's pendulum lesson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Oscillation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Welcome back! This is the second IPython Notebook of the series _\"The phugoid model of glider flight\"_, the first learning module of the course [**\"Practical Numerical Methods with Python.\"**](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about)\n", + "\n", + "In the first notebook, _\"Phugoid Motion\"_, we described the physics of an aircraft's oscillatory trajectory, seen as an exchange of kinetic and potential energy. This analysis goes back to Frederick Lanchester, who published his book _\"Aerodonetics\"_ on aircraft stability in 1909. We concluded that first exposure to our problem of interest by plotting the flight paths predicted by Lanchester's analysis, known as _phugoids_.\n", + "\n", + "Here, we will look at the situation when an aircraft is initially moving on the straight-line phugoid (obtained with the parameters $C=2/3$, $\\cos\\theta=1$, and $z=z_t$ in the previous analysis), and experiences a small upset, a wind gust that slightly perturbs its path. It will then enter into a gentle oscillation around the previous straight-line path: a _phugoid oscillation_.\n", + "\n", + "If the aircraft experiences an upward acceleration of $-d^2z/dt^2$, and we assume that the perturbation is small, then $\\cos\\theta=1$ is a good approximation and Newton's second law in the vertical direction is:\n", + "\n", + "$$\\begin{equation}\n", + "L - W = - \\frac{W}{g}\\frac{d^2 z}{dt^2}\n", + "\\end{equation}$$\n", + "\n", + "In the previous notebook, we saw that the following relation holds for the ratio of lift to weight, in terms of the trim velocity $v_t$:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{L}{W}=\\frac{v^2}{v_t^2}\n", + "\\end{equation}$$\n", + "\n", + "This will be useful: we can divide Equation (1) by the weight and use Equation (2) to replace $L/W$. Another useful relation from the previous notebook expressed the conservation of energy (per unit mass) as $v^2 = 2 gz$. With this, Equation (1) is rearranged as:\n", + "\n", + "$$\\begin{equation}\n", + "\\frac{d^2z}{dt^2} + \\frac{gz}{z_t} = g\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look at Equation (3) for a moment. Does it ring a bell? Do you recognize it?\n", + "\n", + "If you remember from your physics courses the equation for _simple harmonic motion_, you should see the similarity! \n", + "\n", + "Take the case of a simple spring. Hooke's law is $F=-kx$, where $F$ is a restoring force, $x$ the displacement from a position of equilibrium and $k$ the spring constant. This results in the following ordinary differential equation for the displacement:\n", + "\n", + "$$\\begin{equation}\n", + " \\frac{d^2 x}{dt^2}= -\\frac{k}{m}x\n", + "\\end{equation}$$\n", + "\n", + "which has the solution $x(t) = A \\cos(\\omega t- \\phi)$, representing simple harmonic motion with an angular frequency $\\omega=\\sqrt{k/m}=2\\pi f$ and phase angle $\\phi$.\n", + "\n", + "Now look back at Equation (3): it has nearly the same form and it represents simple harmonic motion with angular frequency $\\omega=\\sqrt{g/z_t}$ around mean height $z_t$. \n", + "\n", + "Think about this for a moment ... we can immediately say what the period of the oscillation is: exactly $2 \\pi \\sqrt{z_t/g}$ — or, in terms of the trim velocity, $\\pi \\sqrt{2} v_t/g$.\n", + "\n", + "_This is a remarkable result!_ Think about it: we know nothing about the aircraft, or the flight altitude, yet we can obtain the period of the phugoid oscillation simply as a function of the trim velocity. For example, if trim velocity is 200 knots, we get a phugoid period of about 47 seconds—over that time, you really would not notice anything if you were flying in that aircraft.\n", + "\n", + "Next, we want to be able to compute the trajectory of the aircraft for a given initial perturbance. We will do this by numerically integrating the equation of motion." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Prepare to integrate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to integrate the differential equation and plot the trajectory of the aircraft. Are you ready?\n", + "\n", + "The equation for the phugoid oscillation is a second-order, ordinary differential equation (ODE). Let's represent the time derivative with a prime, and write it like this:\n", + "\n", + "$$\\begin{equation}\n", + "z(t)'' + \\frac{g \\,z(t)}{z_t}=g\n", + "\\end{equation}$$\n", + "\n", + "There's a convenient trick when we work with ODEs: we can turn this 2nd-order equation into a system of two 1st-order equations. Like this:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z'(t) &=& b(t)\\\\\n", + "b'(t) &=& g\\left(1-\\frac{z(t)}{z_t}\\right)\n", + "\\end{eqnarray}$$\n", + "\n", + "Are you following? Make sure you are following the derivations, even if it means writing the equations down in your own notes! (Yes, the old-fashioned paper way.)\n", + "\n", + "Another way to look at a system of two 1st-order ODEs is by using vectors. You can make a vector with your two independent variables, \n", + "\n", + "$$\\begin{equation}\n", + "\\vec{u} = \\begin{pmatrix} z \\\\ b \\end{pmatrix}\n", + "\\end{equation}$$\n", + "\n", + "and write the differential system as a single vector equation:\n", + "\n", + "\\begin{equation}\n", + "\\vec{u}'(t) = \\begin{pmatrix} b\\\\ g-g\\frac{z(t)}{z_t} \\end{pmatrix}\n", + "\\end{equation}\n", + "\n", + "If you call the right-hand-side $\\vec{f}(\\vec{u})$, then the equation is very short: $\\vec{u}'(t) = \\vec{f}(\\vec{u})$—but let's drop those arrows to denote vectors from now on, as they are a bit cumbersome: just remember that $u$ and $f$ are vectors in the phugoid equation of motion.\n", + "\n", + "Next, we'll prepare to solve this problem numerically." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initial value problems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's step back for a moment. Suppose we have a first-order ODE $u'=f(u)$. You know that if we were to integrate this, there would be an arbitrary constant of integration. To find its value, we do need to know one point on the curve $(t, u)$. When the derivative in the ODE is with respect to time, we call that point the _initial value_ and write something like this:\n", + "\n", + "$$u(t=0)=u_0$$\n", + "\n", + "In the case of a second-order ODE, we already saw how to write it as a system of first-order ODEs, and we would need an initial value for each equation: two conditions are needed to determine our constants of integration. The same applies for higher-order ODEs: if it is of order $n$, we can write it as $n$ first-order equations, and we need $n$ known values. If we have that data, we call the problem an _initial value problem_.\n", + "\n", + "Remember the definition of a derivative? The derivative represents the slope of the tangent at a point of the curve $u=u(t)$, and the definition of the derivative $u'$ for a function is:\n", + "\n", + "$$u'(t) = \\lim_{\\Delta t\\rightarrow 0} \\frac{u(t+\\Delta t)-u(t)}{\\Delta t}$$\n", + "\n", + "If the step $\\Delta t$ is already very small, we can _approximate_ the derivative by dropping the limit. We can write:\n", + "\n", + "$$\\begin{equation}\n", + "u(t+\\Delta t) \\approx u(t) + u'(t) \\Delta t\n", + "\\end{equation}$$\n", + "\n", + "With this equation, and because we know $u'(t)=f(u)$, if we have an initial value, we can step by $\\Delta t$ and find the value of $u(t+\\Delta t)$, then we can take this value, and find $u(t+2\\Delta t)$, and so on: we say that we _step in time_, numerically finding the solution $u(t)$ for a range of values: $t_1, t_2, t_3 \\cdots$, each separated by $\\Delta t$. The numerical solution of the ODE is simply the table of values $t_i, u_i$ that results from this process." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Discretization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to execute the process described above and find the numerical solution of the ODE, we start by choosing the values $t_1,t_2,t_3 \\cdots t_n$—we call these values our *grid* in time. The first point of the grid is given by our _initial value_, and the small difference between two consecutive times is called the _time step_, denoted by $\\Delta t$. The solution value at time $t_n$ is denoted by $u_n$.\n", + "\n", + "Let's build a time grid for our problem. We first choose a final time $T$ and the time step $\\Delta t$. In code, we'll use readily identifiable variable names: `T` and `dt`, respectively. With those values set, we can calculate the number of time steps that will be needed to reach the final time; we call that variable `N`. \n", + "\n", + "Let's write some code. The first thing we do in Python is load our favorite libraries: NumPy for array operations, and the Pyplot module in Matplotlib, to later on be able to plot the numerical solution. The line `%matplotlib inline` tells IPython Notebook to show the plots inline." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy \n", + "from matplotlib import pyplot\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, initialize `T` and `dt`, calculate `N` and build a NumPy array with all the values of time that make up the grid." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100.0\n", + "dt = 0.02\n", + "N = int(T/dt)+1\n", + "t = numpy.linspace(0.0, T, N)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have our grid! Now it's time to apply the numerical time stepping represented by Equation (10)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Write the code above using the NumPy function `arange()` instead of `linspace()`. If you need to, read the documentation for these functions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Enter a question mark followed by any function, e.g., `?numpy.linspace`, into a code cell and execute it, to get a help pane on the notebook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The approximate solution at time $t_n$ is $u_n$, and the numerical solution of the differential equation consists of computing a sequence of approximate solutions by the following formula, based on Equation (10):\n", + "\n", + "$$u_{n+1} = u_n + \\Delta t \\,f(u_n).$$\n", + "\n", + "This formula is called **Euler's method**.\n", + "\n", + "For the equations of the phugoid oscillation, Euler's method gives the following algorithm that we need to implement in code:\n", + "\n", + "\\begin{align}\n", + "z_{n+1} & = z_n + \\Delta t \\, b_n \\\\\n", + "b_{n+1} & = b_n + \\Delta t \\left(g - \\frac{g}{z_t} \\, z_n \\right).\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To apply the numerical solution method, we need to set things up in code: define the parameter values needed in the model, initialize a NumPy array to hold the discrete solution values, and initialize another array for the elevation values." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# initial conditions\n", + "z0 = 100. #altitude\n", + "b0 = 10. #upward velocity resulting from gust\n", + "zt = 100.\n", + "g = 9.81\n", + "\n", + "u = numpy.array([z0, b0])\n", + "\n", + "# initialize an array to hold the changing elevation values\n", + "z = numpy.zeros(N)\n", + "z[0] = z0 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should pay attention to a couple of things: (1) See how there is a dot after the numbers used to define our parameters? We just want to be explicit (as a good habit) that these variables are real numbers, called \"floats.\" (2) We both _created_ and _initialized_ with zeros everywhere the solution vector `z`. Look up the documentation for the handy NumPy function `zeros()`, if you need to. (3) In the last line above, we assign the _initial value_ to the first element of the solution vector: `z[0]`.\n", + "\n", + "Now we can step in time using Euler's method. Notice how we are time stepping the two independent variables at once in the time iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-loop using Euler's method\n", + "for n in range(1,N):\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make sure you understand what this code is doing. This is a basic pattern in numerical methods: iterations in a time variable that apply a numerical scheme at each step." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the code is correct, we have stored in the array `z` the position of the glider at each time. Let's use Matplotlib to examine the flight path of the aircraft.\n", + "\n", + "You should explore the [Matplotlib tutorial](http://matplotlib.org/users/pyplot_tutorial.html) (if you need to) and familiarize yourself with the command-style functions that control the size, labels, line style, and so on. Creating good plots is a useful skill: it is about communicating your results effectively. \n", + "\n", + "Here, we set the figure size, the limits of the vertical axis, the format of tick-marks, and axis labels. The final line actually produces the plot, with our chosen line style (continuous black line)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4)) #set plot size\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z, 'k-');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Explore and think" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Try changing the value of `v` in the initial conditions. \n", + "\n", + "* What happens when you have a larger gust? \n", + "* What about a smaller gust? \n", + "* What happens if there isn't a gust (`v = 0`)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equation for phugoid oscillations is a 2nd-order, linear ODE and it has an exact solution of the following form:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "z(t) = A \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + B \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $A$ and $B$ are constants that we solve for using initial conditions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our numerical solution used the initial conditions:\n", + "\n", + "$$\\begin{eqnarray}\n", + "z(0) = z_0 \\\\\n", + "b(0) = b_0\n", + "\\end{eqnarray}$$\n", + "\n", + "Applying these to the exact solution and solving for $A$ and $B$, we get:\n", + "\n", + "$$\\begin{equation}\n", + "z(t) = b_0 \\sqrt{\\frac{z_t}{g}} \\sin \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + (z_0-z_t) \\cos \\left(\\sqrt{\\frac{g}{z_t}} t \\right) + z_t\n", + "\\end{equation}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We already defined all of these variables for our numerical solution, so we can immediately compute the exact solution. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Pro tip:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The expression is a bit long —if you don't feel like scrolling left and right, you can insert a line break in the code using a backslash '\\' _(without any trailing spaces)_ and Python will treat the next line as a continuation of the first." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the exact solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot our exact solution! Even better, we can plot _both_ the numerical solution *and* the exact solution to see how well Euler's method approximated the phugoid oscillations.\n", + "\n", + "To add another curve to a plot, simply type a second `pyplot.plot()` statement. We also added a legend using the format\n", + "\n", + "```Python\n", + "pyplot.legend([\"line 1\",\"line 2\"])\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nXZ3JngAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10,4))\n", + "pyplot.ylim(40,160) #y-axis plot limits\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase font size for ticks\n", + "pyplot.xlabel('t', fontsize=14) #x label\n", + "pyplot.ylabel('z', fontsize=14) #y label\n", + "pyplot.plot(t,z)\n", + "pyplot.plot(t, z_exact)\n", + "pyplot.legend(['Numerical Solution','Analytical Solution']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks like pretty good agreement, but what's happening towards the end? We'll come back to this. For now, re-run the previous steps with a different timestep, say $dt=0.01$ and pay attention to the difference.\n", + "\n", + "Euler's method, like all numerical methods, introduces some errors. If the method is *convergent*, the approximation will get closer and closer to the exact solution as we reduce the size of the step, $\\Delta t$. The error in the numerical method should tend to zero, in fact, when $\\Delta t\\rightarrow 0$—when this happens, we call the method _consistent_. We'll define these terms more carefully in the theory components of this course. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To compare the two solutions, we need to use a **norm** of the difference, like the $L_1$ norm, for example.\n", + "\n", + "$$ E = \\Delta t \\sum_{n=0}^N \\left|z(t_n) - z_n\\right|$$\n", + "\n", + "The $L_1$ norm is the sum of the individual differences between the exact and the numerical solutions, at each mesh point. In other words, $E$ is the discrete representation of the integral over the interval $T$ of the (absolute) difference between the computed $z$ and $z_{\\rm exact}$:\n", + "\n", + "$$ E = \\int \\vert z-z_\\rm{exact}\\vert dt $$\n", + "\n", + "We check for convergence by calculating the numerical solution using progressively smaller values of `dt`. We already have most of the code that we need. We just need to add an extra loop and an array of different $\\Delta t$ values to iterate through. \n", + "\n", + "You should read the documentation for the function [enumerate](https://docs.python.org/2/library/functions.html#enumerate) and make sure you understand how we're using it below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Warning" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below can take a little while to finish (the last $\\Delta t$ value alone requires 1 million iterations!). If the cell is still running, the input label will say `In [*]`. When it finishes, the `*` will be replaced by a number." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# time-increment array\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001, 0.0001])\n", + "\n", + "# array that will contain solution of each grid\n", + "z_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " N = int(T/dt)+1 # number of time-steps\n", + " ### discretize the time using numpy.linspace() ###\n", + " t = numpy.linspace(0.0, T, N)\n", + "\n", + " # initial conditions\n", + " u = numpy.array([z0, b0])\n", + " z = numpy.empty_like(t)\n", + " z[0] = z0\n", + " \n", + " # time loop - Euler method\n", + " for n in range(1,N):\n", + " ### compute next solution using Euler method ###\n", + " u = u + dt*numpy.array([u[1], g*(1-u[0]/zt)])\n", + " z[n] = u[0] # store the elevation at time-step n+1\n", + " \n", + " z_values[i] = z.copy() # store the total elevation calculation grid i" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Calculate the error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical solutions for each $\\Delta t$ in the array `z_values`. To calculate the error corresponding to each $\\Delta t$, we can write a function! " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_error(z, dt):\n", + " \"\"\"Returns the error relative to analytical solution using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " z : array of float\n", + " numerical solution.\n", + " dt : float\n", + " time increment.\n", + " \n", + " Returns\n", + " -------\n", + " err : float\n", + " L_{1} norm of the error with respect to the exact solution.\n", + " \"\"\"\n", + " N = len(z)\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " z_exact = b0*(zt/g)**.5*numpy.sin((g/zt)**.5*t)+\\\n", + " (z0-zt)*numpy.cos((g/zt)**.5*t)+zt\n", + " \n", + " return dt * numpy.sum(numpy.abs(z-z_exact))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: in the last line of the function, we perform an 'array operation': \n", + "\n", + "`z - z_exact`\n", + "\n", + "We are *not* subtracting one value from another. Instead, we are taking the difference between elements at each corresponding index in both arrays. Here is a quick example:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([3, 2, 1])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = numpy.array([1, 2, 3])\n", + "b = numpy.array([4, 4, 4])\n", + "\n", + "b - a" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we iterate through each $\\Delta t$ value and calculate the corresponding error. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "error_values = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " ### call the function get_error() ###\n", + " error_values[i] = get_error(z_values[i], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember, *if* the method is convergent then the error should get smaller as $\\Delta t$ gets smaller. To visualize this, let's plot $\\Delta t$ vs. error. If you use `pyplot.plot` you won't get a very useful result. Instead, use `pyplot.loglog` to create the same plot with a log-log scale. This is what we do almost always to assess the errors of a numerical scheme graphically." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nWtIESavUofkys59KukjSFElDJT0gaaGZbStJ7n6pu+/s7ru4e3Pbl4Yssi9f7eb72p626+75rp7r\nuL6z7aL42rq3P7OQ14XOM591Scqy0Nf2Ns9C1pdLnqX4Xe9sHXnm91xf1hVbnP/uZN/s3XaF5tmV\nSJo4d1/o7pPd/XZJ6zvZ5AxJ17n7Ne7+vLuPl/S6pJO7ek8zu1vSrZJGm9krZrZnX+uMw//ZpWri\nVqxY0W0dIcT5L6KunuvNX0RxzrLQ18bhL/a05BmXJo48wzVxpciyqzpCv47f9XCvLWUTF/klRsxs\npaRT3X1mbrm/pI8lHZlr8lq3u1jSTu6e6ePP45ArAABIjK4uMdKv1IXkYUtJG0t6s8P6tyRt3dc3\n7yoIAACAJOHsVAAAgASKYxP3jqR1kgZ3WD9YLXNxAAAAZS92TZy7r5H0uKQDOjy1v1rOUgUAACh7\nkczEmdlASTvkFjeS9BUzGyrpXXd/RdL/SLrezB5RS+N2klrm4S6Pol4AAIC4ieTsVDPLSGrKLbr+\ndX236e7+s9w2J0s6U9IQSX+SdLq731fiUgEAAGIp8kuMIBnMbIWkD9RyXb/33H2/aCtKPjPbRNKz\nkm51919GXU9SmdkgSYvVcmShv6TL3P3iaKtKptwF1a+X9AVJn0j6jbvfFm1VyWZmsyUNl9To7kdE\nXU8SmdlBki5Uy5G789z9mohLig2aOOTFzF6S9C13/39R15IWZvZbSZWSXnb3M6OuJ6nMbCNJ/d29\nOdcYPyNpD3d/O+LSEsfMtpa0lbs/bWaD1TKfvIO7r4q4tMQys+GSNpV0HE1c4cysn1p+pzOSVkp6\nQtL33P29KOuKi9id2IBY4xp7gZjZDpK+LmmhyLVP3H19m9vvfVbSaknN3bwEXXD3N9z96dyf31TL\n1QK2iLaqZHP3pZI+irqOBNtD0jPu/rq7fyRpgTY88bFs0cQhXy7pXjN7xMyOirqYFLhA0llRF5EW\nZraZmT0l6WVJU919ZdQ1JZ2Z7SppI3d/LepaUNa2kdR2H3xV0hcjqiV24njHBsTTD9z99dzhlrvN\n7E/u/qeoi0oiMztE0gvu/lcz2zvqetLA3T+Q9F0z20rSEjNrcPe/Rl1XUpnZFpJmSBoXdS0oe8x8\ndYNv4lLIzIaZ2Vwze9XM1pvZcZ1sc4qZvWRmq8zssbbNRO65ZWb2hJlVSJK7v5773zfU8nX2LqX6\nPFErQp57SjoyN2d4gaQTzGxy6T5RtIqxf7Zy97ckZSUNLfoHiYFiZGlmAyTNlnSuuz9Uuk8TvSLu\nm2XbiPQ1U0n/UPtv3r6k9t/MlTWauHQaKOlpSRMkrVKHv0DM7KeSLpI0RS3/sXtA0sLcmWly90vd\nfWd336V1WNzMNs299nOSfijpzyX7NNELmqe7n+3uX3b3r0r6v5KucvcpJfw8UQu9f27VZv/cTNI+\nufcvB6GzNEnTJTW5+42l+xixETTPti8tRfEx1adMJT0qaScz2yb3358DJd1Votrjz915pPihlrN5\nju2w7mFJV3RY94Kk33XxHl+V9GTu8SdJ1VF/riTn2WG74ySdH/XnSnKeknaXtCy3fy7r+H7l8giU\n5d5que3hE7ksl6nlrPTIP18S88w9f7ektyR9LOkVSXtG/dmSlqmkgyU9L+lFSeOi/hxxejATV2bM\nrL9aDoWe3+GpBkl7dfYad39JZXJ4qlC9ybMtd59RjLqSqpf756OSdi5yaYnTyyzvk7RxkUtLpN7+\nrrv7iGLWlWT5Zuru8yTNK2FpicHh1PKzpVr+kn6zw/q31HJrMxSGPMMiz3DIMizyDI9M+4gmDgAA\nIIFo4srPO2qZeRncYf1gSa+XvpzEI8+wyDMcsgyLPMMj0z6iiSsz7r5GLbfS6XjF6/3VclYQCkCe\nYZFnOGQZFnmGR6Z9x4kNKWRmAyXtkFvcSNJXzGyopHfd/RVJ/yPpejN7RC2/KCepZf7g8ijqjTvy\nDIs8wyHLsMgzPDItsqhPj+UR/qGWGwWvzz3WtfnztW22OVnSS2q5x+SjkvaOuu64PsiTPOP6IEvy\njPuDTIv7sFyAAAAASBBm4gAAABKIJg4AACCBaOIAAAASiCYOAAAggWjiAAAAEogmDgAAIIFo4gAA\nABKIJg4AACCBaOIAAAASiCYOAApkZgPM7AUz+0HUtQAoXzRxAFC4EyVtLmlKdxuZ2cZm9pyZbVOa\nsgCUE5o4ACiAmW0i6euSzpY03MxGdLP5rpK2cPd/lKQ4AGWFJg4ACnOKpEskXStpuaTfdLPtvpKa\nSlEUgPJDEwcAeTKz/yPpi+7+rLuvk1QnaU8zO6jDdj82s/+VdLqkz5nZ/5rZ1yMoGUCKmbtHXQMA\nJIKZ/UrSLe7+t9yySfqTpDXuvkuHbftLek/SLu7+QsmLBZB6fBMHAHkwsy0kbd7awEmSt/wr+BxJ\nQ81sTIeX/EDShzRwAIqFJg4A8lMt6Q8dV7r7HZKekFSX+2au1f6SsqUpDUA5ookDgB6Y2WBJ/d39\ntS42+S9J35R0VJt1I5Rr4sxsbzMbUNQiAZQdZuIAoAe5kxQelPRWN5tNl7RG0o7uvs7MPpa0l6Tn\nJE109/OKXiiAskITBwDdMLOtJb0kKZ9v0lzSz9x9hpldKGmtpLclXeHuHxexTABliCYOAAAggZiJ\nAwAASCCaOAAAgASiiQMAAEggmjgAAIAEookDAABIIJo4AACABKKJAwAASCCaOAAAgAT6/wsNBajn\noDeVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pyplot.figure(figsize=(10, 6))\n", + "pyplot.tick_params(axis='both', labelsize=14) #increase tick font size\n", + "pyplot.grid(True) #turn on grid lines\n", + "pyplot.xlabel('$\\Delta t$', fontsize=16) #x label\n", + "pyplot.ylabel('Error', fontsize=16) #y label\n", + "pyplot.loglog(dt_values, error_values, 'ko-') #log-log plot\n", + "pyplot.axis('equal') #make axes scale equally;" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the kind of result we like to see! As $\\Delta t$ shrinks (towards the left), the error gets smaller and smaller, like it should." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We calculated the error for several different timestep sizes using two nested `for` loops. That worked, but whenever possible, we like to re-use code (and not just copy and paste it!). \n", + "\n", + "Create a function that implements Euler's method and re-write the error analysis cell to use your function." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/01_03_PhugoidFullModel.ipynb b/lecture_22/01_phugoid/01_03_PhugoidFullModel.ipynb new file mode 100644 index 0000000..87184de --- /dev/null +++ b/lecture_22/01_phugoid/01_03_PhugoidFullModel.ipynb @@ -0,0 +1,943 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, I. Hawke. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Full phugoid model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the third IPython Notebook of the series on the _phugoid model of glider flight_, our first learning module of the course [\"Practical Numerical Methods with Python\"](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about). In the first notebook, we described the physics of the trajectories known as phugoids obtained from an exchange of potential and kinetic energy in an idealized motion with no drag. We gave you a neat little code to play with and plot various phugoid curves.\n", + "\n", + "In the second notebook, we looked at the equation representing small perturbations on the straight-line phugoid, resulting in simple harmonic motion. This is a second-order ordinary differential equation, and we solved it numerically using **Euler's method**: the simplest numerical method of all. We learned about convergence and calculated the error of the numerical solution, comparing with an analytical solution. That is a good foundation!\n", + "\n", + "Now, let's go back to the dynamical model, and take away the idealization of no-drag. Let's remind ourselves of the forces affecting an aircraft, considering now that it may be accelerating, with an instantaneous upward trajectory. We use the designation $\\theta$ for the angle, and consider it positive upwards." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Image](./figures/glider_forces-lesson3.png)\n", + "#### Figure 1. Forces with a positive trajectory angle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Figure 1, $L$ is the lift, $W$ is the weight, $D$ is the drag, and $\\theta$ the positive angle of the trajectory, instantaneously. \n", + "\n", + "In lesson 1, we wrote the force balance in the directions perpendicular and parallel to the trajectory for a glider in _equilibrium_. What if the forces are _not_ in balance? Well, there will be acceleration terms in the equations of motion, and we would have in that case:\n", + "\n", + "\\begin{align}\n", + "m \\frac{dv}{dt} & = - W \\sin\\theta - D \\\\\n", + "m v \\, \\frac{d\\theta}{dt} & = - W \\cos\\theta + L\n", + "\\end{align}\n", + "\n", + "We can use a few little tricks to make these equations more pleasing. First, use primes to denote the time derivatives and divide through by the weight:\n", + "\n", + "\\begin{align}\n", + " \\frac{v'}{g} & = - \\sin\\theta - D/W \\\\\n", + "\\frac{v}{g} \\, \\theta' & = - \\cos\\theta + L/W\n", + "\\end{align}\n", + "\n", + "\n", + "Recall, from our first lesson, that the ratio of lift to weight is known from the trim conditions—$L/W=v^2/v_t^2$— and also from the definitions of lift and drag, \n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "we see that $L/D=C_L/C_D$. The system of equations can be re-written:\n", + "\n", + "\\begin{align}\n", + " v' & = - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\\n", + " \\theta' & = - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v\n", + "\\end{align}\n", + "\n", + "It is very interesting that the first equation has the factor $C_D/C_L$, which is the inverse of a measure of the aerodynamic efficiency of the aircraft. It turns out, this is the term that contributes damping to the phugoid model: if drag is zero, there is no damping. Drag is never zero in real life, but as engineers design more aerodynam-ically efficient aircraft, they make the phugoid mode more weakly damped. At altitude, this is nothing but a slight bother, but vertical oscillations are unsafe during final approach to land, so this is something to watch out for!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The initial value problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to visualize the flight trajectories predicted by this model, we are going to need to integrate the spatial coordinates, which depend on both the forward velocity (tangential to the trajectory) and the trajectory angle. The position of the glider on a vertical plane will be designated by coordinates $(x, y)$ with respect to an inertial frame of reference, and are obtained from:\n", + "\n", + "\\begin{align}\n", + "x'(t) & = v \\cos(\\theta) \\\\\n", + "y'(t) & = v \\sin(\\theta).\n", + "\\end{align}\n", + "\n", + "Augmenting our original two differential equations by the two equations above, we have a system of four first-order differential equations to solve. We will use a time-stepping approach, like in the previous lesson. To do so, we do need *initial values* for every unknown:\n", + "\n", + "$$\n", + "v(0) = v_0 \\quad \\text{and} \\quad \\theta(0) = \\theta_0\\\\\n", + "x(0) = x_0 \\quad \\text{and} \\quad y(0) = y_0\n", + "$$\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solve with Euler's method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We know how to apply Euler's method from the previous lesson. We replace each of the time derivatives by an approximation of the form:\n", + "\n", + "$$v'(t) \\approx \\frac{v^{n+1} - v^n}{\\Delta t},$$\n", + "\n", + "where we are now using a superscript $n$ to indicate the $n$-th value in the time iterations. The first differential equation, for example, gives:\n", + "\n", + "$$\\frac{v^{n+1} - v^n}{\\Delta t} = - g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2$$\n", + "\n", + "Alright, we know where this is going. At each time iteration $t^n$, we want to evaluate all the known data of our system to obtain the state at $t^{n+1}$—the next time step. We say that we are _stepping in time_ or _time marching_.\n", + "\n", + "The full system of equations discretized with Euler's method is:\n", + "\n", + "\\begin{align}\n", + "v^{n+1} & = v^n + \\Delta t \\left(- g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2 \\right) \\\\\n", + "\\theta^{n+1} & = \\theta^n + \\Delta t \\left(- \\frac{g}{v^n}\\,\\cos\\theta^n + \\frac{g}{v_t^2}\\, v^n \\right) \\\\\n", + "x^{n+1} & = x^n + \\Delta t \\, v^n \\cos\\theta^n \\\\\n", + "y^{n+1} & = y^n + \\Delta t \\, v^n \\sin\\theta^n.\n", + "\\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we've learned before, the system of differential equations can also be written as a vector equation:\n", + "\n", + "$$u'(t) = f(u)$$\n", + "\n", + "where\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix}.\n", + "\\end{align}\n", + "\n", + "It's a bit tricky to code the solution using a NumPy array holding all your independent variables. But if you do, a function for the Euler step can be written that takes any number of simultaneous equations. It simply steps in time using the same line of code:\n", + "\n", + "```Python\n", + "def euler_step(u, f, dt):\n", + " return u + dt * f(u)\n", + "```\n", + "\n", + "This function can take a NumPy array `u` with any number of components. All we need to do is create an appropriate function `f(u)` describing our system of differential equations. Notice how we are passing a _function_ as part of the arguments list to `euler_step()`. Neat!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### And solve!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we start by loading the modules and libraries that we need for this problem. We'll need a few transcendental functions, including the $\\log$ for a convergence study later on. And remember: the line `%matplotlib inline` is a magic function that tells Matplotlib to give us the plots in the notebook (the default behavior of Matplotlib is to open a pop-up window). In addition, we are importing the module `rcParams` to define notebook-wide plotting parameters: font family and size. Here we go!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log, ceil\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to set things up to start our numerical solution: the parameter \n", + "values and the _initial values_. You know what the acceleration of gravity is: 9.8 m/s$^2$, but what are good values for $C_D/C_L$, the inverse of the aerodynamic efficiency? Some possible values are given on a table in the Wikipedia entry for [lift-to-drag ratio](http://en.wikipedia.org/wiki/Lift-to-drag_ratio): a modern sailplane can have $L/D$ of 40 to 60, depending on span (and, in case you're interested, a flying squirrel has $L/D$ close to 2).\n", + "\n", + "For the _trim velocity_, the speed range for typical sailplanes is between 65 and 280 km/hr, according to Wikipedia (it must be right!). Let's convert that to meters per second: 18 to 78 m/s. We'll pick a value somewhere in the middle of this range.\n", + "\n", + "Here's a possible set of parameters for the simulation, but be sure to come back and change some of these, and see what happens!" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 30.0 # trim velocity in m s^{-1} \n", + "C_D = 1/40 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = v_t # start at the trim velocity (or add a delta)\n", + "theta0 = 0 # initial angle of trajectory\n", + "x0 = 0 # horizotal position is arbitrary\n", + "y0 = 1000 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll define a function `f()` to match the right-hand side of Equation (15), the full differential system in vector form. This function assumes that we have available the parameters defined above. If you re-execute the cell above with different parameter values, you can just run the solution without re-executing the function definition." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare the code defining function `f(u)` with the differential equations, and convince yourself that it's right!\n", + "\n", + "\\begin{align}\n", + "u & = \\begin{pmatrix} v \\\\ \\theta \\\\ x \\\\ y \\end{pmatrix} & f(u) & = \\begin{pmatrix} - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\ - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v \\\\ v\\cos\\theta \\\\ v\\sin\\theta \\end{pmatrix} \\nonumber\n", + "\\end{align}\n", + "\n", + "Now, Euler's method is implemented in a simple function `euler_step()`:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equations.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After defining a final time for the solution, and the time step $\\Delta t$, we can construct the grid in time using the NumPy function [`linspace()`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html). Make sure you study the decisions we made here to build the time grid: why do we add 1 to the definition of `N`, for example?\n", + "\n", + "Look at the code below, and make sure you understand the following aspects of it.\n", + "\n", + "* The NumPy array `u` contains the solution at every time-step, consisting of the velocity, angle and location of the glider. \n", + "* The first element of the array `u` is set to contain the initial conditions. \n", + "* In the `for`-loop, the function `euler_step()` is called to get the solution at time-step $n+1$. " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "T = 100 # final time\n", + "dt = 0.1 # time increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u = numpy.empty((N, 4))\n", + "u[0] = numpy.array([v0, theta0, x0, y0])# fill 1st element with initial values\n", + "\n", + "# time loop - Euler method\n", + "for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot the trajectory" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to plot the path of the glider, we need the location (`x`, `y`) with respect to time. That information is already contained in our NumPy array containing the solution; we just need to pluck it out. \n", + "\n", + "Make sure you understand the indices to `u`, below, and the use of the colon notation. If any of it is confusing, read the Python documentation on [Indexing](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 3.00000000e+01 -1.11022302e-17 6.00000000e+00 1.00000000e+03]\n", + "[ 1000. 1000. 1000. ..., 1000. 1000. 1000.]\n", + "[ 3.00000000e+01 -1.11022302e-17 6.00000000e+00 1.00000000e+03]\n" + ] + } + ], + "source": [ + "# get the glider's position with respect to the time\n", + "print u[2]\n", + "x = u[:,2]\n", + "y = u[:,3]\n", + "print y\n", + "u[2]=euler_step(u[1],f,dt)\n", + "print u[2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to plot the path of the glider and get the distance travelled!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nfEtJjyq+OtMP69J+V0lXFvNcrPSG/neSjlf66Pa0bssvtd9K0meLeS5ROmJ0oKR/VLpQd42kiyRt\nU2qzQ9GvE0vLfpWkFUrnWQ4pnZq0WtI3pvAc7FIs733F8n4oab/S9j+qmG/b4venldb7GqUC6B+L\n7T5R0p8k/aq0/F8X835W6Z/MkNI5qV8slvN9Sdt2eV6q6+r2/D1W0m+VjiC/U9LhShd5LlQqqP4s\n6eU12328pLuUPiJ/TfG8HyZpgaSbO89Faf6/Kfr0m6I/ry8/R5L2rCz/cKUL1SYkLZJ0cPH15mK9\nt0p6cqXNnqUsVkv6pqQLJJ0j6amSDpL0kaJvZxfz/qqYd7TIbZfS8jqZvbfIZajazz7/bnYqlvsv\nRV/+VHnN7F6ad/9Shg/skvFwafpQl3XtpXTB7BpJX5b0jOK1doLSTvt5pfaHFMvcqtR+u9L01xev\nt38o1jtP0qpi+usr671fsayRLsvvfG0/hefKXbbzeZXlPKCYd3bx+/8U851ZWVZ1+jlKf/cnF9k+\nR9JVpdfH9sVzdkKx/hO19rW9sKa/MyV9qZjn68UyD5T0Qkk/Lh6/UNKWG/P9fVN9KRWsqyVdOIV5\nfzHZvEoXcndyPan0+BZKf/vr5Vhp/6xS+6c02I69Su1e1WO++aX59i49fmjp8ef0aP+uYr57JN2v\n7fz4mvpX6x3gi6+pfklaXHpD+ruNtMyuBX5lnl4Ffucf4XclzahMe6BSMdirQP1AMf2bklyZNkPS\neNH2/V3aPrm07O9X33yLImDSAr80/6JieT3bVJ6zayTtUJn+Ia1b4F8r6fM1y/pksZx3Ns2n9Pyu\nljSvS9vHFdP+LOmQyrQnSrq3mHZQTdt7JI13mXZtsdwX93iOHqF0XmvXf55KI2msUdq5mN0ji3sl\nvbcybUtJd0h6Y/H7a4t5b5G0dU1/fiHpPzfG30xluUcV6769xzxdC/zS9HIB3q3A/3Yx/Wtdpu1e\nbPdUl/8rVYpypZ3NNUo7XOsVMJP1v8Fz1XM7K/N+Rj0Kw2J65/VxRGXafsW0P0v6L0mPrkx/dun1\nsl6RrnTR6BpJX+wy7X6Sfl70bWkfz8F/Srqhz69fbqTXbJMC/+5i3mU95tm9lOsbS4/v0e3xLu0P\nLs13QoPtePxU2mnte81qSU8qPf6P3R7v0v61pfkesjEy4GvTfHGKDqaT8njDd7TWi4LTaD7PVPqI\n9N8jYnV5eqQL5N7Xo/0jJb1MNRdgFct7p9IRwHnuPd7y0oiongf9AqU38fvS2RFxe+WxBUoFdMcZ\nSgVrNx9S2r4X9bHuBSqO7kbEeqedRDp/9OtKR9JeW5n8LqUdqC9GxKU1bb/VR5863qp09PSKiPh8\nl+Wfr/QJzw7FvHUs6W2Vtn+R9Eilo/JSOv3sHqWj6sevtwD7GZIerh6vxVzZfqrSJzKhLs9TpNMv\nPthgkR+N9Uc6ubj4vqOk2uEOM/XriPhq+YGI+LlSQbyF0qc5V1bafE3p+dxJldFkilNMXlhMX+/C\n9uI95t1Kr8tXuMfwizV2krRbn19TGm9+Y3E6dbBzjcl656eXlKftUPr5/jXzTLX9ZDZ0+fd1/9Ay\nCnygfyOln79VM88lPdo/X+kf5d1Kp+N007kw7H5Kp4/U+W71gYi4NSJu6tFmY+i23tsj4nel38+M\niP+taX998X03Nx/nvjM8Y6/neKXSc/yUzgO2H6J0qouUdgDqnCxpvXOzJ+M0lvtI0bdey7+o6NvR\nrr8ZzdURcXP1wYj4XWfHKiJWKZ3+5Jr+vkLSpRHx46lvRTY6f2N/VpfXWqFX/lXrnQsdEXconUoh\nlYbSnSbGah6/qW56pIspOzvle1YmH1t8/2NEXFGz7M570rZKp3lMWUQ8PyJm9Pm1Y5N1AZs7xsHH\ndFIudHoeSbB9s9LRorKIiI15I51HFd9XRf0FWL/v0f6xxfdtJN1VXBNXFVo7pFuvO+GuVwRuIpOu\ntyh4X6p0Lu/+Srl0e+/ZXumUlUk5Xfz6MKXnZp7tk+pmLebZ3vYDIo2lXz5q+avuzaSI+KUaXJhd\n8gilTKPX8pVO9ZFSofQIpVMfqqaa6/uVjrwO2T6o86lEsTNzpKbvCBidv7HfVj8hK+n1N1Z1S83j\ndynlsE2DZbUtVL89fym+TzZ968rjnfeknWzXjYw01fekaS0i/mz7XqWDK71eF+Vp5U8z76iZZ6rt\nJ7Ohy7+v+4eWUeBjOikfUdpH6fz0Ok9UOgVDSkdiX66Nf3Oizk7GXT3m6TV8YOeI1I1KF2RONnRe\n7WgQ1dN7NqG6okvSX8eR/qbSzaquUvrY/+da+49iL6Uj2VKzoQPLR/M+pCkMmVpaZ7ltr+z6NdXl\nl3cK645O9nx+OyLi+7Z/orTz8gqt/UToX5R2mj4zleVkaEP/xqqm9HxOI2s2cHpV53V4rdK5+pP9\nTd7QcPnTzfVKp7f1Oj2oPO3/Sj/fpPTp7NZ9tp9K37otY6rLb9r+L2q2M42WUeBjOvmG0j/zLZU+\nGv5U3YxRGvPY9n11mkqnYJzZY571hoAs6Qybt01x3uwgWqxU3N+qdCHXqvJE93+n39tKP98dET/r\ns+22fa5/qsvv9dooT7utdq6pe7/Szs7zbZ+qdIRunqSPxEa8Q+wmtqF/Y2im8zrc6r54T7L9n0qj\nxvTjzoj4m43Znym4Qmn0rL17zFOe9teDUBGxxvbPlEZ8mmr7ulMZ1xMRv7N9i9JgA1NZ/h0R8evK\nuqIyT6/2V3W5zgsZ4xx8TBsR8UdJH1U6qnScu4yfvol1isqdXRovvaLXOb2d8bV3tL1b3Uy2D7T9\nEncZN30a+HulfyLfrxb3GyIi7tTa01/27TWv7eNtH1t66Celnx/Wo939ijHMm96U6GqtPeJcu/zS\ntImizYb6pFKBto3SDWyeqzQEapOLUHPT+Rvby/aMmnmm23nzOev8bezV4z1Ntg8p3pMe2HD50+Yi\n20LnTsz72q7byTyw+H5DRFQ/Vf6y0v+rx/VYR6f9pRFRd0pVna9Mcfmhtdsi6a/XnnSua+nV/nFF\n+y827BtaNm0LfNuHOt2cpvYGOBhIiyX9TqlweWPvWe9z5TsbPrVmnl4XxnaGupN6H9X6oNKIKf0e\n7Z6qznm56xS0to+zPdznMjvvMXVF8t59LleSzi+We5jt7bvNYPtvlcZJ/+vzG+mOj98v2j69x/K/\nqfSRdLXQWe95sj27eJ4eUBwt/8IUlv90pX+cFxQj42yQ4jqQTxTrfbnSqWlfiYjrezbMW+dv7H5K\no+l00+tvbGMoZ1PO/Am2j94IyzmgeO3k8P/4/OL7ZDc2+pjSCF/VEYl6moYX2X5O6V4WM5TundDN\nMUp/x+d0mfZxpdx3t31IdWJxkOqoov1H+uhfp82Bth/UZfm7ae2F0N1ucPcRFTfBsl29HkPF+/4s\npVPbPt5H/9CiHN5QGrG9je3TlcZGfoSmeF617YOd7rZ5U3H3wittn1ZcADhZ22cVbX/ndBfFG5zu\nwvkfdUdVi7sLLnW68+JdRdtzbe/TaIOxjmJYvKOVTvn4N9uv7DV/Ufg9qtc8G9CXH2ntEZp/qx5h\ntL2L0k1G6tpfpVS8W9Jp3Y6G2Z6n9BHvmV2G99vYOudX/rUfth+sdAOlfu9ieInS9j2puOCzqvb5\nmYJ3KY2Dv62kt1cnFnm8V2ms8CWVya9R+sd7lO3Hd2n7DKV/jJ/o8ryv9zwpXeA6qrVDz71J6RSZ\nR9teb6hS2y9QuuD4NtUPIdqP9xffZyvdpbLntQm2H+O1d0Xt9WlDKyLiW0rv9Zb0hup023sqXcB9\nXypf+1LO/HRJb5nqQiLiHq09Baa8nNdJ+nBEND1ffqOLiMu1didxcbdhMG3/P6XTVt41jU/9mpKI\nuE3pQJIlvdH2Ohej2n6h0o2ufqv132MUEdcovQdZ0tu67MQtVHot/FhdCnCnu4BfXdQPT+6y/O8o\n7YRsIenfu2zCvyvtnPx3RHQb0etcpfsC7KDKsKjFJ5dvV6qx3l8+7RXTRL8D6LfxpfSR9kqlj+YP\n1yQ3KCq1O17p3O0VSv+0Z0s6Vekf/w8kzaxpt4XSXuutkl6tVCjOUro99E+Kdf99l3Z7KN0A6DZJ\nL1a6Wc/TlS4uvFNdbpjEV+PXwkOVjrCuVnqD+n9KR/Ieq1TYnKg0PvitxTw3Snpzqf1MpQJrTul1\n9PTisZlK5/nvr8pdCovHdiwtZ1elcxlXK10jcJRSQf7CIu9PdFn+dqX291O6Gc1qpdM05irdkXKO\nUrH2Z6Wbad2vS9/nlpa9f/G11wY8pw9WOrXkz8W2HiTp08XfyQGl56Tbc7Z3zTL31No72V6rVIwd\nVDxPFypdAFpd1paVnHvdKGz/0vI/XfxtDiuN///Dou8n1vTtWKXTY27V2jvZPlnpTrOdj6+36dJu\nQdGnHysdVT5K6eK1yyrzPbVY9oRSIfj44ustxfO8SpX3guL19Ogi+85dhTvZ7thtO7r07+Ki7dVT\nmLdzp+C/qMFdKiU9oOjTK7T2Tradfj68mGf74vfOjaRWK/1t7q904eFWxc8HlqYfWzx2/9K6HqR0\ngfZqSV8tMu7cNfkqpcK/251y3WP5WxfzPLJ4vjvvE/9aXX8x37eL6cuK5Z1S/L644d/Yx4t2X1T6\nOzhB6X/Cx4rpDyv68z9Fn88r+vOQ0t9ot+l7VNp33pOWlrdnKturdIrXBcX0nxV9HCqe948Ur5XP\nStpiU73fb+hXsd37l56bzs0F13nN9mj/3uL5+IHSxccHKhXEdytdaPy3PdrOUCrCVyudUvN0pfeB\ndxWP/ULSg2ravqn02j2vZp7tlN6rVhevh8OU3pc+VrT9QfX1XGm/h9bevOwMpbs1P614ja5W+hRt\n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\nouXLl68z30UXXaSRkZH12p988slatmzZOo+Nj49rZGREq1atWufxRYsWacmSJes8dv3112tkZEQr\nV657vfBZZ5213tGEiYkJjYyMrDdW7+joqObOnbte34477rhpvR2nnHLKQGxHxyBtx0Me8pCB2I5B\nyaO8HaeccspAbIc0GHlUt6Pzvjbdt6NsULZj5cqVA7Ed0zmP0dHRv9Zis2fP1gEHHKBTTz11veXk\nwg1HnsyK7TVKI9bMjojru0zfQtItSufFz+l2cyzb35H0BEmvjoj3FI89rMdqvy1pL0kvlHRp8diN\nEXFn0fZMpTHuPxkRJ3RZ3zylcfWviIgDarZrSNLY2NiYhoaGenQFAAAAbRgfH9fw8LAkDUfEeNv9\nKRvoI/jFxbGfVxoG8/DqdNs7KA2PuUbS50rtflX3JekvxWy/Kz1+Z2mxnym+P6WmW09X2in59IZs\nGwAAANDNQBf4hbdLulfSXNv3r0ybL2lrpbvc/t/GWFlEXCLpm5L2sr3OzayKTwaOlrRK0tkbY31o\nR/XjQeSDbPJFNnkjn3yRDZqadgW+7V1s7267fI77bsVju1fnL25Q9VJJu0j6iu1Dbc+2/Wqli2gv\nk9TzJCrb25XW2blYd+fisV26NHmRpOskfdj2Sbb3tj1H0peUPi04triLLqaphQsXtt0F1CCbfJFN\n3sgnX2SDpqbdOfi2r9XaC13XmSQpIqLraDm2D5L0eqXz7beXdK2k/5L0zoi4d5J1LpK0SOnUmqrr\nImK9c/aL03/eIOkYSQ9WGpXnYklvi4irJlkf5+Bn7vrrr2dUg0yRTb7IJm/kky+yyVPO5+BPuwJ/\nc0CBDwAAkLecC/xpd4oOAAAAgHoU+AAAAMAAocAH+lC9+QbyQTb5Ipu8kU++yAZNUeADfZiYmGi7\nC6hBNvkim7yRT77IBk1xkW2GuMgWAAAgb1xkCwAAAGCToMAHAAAABggFPtCHVatWtd0F1CCbfJFN\n3sgnX2SDpijwgT7Mmzev7S6gBtnki2zyRj75Ihs0RYEP9GHx4sVtdwE1yCZfZJM38skX2aApCnyg\nD4xulC+yyRfZ5I188kU2aIoCHwAAABggFPgAAADAAKHAB/qwbNmytruAGmSTL7LJG/nki2zQFAU+\n0Ifx8axuWIcSsskX2eSNfPJFNmjKEdF2H1Bhe0jS2NjYGBfWAAAAZGh8fFzDw8OSNBwRWe2FcQQf\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# visualization of the path\n", + "pyplot.figure(figsize=(8,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'x', fontsize=18)\n", + "pyplot.ylabel(r'y', fontsize=18)\n", + "pyplot.title('Glider trajectory, flight time = %.2f' % T, fontsize=18)\n", + "pyplot.plot(x,y, 'k-', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grid convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's study the convergence of Euler's method for the phugoid model. In the previous lesson, when we studied the straight-line phugoid under a small perturbation, we looked at convergence by comparing the numerical solution with the exact solution. Unfortunately, most problems don't have an exact solution (that's why we compute in the first place!). But here's a neat thing: we can use numerical solutions computed on different grids to study the convergence of the method, even without an analytical solution.\n", + "\n", + "We need to be careful, though, and make sure that the fine-grid solution is resolving all of the features in the mathematical model. How can we know this? We'll have a look at that in a bit. Let's see how this works first.\n", + "\n", + "You need a sequence of numerical solutions of the same problem, each with a different number of time grid points.\n", + "\n", + "Let's create a NumPy array called `dt_values` that contains the time-increment of each grid to be solved on. For each element `dt_values[i]`, we will compute the solution `u_values[i]` of the glider model using Euler's method. If we want to use five different values of $\\Delta t$, we'll have five solutions: we put them in an array ... but each one is also an array! We'll have an array of arrays. How meta is that?\n", + "\n", + "We have one more trick up our sleeve: `enumerate()`. To get all the numerical solutions—each with its value of $\\Delta t$—done in one fell swoop, we will loop over the elements of the array `dt_values`. Within the loop, we need to access both `dt_values[i]` and the index `i`. It turns out, `enumerate()` is a built-in Python function that will give us consecutive `index, value` pairs just like we need. \n", + "\n", + "Read the code below carefully, and remember: you can get a help pane on any function by entering a question mark followed by the function name. For example, add a new code cell below and type: `?numpy.empty_like`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), we compared our numerical result to an analytical solution, but now we will instead compare numerical results from different grids. \n", + "\n", + "For each solution, we'll compute the difference relative to the finest grid. You will be tempted to call this an _\"error\"_, but be careful: the solution at the finest grid is _not the exact_ solution, it is just a reference value that we can use to estimate grid convergence.\n", + "\n", + "To calculate the difference between one solution `u_current` and the solution at the finest grid, `u_finest`, we'll use the $L_1$-norm, but any norm will do.\n", + "\n", + "There is a small problem with this, though. The coarsest grid, where $\\Delta t = 0.1$, has 1001 grid points, while the finest grid, with $\\Delta t = 0.001$ has 100001 grid points. How do we know which grid points correspond to the same location in two numerical solutions, in order to compare them? \n", + "\n", + "If we had time grids of 10 and 100 steps, respectively, this would be relatively simple to calculate. Each element in our 10-step grid would span ten elements in our 100-step grid. \n", + "\n", + "Calculating the _ratio_ of the two grid sizes will tell us how many elements in our fine-grid will span over one element in our coarser grid.\n", + "\n", + "Recall that we can _slice_ a NumPy array and grab a subset of values from it. The syntax for that is\n", + "\n", + "```Python\n", + "my_array[3:8]\n", + "```\n", + "\n", + "An additional slicing trick that we can take advantage of is the \"slice step size.\" We add an additional `:` to the slice range and then specify how many steps to take between elements. For example, this code\n", + "\n", + "```Python\n", + "my_array[3:8:2]\n", + "```\n", + "\n", + "will return the values of `my_array[3]`, `my_array[5]` and `my_array[7]`\n", + "\n", + "With that, we can write a function to obtain the differences between coarser and finest grids. Here we go ..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = ceil(N_fine/N_current)\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the function has been defined, let's compute the grid differences for each solution, relative to the fine-grid solution. Call the function `get_diffgrid()` with two solutions, one of which is always the one at the finest grid. Here's a neat Python trick: you can use negative indexing in Python! If you have an array called `my_array` you access the _first_ element with\n", + "\n", + "`my_array[0]`\n", + "\n", + "But you can also access the _last_ element with \n", + "\n", + "`my_array[-1]`\n", + "\n", + "and the next to last element with\n", + "\n", + "`my_array[-2]`\n", + "\n", + "and so on. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dt = 0.1\n", + "dt = 0.05\n", + "dt = 0.01\n", + "dt = 0.005\n", + "dt = 0.001\n" + ] + } + ], + "source": [ + "# compute difference between one grid solution and the finest one\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " print('dt = {}'.format(dt))\n", + "\n", + " ### call the function get_diffgrid() ###\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Time to create a plot of the results! We'll create a *log-log* plot with the Matplotlib function [`loglog()`](http://matplotlib.org/api/pyplot_api.html?highlight=loglog#matplotlib.pyplot.loglog). Remember to skip the difference of the finest-grid solution with itself, which is zero." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIiElpKUiIh\nZGatzGyLmZ1Sibanm9nPkhGXSLIpSYmE0/1AE+APlWj7Z6BHYsMRCYaSlEjImNmPgM3ANKCnmZ1X\nTtss4GLgv5IUnkhSaasOkZAxs/HAEOAYIhsdvu3u/1ZG27bAB8Cx7r41eVGKJId6UiIhYmYXA/90\n9x3uvgp4DuhoZpeXaJdjZi8CfwO2AE+Y2ejkRyySWOpJiYSImU0C/t3d90RfHwusAv7H3Q8b9jOz\nmcB6dx+U3EhFkkM9KZGQMLNuwJv7ExSAu39FZHvuc8zsmhLtawA/BRYkNVCRJFJPSiQEohMgXnT3\n60s51xBYDWwHznD3oujxC4D3gObuvjmZ8Yoki3pSIuFwAzCptBPu/i2RqehtgJsOOtWRyDCgEpSk\nLSUpkYCZWW2go7u/UU6zMcAaYLiZ1Y0e60h0qM/MapvZgwkNVCQANYMOQES4DXAzu7OCdp8CXYhM\nTx8BNAdmRc/dCbyYsAhFAqKalEiAor2itUCzSr7Fga+BVkA3oDewFHjL3RcmJEiRAClJiYhIaKkm\nJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIioaUkJSIi\nofX/ARE7ZqFnKYAXAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# log-log plot of the grid differences\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel('$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='-', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Order of convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The order of convergence is the rate at which the numerical solution approaches the exact one as the mesh is refined. Considering that we're not comparing with an exact solution, we use 3 grid resolutions that are refined at a constant ratio $r$ to find the *observed order of convergence* ($p$), which is given by:\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p = \\frac{\\log \\left(\\frac{f_3-f_2}{f_2-f_1} \\right) }{\\log(r)}\n", + "\\end{equation}\n", + "$$\n", + "\n", + "where $f_1$ is the finest mesh solution, and $f_3$ the coarsest. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is p = 1.014\n" + ] + } + ], + "source": [ + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values2 = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values2 = numpy.empty_like(dt_values2, dtype=numpy.ndarray)\n", + "\n", + "diffgrid2 = numpy.empty(2)\n", + "\n", + "for i, dt in enumerate(dt_values2):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + "\n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values2[i] = u\n", + " \n", + "\n", + "#calculate f2 - f1\n", + "diffgrid2[0] = get_diffgrid(u_values2[1], u_values2[0], dt_values2[1])\n", + "\n", + "#calculate f3 - f2\n", + "diffgrid2[1] = get_diffgrid(u_values2[2], u_values2[1], dt_values2[2])\n", + "\n", + "# calculate the order of convergence\n", + "p = (log(diffgrid2[1]) - log(diffgrid2[0])) / log(r)\n", + "\n", + "print('The order of convergence is p = {:.3f}'.format(p));" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See how the observed order of convergence is close to 1? This means that the rate at which the grid differences decrease match the mesh-refinement ratio. We say that Euler's method is of *first order*, and this result is a consequence of that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Paper airplane challenge" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose you wanted to participate in a paper-airplane competition, and you want to use what you know about the phugoid model to improve your chances. For a given value of $L/D$ that you can obtain in your design, you want to know what is the best initial velocity and launch angle to fly the longest distance from a given height.\n", + "\n", + "Using the phugoid model, write a new code to analyze the flight of a paper airplane, with the following conditions:\n", + "\n", + "* Assume $L/D$ of 5.0 (a value close to measurements in Feng et al. 2009)\n", + "* For the trim velocity, let's take an average value of 4.9 m/s.\n", + "* Find a combination of launch angle and velocity that gives the best distance.\n", + "* Think about how you will know when the flight needs to stop ... this will influence how you organize the code.\n", + "* How can you check if your answer is realistic?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Feng, N. B. et al. _\"On the aerodynamics of paper airplanes\"_, AIAA paper 2009-3958, 27th AIAA Applied Aerodynamics Conference, San Antonio, TX. [PDF](http://arc.aiaa.org/doi/abs/10.2514/6.2009-3958)\n", + "\n", + "* Simanca, S. R. and Sutherland, S. _\"Mathematical problem-solving with computers,\"_ 2002 course notes, Stony Brook University, chapter 3: [The Art of Phugoid](https://www.math.sunysb.edu/~scott/Book331/Art_Phugoid.html). (Note that there is an error in the figure: sine and cosine are switched.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/01_04_Second_Order_Methods.ipynb b/lecture_22/01_phugoid/01_04_Second_Order_Methods.ipynb new file mode 100644 index 0000000..dfe6da7 --- /dev/null +++ b/lecture_22/01_phugoid/01_04_Second_Order_Methods.ipynb @@ -0,0 +1,1187 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth, C.D. Cooper. Partly based on content by David Ketcheson, also under CC-BY." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid model: bonus!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_The phugoid model of glider flight_ has been such a fun problem to showcase the power of numerical solution of differential equations, we thought you'd enjoy a bonus notebook. The previous lessons were:\n", + "\n", + "* [Phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) —Lays the groundwork for our fun problem, with some context, a little history and a description of the physics of phugoids: curves representing the trajectory of a glider exchanging potential and kinetic energy, with no drag.\n", + "* [Phugoid oscillation](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) —Develops the simple harmonic motion of an aircraft experiencing a small perturbation from the horizontal trajectory: our opportunity to introduce Euler's method, and study its convergence via an exact solution.\n", + "* [Full phugoid motion](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) —The full model takes into account the force of drag and results in a system of two nonlinear equations. We obtain the trajectories using Euler's method in vectorized form, introduce grid-convergence analysis and finish with the paper-airplane challenge!\n", + "\n", + "That is a fantastic foundation for numerical methods. It's a good time to complement it with some theory: the first screencast of the course uses Taylor series to show that _Euler's method is a first-order method_, and we also show you graphical interpretations. Many problems require a more accurate method, though: second order or higher. Among the most popular higher-order methods that we can mention are the _Runge-Kutta methods_, developed around 1900: more than 100 years after Euler published his book containing the method now named after him!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Euler's method is a first-order method" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this screencast, we use a Taylor series expansion to analyze Euler's method and show that it incurs a truncation error of first order. We also use a graphical interpretation to motivate the _modified_ Euler method, which achieves second order." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import YouTubeVideo\n", + "YouTubeVideo('6i6qhqDCViA')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second-order methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The notebook on phugoid oscillation (lesson 2) included a study of the accuracy obtained with Euler's method, using the exact solution for the simple harmonic motion. We made a _convergence plot_ and saw that as $\\Delta t$ gets smaller, the error also gets smaller. \n", + "\n", + "We could have drawn a line with a slope equal to 1 on that log-log plot, and you would have seen that it was parallel to the convergence line. A slope equal to 1 on a log-log convergence plot is an indication that we have a first-order method: the error scales as ${\\mathcal O}(\\Delta t)$. \n", + "\n", + "In lesson 3, using the full phugoid model (which is nonlinear and does not have an exact solution), we did a _grid-convergence study_ with three different grids, and obtained the _observed_ order of convergence—it was very close to 1, indicating a slope of 1 on a log-log plot.\n", + "\n", + "Another way to look at an ${\\mathcal O}(\\Delta t)$ method is to say that the error scales _linearly_ with the step size, or that they are proportional:\n", + "\n", + "$$ e \\propto \\Delta t.$$\n", + "\n", + "where $e$ stands for the error. To get more accuracy, we could use a _second-order_ method, in which the error is ${\\mathcal O}(\\Delta t^2)$. In general, we say that a method is of order $p$ when the error is proportional to $(\\Delta t)^p$.\n", + "\n", + "In the screencast titled \"Euler's method is a first-order method,\" we used a graphical interpretation to get an idea for improving it: by estimating an intermediate point, like the **midpoint**, we can get a better approximation of the area under the curve of $u^\\prime$. The scheme has two steps and is written as:\n", + "\n", + "\\begin{align}\n", + "u_{n+1/2} & = u_n + \\frac{\\Delta t}{2} f(u_n) \\\\\n", + "u_{n+1} & = u_n + \\Delta t \\,\\, f(u_{n+1/2}).\n", + "\\end{align}\n", + "\n", + "This method is known as the *explicit midpoint method* or the *modified Euler method*, and it is a second-order method. Notice that we had to apply the right-hand side, $~f(u)$, twice. This idea can be extended: we could imagine estimating additional points between $u_{n}$ and $u_{n+1}$ and evaulating $~f(u)$ at the intermediate points to get higher accuracy—that's the idea behind Runge-Kutta methods." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Runge-Kutta methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the modified Euler method, we improve the accuracy over Euler's method by evaluating the right-hand side of the differential equation at an intermediate point: the midpoint. The same idea can be applied again, and the function $f(u)$ can be evaluated at more intermediate points, improving the accuracy even more. This is the basis of the famous *Runge-Kutta (RK) methods*, going back to Carl Runge and Martin Kutta. The modified Euler method corresponds to _second-order_ Runge-Kutta.\n", + "\n", + "Here's a bit of historical coincidence that will blow your mind: Carl Runge's daughter Iris—an accomplished applied mathematician in her own right—worked assiduously over the summer of 1909 to translate Lanchester's _\"Aerodonetics.\"_ She also reproduced his graphical method to draw the phugoid curves (Tobies, 2012)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phugoid model with 2nd-order RK" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's compute the motion of a glider under the full phugoid model using the second-order Runge-Kutta method. We'll build on the _paper airplane challenge_ of lesson 3 now, and look for the horizontal distance that the plane travels until the moment it touches the ground. \n", + "\n", + "As usual, let's start by importing the libraries and modules that we need, and setting up the model parameters. We also set some default plotting formats using the [`rcParams`](http://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.rcParams) module. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from math import sin, cos, log\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the paper-airplane challenge of lesson 3, we suggested an $L/D=5.0$ as a realistic value for paper airplanes, according to experiments, and a trim velocity of 4.9 m/s. Let's start with those values, but you could experiment changing these a bit. _What do you think will happen if you make $L/D$ higher?_" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Among the initial parameters that we suggest for your first experiment, we are starting with a velocity a little higher than the trim velocity, launch the paper airplane with a negative initial angle, and take the initial height to be 2 meters—all sound like reasonable choices.\n", + "\n", + "Now, we can define a few functions to carry out the computation:\n", + "* The right-hand side of the phugoid model from [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb),\n", + "* One step of the Euler's method that we learned in [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb), and\n", + "* Differences with respect to a fine grid, as in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])\n", + "\n", + "\n", + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)\n", + "\n", + "\n", + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = int(numpy.ceil(N_fine/N_current))\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we also need to define the function `rk2_step()` that computes the next time step using the *modified Euler* method of equations $(1)$ and $(2)$, above, otherwise known as 2nd-order Runge-Kutta or RK2. This function will be called over and over again within the time loop." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rk2_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using 2nd-order Runge-Kutta.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at the next time step.\n", + " \"\"\"\n", + " u_star = u + 0.5*dt*f(u)\n", + " return u + dt*f(u_star)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we first need to set up the time discretization, then initialize arrays to save the solution and we are set to go! The only difference this time is that we are using _both_ Euler's method and 2nd-order Runge-Kutta to get a solution, to compare the two. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "\n", + "# set initial conditions\n", + "u_euler = numpy.empty((N, 4))\n", + "u_rk2 = numpy.empty((N, 4))\n", + "\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_euler[0] = numpy.array([v0, theta0, x0, y0])\n", + "u_rk2[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "\n", + "# use a for loop to call the function rk2_step()\n", + "for n in range(N-1):\n", + " \n", + " u_euler[n+1] = euler_step(u_euler[n], f, dt)\n", + " u_rk2[n+1] = rk2_step(u_rk2[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can get the position of the glider in time, according to both Euler's method and the 2nd-order Runge-Kutta method, by extracting the appropriate portions of the solution arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x_euler = u_euler[:,2]\n", + "y_euler = u_euler[:,3]\n", + "x_rk2 = u_rk2[:,2]\n", + "y_rk2 = u_rk2[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### How far will it fly before touching the ground?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the $y$-axis measures the vertical coordinate with respect to the ground, negative values of $y$ don't have any physical meaning: the glider would have hit the ground by then! To find out if there are any negative $y$ values we can use the handy function [`numpy.where`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html). This function returns the **indices** of the elements in an array that match a given condition. For example, `numpy.where(y_euler<0)[0]` gives an array of the indices `i` where `y_euler[i]<0` (the `[0]` is necessary as `numpy.where` returns an array, which in this case contains a single line). If no elements of the array match the condition, the array of indices comes out empty. \n", + "\n", + "From the physical problem, we know that once there is one negative value, the glider has hit the ground and all the remaining time-steps are unphysical. Therefore, we are interested in finding the _first_ index where the condition applies, given by `numpy.where(y_euler<0)[0][0]`—do read the documentation of the function if you need to! " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_euler = numpy.where(y_euler<0.0)[0]\n", + "if len(idx_negative_euler)==0:\n", + " idx_ground_euler = N-1\n", + " print ('Euler integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_euler = idx_negative_euler[0]\n", + " \n", + "idx_negative_rk2 = numpy.where(y_rk2<0.0)[0]\n", + "if len(idx_negative_rk2)==0:\n", + " idx_ground_rk2 = N-1\n", + " print ('Runge-Kutta integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_rk2 = idx_negative_rk2[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Do Euler and RK2 produce the same solution?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An easy way to compare the numerical results obtained with the Euler and 2nd-order Runge-Kutta methods is using [`numpy.allclose`](http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html). This function compares each element of two arrays and returns `True` if each comparison is within some relative tolerance. Here, we use the default tolerance: $10^{-5}$." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Are the x-values close? False\n", + "Are the y-values close? False\n" + ] + } + ], + "source": [ + "# check to see if the paths match\n", + "print('Are the x-values close? {}'.format(numpy.allclose(x_euler, x_rk2)))\n", + "print('Are the y-values close? {}'.format(numpy.allclose(y_euler, y_rk2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hmmm, they do differ. Maybe $10^{-5}$ is too tight a tolerance, considering we're using a somewhat coarse grid with first- and second-order methods. Perhaps we can assess this visually, by plotting the glider's path? Study the code below, where we are plotting the path twice, taking a closer look in the second plot by \"zooming in\" to the beginning of the flight." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnEAAAGbCAYAAACrusZBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4FNX6wPHvm0AIIEV6QJHiBQEFFAQpSiDA5dKuIgqI\nVKVjAwQRBbH9aEpRUERB7GDDAlKkqBcEBYkoHSVIbyJIJ8n5/TETDGGTbJLdnd3Z9/M8+4SdPTPn\nfXeGycmcM2fEGINSSimllAotEU4HoJRSSimlsk4bcUoppZRSIUgbcUoppZRSIUgbcUoppZRSIUgb\ncUoppZRSIUgbcUoppZRSIUgbcYCI1BeR/SJyWkSSRaRsms9HicgREbneqRhV4InICPu4SBKRnX7Y\n/icicsg+5mb5cLv5RGSciCSKyKgsrJdbRNbZ8XTLYp1vishf9veV9rUgg/WKiMhMb+sUkatF5FUR\n2WFv+5CIrBaR0VmJVyml3EAbcYAxZpUxJgaYA3iaOK8wkB+Izs72RaR7dn4xhjI73+VOx5ETxpjn\n7OPiDzwfFzndfjvg5pS3vtimiDQFNgB3YP3/zsp2nwRutNfJajwGeNAYE+Ph1TKdWDsCvwKNUm0j\nXSJS1y5/DLjJ3jc3AQL0zmK8SikV8rQRdymxX5cwxjwCFDLGrM3h9sNtZmW35HvZMRGM2xaRqsDr\nwAPAs1lctzbwCPBRDmLyej0RaQmMwGpsvuVF+YLAJ8BXxpjhxpgTAMaYPcBgYH22IlZKqRCmjTgv\nGWPO+2Az/mwMKLUHqGaM+YqsNajyALOB0cDGHNSflUb7j8CNxpg1eBdrLyAGmHpZpcb8L72rfUop\n5WZh2YgTkZL2GJ4j9riaNSLSOp2yG0XkqN09OCrNZ1eJyAwR+V1E9tk/PxOR7qnK/ARMst9OTjVO\naFqqMnfb46N+F5GD9jifeSJyY5r6GqcZu1dNRKaJyE4ROSYiS0TkunTyuFFEPk5V/3YR+dzu6o1M\nU7a5iCy18/5TRH4RkeEiksuL73aYiOy33zZIVd8+EYlKO85MRMrbuf9h55Rsb6eIiDwhIqtEZLed\n33YRGSsi+VPV1yvV/jll1/Mv+7MWdl0X7DzuS7XezXb+R+z1t4nIGBG5IrMcU20jQkQGikh8qu/q\nOxG5K53ynUTkZxE5ISK/icgrQCFv68uMMeaEMeZUNlZ9DvjTGDOBnP2h4fW6xpjDxpjELGy7PZAM\n/JDlqJRSyq2MMWH1AgoAW4FDwC32sqJY3UhbsH5RlE2zTiN7+chUy3IBm4HFQFF7WUHgTSA5zfrd\n7PW7phNTAvAxUMR+XxL4FDgF1PBQfpa9vcVAPXtZRWAXsBvInaZ8C+As8C5Q0F52NbA8bb5AHyAJ\neB7Ig/WLuS3wN/BlFr7nZGBZBp/vBA4DC4Eq9rJWQJL971ggEeiRap1bgf3A/wBJtbyYnd8PHuop\nasdeKtWyVsA5e18VsJc1tLe9Doj2sH9+97Dtd4AzWA0Msb+vkXbuQ9OU7WMvfxXIi/UHVBtgtb18\npoft5weKZfM47572mE2nXEPgBFDRfv9URsdqBtuZBbwNLLH37QF7Pz0A5Mpk3QzrBCLt7/kwUNk+\njhOw/g+vAnpn93ygL33pS1+h/HI8gIAnDE/bvzD6pVleyP5ln8TljbjYtL8Qger2soFpyl4JbEqz\nLOUXanq/pL5M3ciwlxW0GzHveSj/pr29QWmWP2cvvzXVsnzAQfuXap405cumzhcoYzdu1nioc4y9\n7du9/J4za8QleIg1Auhv/7sW8JqH9QbY6zVPs/w9e3mtNMsfBT5K830cwrpZISpN2b72Nh72EOvv\naZalXBka5yHG1ViNyhJpjq09QGQ6x+PMNMvz2/vsPFA3G8d5yjGXbiPOrmMHMCDVsqcyOlYz2NYs\nrAZVLft9Efu7Pw8sS/tdp1k3wzqxGuLJwGn7WO6GdZPRlcBY+7M3svod6Utf+tJXqL/CsTu1HdbY\nnYWpFxpjjmN11XjbJXQYq5E1RETaikhuezvHjDFVsxKQMaa1MeZAmmUngH1YjcX0/C/N+z/sn2VS\nLWsGFAe+NsacS1PHH0AcVqMG4C4gN/CVh7pSurE8djtn0zljzHep4kk2xkyz/73OGOPpjsPN9s+0\n38t0+2fflAUiIlhjqaanKtcc68rdUnP5OMes5Hiv/dPT9Bk/AFF2XWDtg/x2nUlpyi5OZ/vnsfbn\nEeAvL+LJjvFAgjHmsnFm2fAIcJsxZh2AMeZPY8x4YAbWH0EP5GDbee2f0cC7xpjZxpiz9v+1YcAa\noIeINMxBHUopFXIyHePkQtfaP/d5+MzTMo+MMftFpCcwBZgHHBORr7C6ehYaY7we5G2PY3sEqAeU\n4J8B4sWxGorpOZTmfUojLSrVssr2z93p5LHCQ9mHRaRPmqKRwEmsBpCvHMzoQxFpD9yPtc+uwPpe\nUnLLl7qsMeYbEdkKdBSRQcaYv7EaqJHGmCWpiqbk2F5EWqStEivHol7EnrKduSKStmEWZW+npP0+\no2Nuv4dlGGMuAHW8iCNbRKQZcA/p/5GQpbFxxpj0GpofAf2w7kJ9ISvbTCVlnJ/B6q5NawFQF6ub\nPO0fNkop5Vrh2IhLkYd/Gj3ZYox5R0Q+Am4H7rRf9wArRKSFhys9lxGRG7C6334Huhhj4lN9lpDJ\n6slZCDePF2VSGo8jjTFTsrDt7Eo3fhF5GngCeBnobIw5ai9vhDWWz5PpwItAF2Aa1lW56WnKpOQ4\nwxgzKPuhX5xLrakxZoOX63izDwKlHdb3v8a6YHlRyo0dk0VkDFaOlYwxJ7NZT0ojtVQ218cYc0xE\nTmCNZz3ioUjKHzPFs1uHUkqFonDsTt1h/yzj4bPSWdmQiETa3TofGGPuAq7CuioQi9WY80YPrO6i\nZ1I34HwopfvRU76ISOlUd3tusX+WTadsnZQ7PwNgINYVmIdSGnApYWSwzmyssWi9RSQG64aOtE9C\nyCzH6iKSURd26u2Ip+3Yd602FZGUq5bb7Z+ejq8sHXO+YozpZ4wpYtJMzAtMsIukTNxbOrMGnIiU\nE5Eh6XwcY/9Me9U4q77D+r49NQZL+KgOpZQKKeHYiPsY65dBm9QLRaQQ1uz5XnWDikgs8EvqZXZj\nI+XKT+FUH6V0B+W21y0pIi/bjSePVwNFJJocXL1IZQlWt+W/ReSSLkgRqYY12L6KvehDO552IhKR\npmwJ4NtUZTNzBjtfe/3BItIkC3Gfw9oXaRtt5dNbwRhzDKv7rjrWfvjSGHM4TbHFWL/sm4s1gexF\nYs2XtgirEZ6Zd+yfnqYTaYN1s0rqOk8Czew6UmuaXgUikj9VQzBQMuxGTSemcsBYEfF0Jey/9s8v\nPXyWFa/ZP1t5+Kw51rEyL4d1KKVUSHGkESciNcWaX22TiGwQay62yd78whKRBBFZ7+HlbQNhPLAN\n64aEW+xtFsW6YnOSdJ7akFJ9mvfXicggEYmyt1MM6/E/f2NNEZLiF6xfMjXt922Au4w1p9ccrEHs\nI0Wksr2dQlgDwqMyiMVTPJctN8acxbpTMQ/wakrDRUQqYt3l+pGxn0RhjNkPPAhcA7wkIgXsshWw\nGr9LgS8yiCe1n4F/ifUcz+JYs/PnTVMmo9zexuram5jS+BSRm4CUufrSW/dV+2frVP++yP4+emJ9\ntzNTGh4iUhJ4H9iL9dSDtC6pzxjzCdb4x04i0lPsOfRE5FbgFeApY8wRu+zfwBCsuymn2N9JhFhz\nE3bwtH27gf8bsE+sx01ll8+evpAqpr0icrOH8u/bx1XK81v7Y42H+xGYmJNYjTFfYB0T3UWkq1jP\nec0rIiOBBsAkY0zA5pBz+BymlFIWJ26JxeqK+hDIa78vjdXtt5U0c3R5WHenD+ovgdVoO4I1Zmc9\n1t2GKfOvHQK+sMtuBI5iTcXxN9bg9LJY43MewhqftcveTgLWL5oqHuocbJc7gNXAaZbqs0ZY0zAc\nxbpqth7ob2/vgr3tbkBV+9+n7XgOARPtbfyIdRdjkv3zlzT134jVEDtgb2Mz8Dgepn7AuiFgkf39\n7MF6XuXwzPZNmm3chHXX4GGsuyzH28t72fVfSJXbWg/r5wIes+M8aX93X9jfY3KqfXFZTFjPDt2S\nSXy1sB7jdMjezlasaVQKpyozwkOsj6bZTl9grb3vdgMrgY7p1NkBiMealy0B63FTt/DP9Bn7gUZ2\n2dxYd7nuAypn4XtfiXUV9Lx9LFyw3+/LZL3FdrkL9nrn7ffTU5VJiWkv1ji5lOVRWFOuzMX6A+mg\nneM6ex/mSafOPenU+X065SOwutnjsZ6f+ifwDdDBl+cnL79nR89h+tKXvvRljLEmTA00EdkEtDbG\n/J5qWU+sKyDtjXWVI711dxpj0u1SU0opf9NzmFIqGDh1d2p1c/kjd1LuYiuctrBSSgUZPYcppRzn\nyJg4Dyc/gEpY48a+zWx9sZ6fuVJEtorIIhFpk9k6SinlK3oOU0oFg6C4O1WsB7DfB7xujNmRSfFD\nwDpjTAOgGvAZ8JmIDPBzmEop5ZGew5RSTnBkTNxlQYg8hTV1wG3GmDPZWP9LrIejlzBpHi2llFL+\npucwpZQTHH9ig4j0wLqzLTY7Jz/bD0BLrLs313uow/mWqlIqoIwx2Z1eJUv8fQ7T85dS4cmbc5ij\n3aki0gUYBDQx9pxamZSPTvV0gdRSnl0Zmd66Tt3+O2rUKEdvPw7n+sM5d6frdzr3QAnUOczJ79JN\nx4XmobmEystbjjXiROReYCgQZ4w5ZC9rLSK9UpUpKXLJgx074vkh2rWwHre0yY8hZ0tCQoLWH4Z1\nh3v9TuceCOFyDvMltxwXbskDNJdQ59QTGzpjPZHgTazHH91rnxDbYD9LUkQaYE10OjXN6p1EpHaq\nbXXAerTPOGPM6QCEr5QKc3oOU0oFA6fGxE3BmuV9fJrlBhht//sk1qzs+1J9vgDrIfPTRCQ31nxM\nfwJ9jDGeHpXkuO7du2v9YVh3uNfvdO4BEDbnMF9yy3HhljxAcwl1QXF3qr+JiAmHPJVSFhHBBOjG\nBn/T85dS4cfbc1hQzBPnZitWrND6w7DucK/f6dxVcHLLceGWPEBzCXXaiFNKKaWUCkHanaqUch3t\nTlVKhTJvz2GOT/ar/CcxMZHly5fz7bffsnv3biIjI6lYsSLNmzenVq1aXDrzgVJKKaVCiXan+pkT\nffTnz59nypQplCtXjoceegiA2267jXr16nHkyBE6dOhA3bp1+fbbTJ/TnWOBzF9E9BUmLxWa3DJm\nyS15gOYS6vRKnMts2bKFjh07UrJkSb788kv++usvYmNjrQ+nTYOoKCbMmcOHv/1G586d6dSpE88/\n/zy5crnjUNBuJ/fTRpxSSll0TJyLzJkzh0cGDGDKAw9w58iRl/+yW7cOPv0U3noLqlblz9Gj6fDE\nE+TPn585c+aQJ08eZwL3EXsMgdNhKD/zZj/bZVzR2guX85dS6h/ensO0O9Ulpk2bxqwHHuC3K6+k\n/a5dnq9W1KoFzz4LO3bAv/9NkVat+Oqee8iVKxedOnUiOTk58IErpZRSKlu0EedngeijnzhxIlue\nfpr5ycnkfeopeOONjOuPioJHHoFvviHXzp289957HDlyhBEjRvg8tnAco6CU8swt5wO35AGaS6hz\nx0CoMPb2229zevRoXixQgMhFi6BGDe9XrlYNnn6aKOCTTz6hbt261KxZkw4dOvgtXqWUUkr5ho6J\nC2FLly5leIcOfFukCNErVkDp0jna3tq1a2nZsiXx8fGUzuG2nKBj4sKDjolTSrmdjolzuV27dtG5\nc2fGfvgh0Zs25bgBB1C7dm369+/Pfffdp42hEFK9enVKlChBREQEefLkISYmxuMrT548zJ49O9t1\nFC1alIiICEaPHp35CkoppfxOG3F+5o8++rNnz9K+fXuGDBlC48aNIYPpQbJa/4g+fTiybx9z5szJ\nYZTZq19l3YYNG/jxxx8BaNCgAfv37/f4ql+/fran59iwYQOffPIJoFN8qOxzy/nALXmA5hLqtBEX\ngh588EHKlSvH4MGDfb7t3MOG8dFNNzF06FBOnz7t8+0r/wjElVO9OquUUsFFb2zws4sT7frIhx9+\nyIoVK1i3bp1XV0SyXP+YMVxTsyYdb7qJsWPH5rjrzNf5q+xbunQpERH6d5tyjlvOB27JAzSXUKdn\n9BCyf98+Irp04dMhQyhQoIB/KildGkaP5unjx3lpyhQOHjzon3pUwHTv3p3Ro0dfbMDNmDGDmJgY\nIiMjKV++/MVyu3fvJiYmhnz58hEREcEff/zhdR379u2jT58+XHXVVRQtWpQyZcrQtWtXfvvtt4tl\nduzYQUxMDAUKFCAiIoKvv/6a0aNHU6VKFfLnz09ERES2x+wppVQ40kacn/mqj94Yw+dxcdxStCjV\nunXzb/29ehF96hTjb7mFcePGZX39nNavfC71VdtevXqxf/9+ypYte8nyq6++mv3799OhQ4csjXvb\ntWsXtWvX5qeffuK7777j6NGjrFq1ih07dlC7dm22bdsGwLXXXsv+/fsZMmQIACNGjKBcuXL8+uuv\n7Nu3j4oVK+p4O5dzy/nALXmA5hLqtBEXIj56/HHu2rGDEsuXg78fj5UrF0yZQreNG3lr5kwOHDjg\n3/qUz6xcufKyu1Lnzp3rsWx6Y9yMMVka/zZgwAAOHjzI7NmzL17Zu+aaa5g5cybHjx9n6NChHuu9\n/vrr6datG5GRkRQqVIhp06ZRt25dr+tVSqlwp404P/NFH/3eHTuoPn48Z8aMIXelSoGpPzaWXEuX\nck/Xrjm6GheOYxSc5Onu1A4dOvjtpoQ///yTBQsWULZsWapWrXrJZ9dddx0FChRg8eLFJCYmXrZu\ns2bNLntfuXJlv8SpgoNbzgduyQM0l1CnNzaEgHWtW1O+cmXK+OFu1Az9618MGTKEGjVqMHLkSAoX\nLhzY+gMkkF14Tt3h6a8ct2/fDlhj4mJiYjyWyZUrF0eOHKFUqVKXLE/7XimlVNbolTg/y2kf/eLF\ni5l88iTXLlrkSP1XX301//nPf3j99dcdqT8QUroPA/FywqxZsxg5cqTX5ZOTk70um9I4rFatmse5\n6Y4fP86JEyc8Ntj0TtnwEwrnA2+4JQ/QXEKdnkWD2NmzZxkwYACDX3uNvFdd5VgcgwYNYsqUKVy4\ncMGxGJTv5c6d2+M+zcodyZUqVUJE2LNnj8fPd+/eHZYnVqWUCgRtxPlZTvrox40bxw033EDLli0d\nqT9FrVq1qFChAh9//LEj9avMedNdet999/HMM89cfH/VVVdx8OBBzp8/f3HZ6dOnWbt2rdfdr4UL\nF6ZVq1YcOXKE5cuXX/b5gw8+yJQpU7zalnI/t5wP3JIHaC6hThtxQeq3335jypQpTJo0yelQ4NQp\nppYsyfRXX3U6EpWOlK7ajLpsk5KSLukqbd++PYmJiYwbN47k5GROnTrFI488QunSpTPs/k27/OWX\nX6Z06dIMHDiQX3/9FbCuIj/zzDN8++23PPfcc15tRymlVNZoI87PstOVZJKSGDhwIMOGDaNs2bIB\nr/8y+fJRZeNGiv/888U5vwJav8pQuXLluO666xARvvvuO/Lmzevx9e67715yha1fv348++yzvPnm\nmxQrVoymTZvSvn17ateuDcDNN9/MHXfcAUD16tW58847EREmTJhA6dKlL04GXLZsWdauXUujRo1o\n2bIlpUqVomrVqmzdupVVq1ZRpUoVgItj41544QVEhHbt2hETE8PKlSsD/I0pp7jlfOCWPEBzCXV6\nd2oQ+rVbN1r89BP9P//c6VAsIkQ88ghPjRnDjBkzGD9+vNMRqVQSEhKytV5ERASPP/44jz/++CXL\nmzVrxqxZsy5ZtmHDhgy3VapUKaZNm8a0adPSLVOwYEGdc1AppXxIwqFLQ0RMqOR5Mj6e87VqseP9\n96lz991Oh/OPU6dIuuoqakdEsHrfPvL4e8LhbBAR7aILA97sZ7uMKx7/EErnL6WUb3h7DtPu1GBi\nDPv/+18W3XRTcDXgAPLnJ7JLFwYVLMi8efOcjkYppZQKe9qI87Os9NHvfvZZTu3bR1MfdqP6dIxA\nnz60O3mSGdOnO1O/UiqkueV84JY8wP25JCYm8ttvv7Fs2TLmzZvHnDlz+OKLL/juu+/Yu3dvlubF\nDEY6Ji5IJB86RP5nnuGHoUOpmc7M946rVo3I9ev5qXp19u7dS5kyZZyOSCmllLooKSmJVatWXWyo\nxcfHU6JECcqXL0+hQoXIkycPp0+f5ujRo+zcuZNz585Rr1494uLiaNeu3cXnP4cKHRMXJN6aPp34\nF19kwubNQT+T/X333UeVKlUYMmSI06FcQsfEhQcdE6eUSmvnzp1Mnz6dN998k1KlSnH77bfTqFEj\n6tSpQ/78+dNd7+DBg6xcuZKFCxcyb948KlWqxMCBA7nzzjvJnTt3ADO4lLfnMG3EBYGjR49SrVo1\nFixYwE033eR0OJlatmwZgwcPZv369U6HcgltxIUHbcQppVJs3ryZZ599lkWLFtG1a1f69OlD5cqV\ns7WtxMREPv/8cyZPnsyePXsYPXo0nTp1IjIy0sdRZ05vbAgS3ow3GD58OHfffbdfGnD+GO/QqFEj\nDh8+zKZNmxypXykVmtxyPnBLHhC6uRw+fJi+ffvSqFEjrr/+enbu3Enbtm2z3YADyJUrF+3ateOb\nb77hjTfeYOrUqdSvX5/4+HgfRu5b2ohz2Pfff8/8+fMveRxSsIuMjKRTp068++67ToeilFIqjBhj\nmDlzJlWrViU6OpqtW7cyfPhwChQo4NN6YmNjWblyJX369OHf//43o0aNIjEx0ad1+IJ2pzooMTGR\n2rVrM2zYMDp16uR0OFmy/c036T1iBEt37w6aMXzanRoe3NKdKiLPAo8DPYwxszMoF5TnL6UC7cCB\nA/To0YODBw8ya9YsatSoEZB69+/fT7du3Th9+jRz5swJyE192p0a7IxhS8OGVM+Xj44dOzodTZZd\nm5DAfWfPsnr1aqdDUSqgRKSmiMwQkU0iskFENorIZBEploVtXAUMAoz9UkplYNGiRdx0003UqVOH\nNWvWpN+A++MPeP99GDvW8+dHjsDdd8PIkTB/Pvz1V6Z1x8TEsHDhQlq2bEndunVZs2ZNDjLxLW3E\n+Vl64w3+nDoVWbuWEa+9dsnzLANVf05Jly7cfvYsn86d60j9SjnoA6AwUMsYUx1oBjQHVopItJfb\neB5YCgT11UJfc8v5wC15QPDnYozhueeeo2fPnrz77ruMHj368rtGN2+GESNYcc01ULs2fPghpHcz\nQnQ0tGsHyckwcSKULQtxcZDJ8KCUxxS+8sortGnTJmgmvdd54pxw7Bjy6KOs7NKF3tdf73Q02VOx\nIlK5Mn++9x5m4kS/NkSVCjLJwDBjzBkAY8w+ERkPvA60BD7JaGURqQXUB/oDrfwcq1Ih68yZM3Tr\n1o1du3bx448/Urp06csLGQO9ekH9+jBsGPTtCxkN8bniCkjd+3XqFCxZAn/+6VVMbdq04auvvqJ1\n69YcO3aMHj16ZDEr39IxcQ7Y1bIlK1eu5I4DB8ibN6/T4WSbefllPn/8ccosW0bt2rWdDkfHxIUJ\np8fEiUguY0ximmX/AeYD9xtjZmay/gpgGnAIWAZ0N8a8lUH5oDp/KRUIR48epW3btpQrV4433niD\n6GhvL3IHxtatW2nWrBkjR47k/vvv9/n2dUxckDqzdCnRixdTevbskG7AAUj79jS/cIHP5sxxOpSw\nVr16dUqUKEFERAR58uQhJiaGmJgYSpQoQXR0NJUqVeLJJ5/k7NmzF9d56623iImJIV++fERERFC0\naFFKly7NhQsXAPjxxx8pVaoUUVFRREVFERMTwxtvvAHAX3/9xdSpU7ntttsoXrw4RYoU4ZprrqFn\nz57s2LHDke8gkNI24GyVsMa2fZvRuiJyO5DHGJPxOASlwtiePXto2LAhDRs25O233/6nAXfmTGAD\nMQZWrfL4UeXKlVm6dClPPfUUs2ene1+S/xljXP+y0nTG8uXLL3n/SocOZnxsrGP1+9q2SZNM1QoV\nTHJysiP1p+bkfnZaQkKCERHTuHHjS5afOHHCDBw40IiIadas2WXrde/e3YiI+eabby777I033jAl\nSpS47LNbb73VREVFmbfeesskJiYaY4xZvXq1KV++vClQoIBZt26dDzO7nDf72S4TqPNLJLABmJ5J\nudzAFqC+/T4Wq2u2aybrZfu7CjaBPB/4k1vyMCb4cvn9999N+fLlzYQJE/5ZePasMU88YcwNNxiT\nlJTuuj7P5dAhYypWNKZrV2OOH/dYZPPmzaZUqVLmiy++8GnV3p7D9EpcAMXHxzNq+XK6uujK1bUP\nPsjp5GR++eUXp0MJayad7rYCBQowefJkypUrx9dff33ZIOb01nv66ad56qmnWL58Obfddttl6wwc\nOJAuXbpcnMm8bt26vPzyy5w8eZJBgwblPKHQ8iRwDng4k3L9gF+NMZ7/tFcqzO3YsYNGjRoxZMgQ\nBg8ebC3ctAnq1oVffoGFCzMe7+ZrxYtDfDxERUGdOlYsaVx33XXMmzePHj16OHLXqt7Y4GexsbGA\n9VDePn368Pzzz1OiRImA1+8vIsKdd97JRx99RPXq1QNev8pcREQENWrUICEhgXXr1mW4T5KSkujX\nrx9r1qxh9erVHgcSd+vWjXr16l22vGHDhgBBdfu9v4lID6A9EGvsGx3SKVcYeAy4zdPHmdXTvXt3\nypUrB0DhwoWpWbPmxf2Y0jAPhfexsbFBFU9O3qcIlniy+z5lmdPxlC9fnqZNm3LXXXdRtWpVK7BZ\ns1jx8MPQuzex48aBSOCPr7VroXNnYuvXh0aNWDFoENSrd1n5WbNmcccddzBx4kRKliyZreNpxYoV\nJCQkkCXeXK4L9RdB0B0xZcoUc+utt5qkDC4Fh6pvv/3W1KxZ0+kwwro7defOnR67U1O0adPGiIh5\n+eWXL1nerVu3i92pp06dMq1atTKNGzc2x9PpOsjI4cOHjYiY0qVLZysHb3mznwlAdyrQBfgFKOFF\n2RbAH8BB3IdmAAAgAElEQVT6VK/tWN2pu+z3T6Szbo6+L6WC3d69e02FChXMlClT/lm4caMxVata\nP4PF6tXGtGqVbpfuuHHjzI033mhOnTqV46q8PYdpd6qfrVixgh07djB69GhmzJgR8KcbBGIOoHr1\n6rF79252797tSP0qYxcuXCA+Ph4R4ZZbbvFY5tChQzRu3JiCBQuyaNEiChYsmOV6VtkDgDt06JCj\neEOBiNwLDAXijDGH7GWtRaRXqjIlxZ57xxiz0BhT1hhzY8oLSLml7Ul72bOBziPQ3HI+cEse4Hwu\nf/31Fy1atOC+++7jgQce+OeDqlXh55+tn17yey5168KXX6bbpTtkyBCqVatG79690x2q4mvaiPOz\npC1bWNysGU888USOHswbzHLlykXr5s2Z/9lnToei0ti/fz99+vRh7969DBo0iFq1anks16NHDzZs\n2MDIkSMvn0jTC8YYXnzxRWJiYhgxYkROww5qItIZmAG8CTQXkXvtRl0boLRdpgGwD5ia0abS/FQq\nrJw5c4a2bdvSpEkThg8ffnmBXKE14ktEeO2119iwYQMzZswITKXeXK4L9RdOdUecPGmOFi9uRleu\n7Mpu1NT233CDeaJ2bUdjyPZ+HjXKGOtm8ktfo0b5tnx6n/tASndqVFSUKVWqlClVqpTJly+fERFT\nu3Zt88MPP3hcL6U7tU6dOkZETJkyZcz27duzXP/kyZNNdHS0+fbbb3OaSqa82c/4sTsVOAokYXWF\npn4lASPtMjWAI3joIgVKATuB/fY6h+33ddKpL+dfmlJBJikpydx1112mY8eOrvv9uHnzZlOsWDGz\nfv36bG/D23OY4w2sQLycOgkeu+su80FUlNmxY4cj9QfS6aefNq/nzm3+/vtvx2II5192nsbEnT59\n2owYMcKIiGnVqpXHaWBSGnErVqwwvXv3NiJirr76avPbb795XffHH39soqOjzWeffeaTXDLjdCMu\n0K9wPq6Vew0fPtw0aNDAnDlzxhprtnix0yFlz4ULxniY2uTtt982VapUMadPn87WZr09h2l3qp8k\nfvghJz//nB969qRixYqOxRGo8Q55O3TgvyIsWbTIkfrV5fLmzcuzzz5LXFwcCxYs4PXXX0+3rIgw\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(10,6))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler[:idx_ground_euler], y_euler[:idx_ground_euler], 'k-', label='Euler')\n", + "pyplot.plot(x_rk2[:idx_ground_rk2], y_rk2[:idx_ground_rk2], 'r--', label='RK2')\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_rk2[idx_ground_rk2-1]))\n", + "pyplot.legend();\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler, y_euler, 'k-', label='Euler')\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From far away, the Euler and RK2 methods seem to be producing similar answers. However, if we take a closer look, small differences become evident. Keep in mind that we are solving the same equation and both methods will converge to the same solution as we refine the grid. However, they converge to that solution at different rates: RK2 gets more accurate faster, as you make $\\Delta t$ smaller." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Grid-convergence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), we want to do a grid-convergence study with RK2, to see if we indeed observe the expected rate of convergence. It is always an important step in a numerical solution to investigate whether the method is behaving the way we expect it to: this needs to be confirmed experimentally for every new problem we solve and for every new method we apply!\n", + "\n", + "In the code below, a `for`-loop computes the solution on different time grids, with the coarsest and finest grid differing by 100x. We can use the difference between solutions to investigate convergence, as before." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for-loop to compute the solution on different grids\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once those runs are done, we compute the difference between each numerical solution and the fine-grid solution." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# compute diffgrid\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "for i, dt in enumerate(dt_values):\n", + "\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we plot!" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nicaKFSu44YYbWLVqFR9//HHU4UgBmUymza7Dqqy9lhRJb+kkfdpm0qUpfxdffDGTJk3iuOOO449/\n/GPU4VQs6bkLe/aaiEjNNDc3M2XKFMyMa665JupwpEJq6RSR9JaOSByMGDGCX/3qV5x++un86le/\nijocKYFaOiISW4cffji9e/fm6quvjjoUCYGKToql+VmBJEhL/i666CKam5vp27dv1KGEJi25y6cq\nRcfMZlfjviKSTttsU9FEW6kjpeynE2QTt0nu3rWSwOqBmfn48eM1ZVpEpAQtU6YnTJgQfMFPbeKm\niQQiIuWodCLB+8BRwODcayjwMnAHMILspm1H5/77DmAx2U3fpM6luV85CZKav08++YR7772XjRsT\ntcDJpyQ1d6UopaP0L+7+RMsbM5tEdhO3+/NcO93MTia7idvvQopRRFLkrrvu4vzzz+f444/noYce\nijocCZk2cStC3WsitbVmzRoGDhzIkiVLuOeee/j2t78ddUgSQNjP6ewCFJsk0BXYKcB9RSTlbrnl\nFpYsWcLBBx/Mt771rajDkSrQJm4pluZ+5SRIWv7ef/99Jk6cCMA111xDu3axn4tUUNJyV44gk98v\nAR4nu4nbUmAp2WnSPYCewCqgIawARSQdpk6dygcffMBRRx3FMcccE3U4UiWB1l4zs32AnwDHAZ1z\nh1cDTcA4d58bWoQR0piOSO1s2rSJe+65h/32249DDjkk6nCkAsXGdLSJWxF6OFREpHShPBwahJmd\n4e6xXw426S2dpO/pkXTKX3wlPXdRrDJ9Q5XuKyIiMVbKMjiNwM7uPir3vpnia7EZ0NvdO4QVZFSS\n3tIREamGisZ0zOxtYEdgF3dfa2brgafb+MzD3b1ToGjriIqOSPW4O8OHD+dLX/oSF154IZ06xf5X\nhuRUWnR6AB3d/c3c+6Xu3rONr2nzmjhIetFJer9y0sU9fzNnzuS4445jp512YuHChXTtGvuF6UsW\n99y1paIxHXdf1lJwcjqa2VQz+1qRL/t+uUGKSHps2rSJyy+/HIAxY8akquCkXZC11zYB04Hr3P2V\nqkRVJ5Le0hGJyvTp0znjjDPo3bs38+bNU9dawoT6nI6ZLXP3HqFEVudUdETCt379evbdd1+am5u5\n4447OPfcc6MOSUIW9pTpV8ysVxsfeFeA+0qNpXn9pySIa/5WrFhB79692X///TnzzDOjDicScc1d\n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\nzP8H50NbGbioopAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot using the matplotlib function loglog()\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel(r'$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.xlim(1e-4,1)\n", + "pyplot.ylim(1e-4,1)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='--', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is looking good! The difference relative to our fine-grid solution is decreasing with the mesh size at a faster rate than in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), but *how much faster?* When we computed the observed order of convergence with Euler's method, we got a value close to 1—it's a first-order method. Can you guess what we'll get now with RK2?\n", + "\n", + "To compute the observed order of convergence, we use three grid resolutions that are refined at a constant rate, in this case $r=2$. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 1.983\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " ### call rk2_step() ###\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Probably you're not too surprised to see that the observed order of convergence is close to $2$. Because we used a second-order method! This means that the numerical solution is converging with the grid resolution twice as fast compared with Euler's method in [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb), or in other words, the error scales as ${\\mathcal O}(\\Delta t^2)$. That is a lot faster! However, we are paying a price here: second-order Runge-Kutta requires more computations per iteration." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Challenge task" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How much longer does it take to get the solution with RK2, compared to Euler's method? Run the same solution (same time grid, same parameters), but find a way to *time* the calculation with Python, and compare the runtimes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Multi-step methods" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The screencast *\"Euler's method is a first-order method\"* motivated graphically an idea to get increased accuracy: using intermediate points between $u_{n}$ and $u_{n+1}$ and evaluating the right-hand side of the differential equation at those intermediate points. The idea is to somehow get a better approximation using more data from the function $f(u)$.\n", + "\n", + "Another way to bring more information about $f(u)$ into the numerical solution is to look at time data $t\\lt t_{n}$. For example, we can involve in the calculation of the solution $u_{n+1}$ the known solution at $u_{n-1}$, in addition to $u_{n}$. Schemes that use this idea are called _multi-step methods_.\n", + "\n", + "\n", + "A classical multi-step method achieves second order by applying a _centered difference_ approximation of the derivative $u'$:\n", + "\n", + "$$ u'(t) \\approx \\frac{u_{n+1} - u_{n-1}}{2\\Delta t}.$$\n", + "\n", + "Isolate the future value of the solution $u_{n+1}$ and apply the differential equation $u'=f(u)$, to get the following formula for this method:\n", + "\n", + "$$ u_{n+1} = u_{n-1} + 2\\Delta t \\, f(u_n),$$\n", + "\n", + "This scheme is known as the **leapfrog method**. Notice that it is using the right-hand side of the differential equation, $f(u)$, evaluated at the _midpoint_ between $u_{n-1}$ and $u_{n+1}$, where the time interval between these two solutions is $2\\Delta t$. Why is it called \"leapfrog\"? If you imagine for a moment all of the _even_ indices $n$ of the numerical solution, you notice that these solution values are computed using the slope estimated from _odd_ values $n$, and vice-versa.\n", + "\n", + "Let's define a function that computes the numerical solution using the leapfrog method:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def leapfrog_step(unm1, u, f, dt):\n", + " \"\"\"Returns the solution time-step n+1) using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " unm1 : array of float\n", + " solution at time-step n-1.\n", + " u : array of float\n", + " solution at time-step n.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at time-step n+1.\n", + " \"\"\"\n", + " return unm1 + 2.0*dt*f(u)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But wait ... what will we do at the _initial_ time step, when we don't have information for $u_{n-1}$? This is an issue with all multi-step methods: we say that they are _not self-starting_. In the first time step, we need to use another method to get the first \"kick\"—either Euler's method or 2nd-order Runge Kutta could do: let's use RK2, since it's also second order.\n", + "\n", + "For this calculation, we are going to re-enter the model parameters in the code cell below, so that later on we can experiment here using the leapfrog method and different starting values. At the end of this notebook, we'll give you some other model parameters to try that will create a very interesting situation!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude\n", + "\n", + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# set initial conditions\n", + "u_leapfrog = numpy.empty((N, 4))\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_leapfrog[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "# first step using RK2\n", + "u_leapfrog[1] = rk2_step(u_leapfrog[0], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have all the required information to loop in time using the leapfrog method. The code cell below calls the leapfrog function for each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# use a for loop to call the function leapfrog_step()\n", + "for n in range(1,N-1):\n", + " \n", + " u_leapfrog[n+1] = leapfrog_step(u_leapfrog[n-1], u_leapfrog[n], f, dt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Like before, we extract from the solution array the information about the glider's position in time and find where it reaches the ground." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# get the glider position in time\n", + "x_leapfrog = u_leapfrog[:,2]\n", + "y_leapfrog = u_leapfrog[:,3]\n", + "\n", + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_leapfrog = numpy.where(y_leapfrog<0.0)[0]\n", + "\n", + "if len(idx_negative_leapfrog)==0:\n", + " idx_ground_leapfrog = N-1\n", + " print ('The glider has not reached the ground yet!')\n", + "else:\n", + " idx_ground_leapfrog = idx_negative_leapfrog[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the glider's trajectory with both the leapfrog and RK2 methods, we find that the solutions are very close to each other now: we don't see the differences that were apparent when we compared Euler's method and RK2." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nz6bl5ZdTu3btDKbcO/nLlrHoxBMpW7069WbMgAMO8B1JpMTQiVMhFaYeE2WJLxNZKlasmNAJVCXt\ndUlUmLKUZGaGVaoEL7/MotataTtoEPuMHOk71i7t2LGDhfPmwQMPkHPyyaw85xzm3XtvZAvUqP+e\naHwlg4pUEQ8uv/xyAF544QU2bNjgOY1IMZix/003sWr0aCrVqQPAokWLWLp0qedg/2vx55+z9YQT\n2DJhAsycSaUePbjgwgt9xxKR3dDhfhFPmjdvzowZM3jyySd3Fq2SXUry4f5dcc7RqlUrunfvzmWX\nXZaGZImbN28eBx10ENWqVQNg+LXXctTFF3NSs2Zec4mUZDrcL5IFrrzySgAee+wx9EeURMXmzZtp\n06YNPXv2BMDl5/P4gw+yZcuWjGd58sknue+++3Y+7vHooypQRbKIitQMClOPibLEl8ksF1xwAbVr\n12bBggW8//77XrPsibJIoipUqMDdd99NqVKlAPho6FC63HorZQcNgm+/Zfv27Wn7o2zJ4sW82LMn\nDBoEwB133LHL651GfR5pfNkt6uNLlIpUEU/Kli3LFVdcAcCjjz7qOY1IelRq2ZIlw4Zha9bAUUex\nqmlThrVtC+vXF/tr79ixg1defhlmzYKbbuKIM87guJEjWVe5MgC1a9fm3nvvLfb3ERE/1JMq4tH3\n33/PwQcfzLZt21i2bBmHH36470iSBPWkJumnn3iyQwfO3rqVOtdeC927c+ONN9KoUSO6desGwKxZ\nszjooIOoWbMmACtWrKBGjRpUjhWegwcP5oorrqBy5co455hdrhyN69ShTJcucOGFvL9mDc1btKBc\nuXKpzS4iKaGeVJEsccABB9ClSxecczz22GO+44ik13770WfGDA749FPo3h2AadOmkZubu/Mpq889\nFzvrLOjaFS6+mJUnncSmDh3giy8AePPNN/n000+B4M3us1tuYdGbb8K990KTJrQ5/XQVqCIRoSI1\ng8LUY6Is8fnIcs011wDw3HPPsb7QIdCS/rrsSpiySPJycnIoXbr0zscTJkygWaGTmb5o3ZqtffpA\nhw7QqROLjz6anzp02Hk90xtuuGHnXlaAy+++m8Z7cUOMqM8jjS+7RX18iSq956eISDodd9xxtGzZ\nkmnTpjF8+HCuvvpq35FEMqborUhvKXJDgCu6dPmfx+eee27aM4lIOKgnVSQExowZwwUXXMARRxzB\n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\nB0lEQVTo/D9EAVodDt65OwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(11,8))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls='-', lw=2)\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_leapfrog[idx_ground_leapfrog-1]), fontsize=18);\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_leapfrog[:idx_ground_leapfrog], y_leapfrog[:idx_ground_leapfrog], color='k', ls=':', lw=2)\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about the observed order of convergence? We'll repeat the process we have used before, with a grid-refinement ratio $r=2$ ... here we go:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The order of convergence is alpha = 2.186\n" + ] + } + ], + "source": [ + "# check convergence rate\n", + "r = 2\n", + "h = 0.001\n", + "\n", + "dt_values = numpy.array([h, r*h, r**2*h])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " u[1] = rk2_step(u[0], f, dt)\n", + " for n in range(1, N-1):\n", + " u[n+1] = leapfrog_step(u[n-1], u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + " \n", + "# calculate the order of convergence\n", + "alpha = (log(get_diffgrid(u_values[2], u_values[1], dt_values[2])) \n", + " - log(get_diffgrid(u_values[1], u_values[0], dt_values[1]))) / log(r)\n", + "\n", + "print('The order of convergence is alpha = {:.3f}'.format(alpha))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now have numerical evidence that our calculation with the leapfrog method indeed exhibits second-order convergence, i.e., the method is ${\\mathcal O}(\\Delta t^2)$. _The leapfrog method is a second-order method_. Good job!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### But chew on this ..." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go back to the cell that re-enters the model parameters, just above the leapfrog-method time loop, and change the following: the initial height `y0` to 25, and the final time `T` to 36. Now re-run the leapfrog calculation and the two code cells below that, which extract the glider's position and plot it.\n", + "\n", + "_What is going on?_\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tobies, R. \"Iris Runge: A life at the crossroads of mathematics, science and industry,\" Springer Basel, 1st ed. (2012). [Read on Google books, page 73](http://books.google.com/books?id=EDm0eQqFUQ4C&lpg=PA73&dq=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&pg=PA73#v=onepage&q=%22I%20have%20been%20making%20good%20progress%20with%20Lanchester.%20The%20second%20chapter%20is%20already%20on%20your%20desk%22&f=false)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/README.md b/lecture_22/01_phugoid/README.md new file mode 100644 index 0000000..c7c2701 --- /dev/null +++ b/lecture_22/01_phugoid/README.md @@ -0,0 +1,43 @@ +#Module 1: The phugoid model of glider flight. + +##Summary + +The phugoid model motivates the learning of numerical time integration methods. The model is described by a set of two nonlinear ordinary differential equations, representing the oscillatory trajectory of an aircraft subject to longitudinal perturbations. + +* [Lesson 1](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb) presents the physics of phugoids in the assumption of zero drag (following Lanchester, 1909). Plotting the flight path gives fascinating curve shapes. +* [Lesson 2](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_02_Phugoid_Oscillation.ipynb) develops a single-equation model for zero-drag oscillations, leading to simple harmonic motion. The lesson defines initial-value problems, demonstrates Euler's method, and uses the exact solution to study the numerical convergence. +* [Lesson 3](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_03_PhugoidFullModel.ipynb) develops the full phugoid model and solves it with (vectorized) Euler's method. In the absence of an exact solution, the study of convergence uses a grid-refinement method, obtaining the observed order of convergence. The lesson ends with the paper-airplane challenge. +* [Lesson 4](http://nbviewer.ipython.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_04_Second_Order_Methods.ipynb) starts with the screencast "Euler's method is a first-order method" and develops second-order methods: explicit midpoint (modified Euler) and Runge-Kutta. It ends with a grid-refinement study. + +##Badge earning + +Completion of this module in the online course platform can earn the learner the Module 1 badge. + +###Description: What does this badge represent? + +The earner completed Module 1 "The phugoid model of glider flight" of the course "Practical Numerical Methods with Python" (a.k.a., numericalmooc). + +###Criteria: What needs to be done to earn it? + +To earn this badge, the learner needs to complete the graded assessment in the course platform including: answering quiz about basic numerical Python commands; answering quiz about basics of initial-value problems; completing the individual coding assignment "Rocket flight" and answering the numeric questions online. Earners should also have completed self-study of the four module lessons, by reading, reflecting on and writing their own version of the codes. This is not directly assessed, but it is assumed. Thus, earners are encouraged to provide evidence of this self-study by giving links to their code repositories or other learning objects they created in the process. + +###Evidence: Website (link to original digital content) + +Desirable: link to the earner's GitHub repository (or equivalent) containing the solution to the "Rocket flight" coding assignment. +Optional: link to the earner's GitHub repository (or equivalent) containing other codes, following the lesson. + +###Category: + +Higher education, graduate + +###Tags: + +engineering, computation, higher education, numericalmooc, python, gwu, george washington university, lorena barba, github + +###Relevant Links: Is there more information on the web? + +[Course About page](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about) + +[Course Wiki](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/wiki/GW.MAE6286.2014_fall/) + +[Course GitHub repo](https://github.com/numerical-mooc/numerical-mooc) diff --git a/lecture_22/01_phugoid/Rocket_Assignment.ipynb b/lecture_22/01_phugoid/Rocket_Assignment.ipynb new file mode 100644 index 0000000..2839d18 --- /dev/null +++ b/lecture_22/01_phugoid/Rocket_Assignment.ipynb @@ -0,0 +1,335 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Content under Creative Commons Attribution license CC-BY 4.0, code under MIT license (c)2014 L.A. Barba, G.F. Forsyth." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Coding Assignment: Rocket" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The equations of motion for a rocket in purely vertical flight are given by\n", + "\n", + "\\begin{align}\n", + "\\frac{dh}{dt} &= v\\\\\n", + "(m_s+m_p) \\frac{dv}{dt}& = -(m_s+m_p)g + \\dot{m}_pv_e - \\frac{1}{2}\\rho v|v|AC_D\n", + "\\end{align}\n", + "\n", + "$h$ is the altitude of the rocket\n", + "\n", + "$m_s = 50kg$ is the weight of the rocket shell\n", + "\n", + "$g = 9.81 \\frac{m}{s^2}$\n", + "\n", + "$\\rho = 1.091 \\frac{kg}{m^3}$ is the average air density (assumed constant throughout flight)\n", + "\n", + "$A = \\pi r^2$ is the maximum cross sectional area of the rocket, where $r = 0.5 m$\n", + "\n", + "$v_e = 325 \\frac{m}{s}$ is the exhaust speed\n", + "\n", + "$C_D = 0.15 $ is the drag coefficient\n", + "\n", + "$m_{po} = 100 kg$ at time $t = 0$ is the initial weight of the rocket propellant\n", + "\n", + "The mass of the remaining propellant is given by:\n", + "\n", + "$$m_p = m_{po} - \\int^t_0 \\dot{m}_p d\\tau$$\n", + "\n", + "where $\\dot{m}_p$ is the time-varying burn rate given by the following figure:\n", + "\n", + "Propellant Burn Rate\n", + "\n", + "![burn rate](./burn.rate.png)\n", + "\n", + "Using Euler's method with a timestep of $\\Delta t=0.1s$, create a Python script to calculate the altitude and velocity of the rocket from launch until crash down. \n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assessment:\n", + "\n", + "To check your answers, you can register for [MAE 6286: Practical Numerical Methods with Python](http://openedx.seas.gwu.edu/courses/GW/MAE6286/2014_fall/about).\n", + "\n", + "1. At time $t=3.2s$, what is the mass (in kg) of rocket propellant remaining in the rocket?\n", + "\n", + "2. What is the maximum speed of the rocket in $\\frac{m}{s}$?\n", + " At what time does this occur (in seconds)? \n", + " What is the altitude at this time (in meters)? \n", + " \n", + "3. What is the rocket's maximum altitude during flight (in meters)? At what time (in seconds) does this occur?\n", + "\n", + "4. At what time (in seconds) does the rocket impact the ground? What is the velocity of the rocket (in $\\frac{m}{s}$) at time of impact?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Derivation of the rocket equations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In case you are kind of confused about the rocket equations, here we show how to get to them. \n", + "\n", + "Newton's second law states that the acceleration of the vehicle times its mass is equal to all the forces acting on it. Therefore,\n", + "\n", + "\\begin{equation}\n", + "(m_s + m_p)\\frac{d\\bf{v}}{dt}=\\sum {\\bf F}.\n", + "\\end{equation}\n", + "In the above formula we have assumed that the propellant inside the rocket and the rocket move at the same velocity (in other words, their relative velocity is negligible). \n", + "\n", + "Two of the external forces acting on the rocket are,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_g&= (m_s+m_p)\\bf{g} \\quad (\\rm{Gravity}),\\\\\n", + "{\\bf F}_d&= - \\frac{1}{2} \\rho_a \\mathbf{v} |\\mathbf{v}| A C_D \\quad (\\rm{Drag}).\n", + "\\end{align}\n", + "\n", + "We also need to consider the force resulting from the ejection of the propellant. During an interval $dt$, the engine of the rocket ejects downwards a mass of propellant given by $\\dot m_p dt$. Relative to the rocket, the speed of the ejected burning gas is assumed constant and equal to $v_e$ (the exhaust speed). The momentum variation induced on the exhaust gas by the engine during that interval is therefore, $d{\\bf p}_{gas} = \\dot m_p {\\bf v}_e dt$. Again using Newton's second law we conclude that the force applied by the rocket on the gas is,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_{rocket\\rightarrow gas} = \\frac{d{\\bf p}_{gas}}{dt} = \\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n", + "Using Newton's third law (|action| = |reaction|), the force exerted by the exhaust gas on the rocket is then,\n", + "\n", + "\\begin{align}\n", + "{\\bf F}_{gas\\rightarrow rocket} = -{\\bf F}_{rocket\\rightarrow gas} = -\\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n", + "If we collect all the forces acting on the rocket we finally have:\n", + "\n", + "\\begin{align}\n", + "(m_s + m_p)\\frac{d\\bf{v}}{dt}=(m_s+m_p){\\bf g}- \\frac{1}{2} \\rho_a \\mathbf{v} |v| A C_D -\\dot m_p {\\bf v}_e\n", + "\\end{align}\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "###### The cell below loads the style of the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.display import HTML\n", + "css_file = '../../styles/numericalmoocstyle.css'\n", + "HTML(open(css_file, \"r\").read())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.4.3" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/lecture_22/01_phugoid/burn.rate.png b/lecture_22/01_phugoid/burn.rate.png new file mode 100644 index 0000000..d2cd935 Binary files /dev/null and b/lecture_22/01_phugoid/burn.rate.png differ diff --git a/lecture_22/01_phugoid/figures/glider_forces-lesson3.png b/lecture_22/01_phugoid/figures/glider_forces-lesson3.png new file mode 100644 index 0000000..6d73dd7 Binary files /dev/null and b/lecture_22/01_phugoid/figures/glider_forces-lesson3.png differ diff --git a/lecture_22/01_phugoid/figures/glider_forces.png b/lecture_22/01_phugoid/figures/glider_forces.png new file mode 100644 index 0000000..ac036d5 Binary files /dev/null and b/lecture_22/01_phugoid/figures/glider_forces.png differ diff --git a/lecture_22/01_phugoid/figures/glider_forces_fbd.svg b/lecture_22/01_phugoid/figures/glider_forces_fbd.svg new file mode 100644 index 0000000..47a1d34 --- /dev/null +++ b/lecture_22/01_phugoid/figures/glider_forces_fbd.svg @@ -0,0 +1,465 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + + + + + + + + + + + + diff --git a/lecture_22/01_phugoid/figures/glider_forces_nodrag.png b/lecture_22/01_phugoid/figures/glider_forces_nodrag.png new file mode 100644 index 0000000..969042c Binary files /dev/null and b/lecture_22/01_phugoid/figures/glider_forces_nodrag.png differ diff --git a/lecture_22/01_phugoid/figures/glider_forces_nodrag.svg b/lecture_22/01_phugoid/figures/glider_forces_nodrag.svg new file mode 100644 index 0000000..00942f4 --- /dev/null +++ b/lecture_22/01_phugoid/figures/glider_forces_nodrag.svg @@ -0,0 +1,368 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + diff --git a/lecture_22/01_phugoid/figures/oscillatory_trajectory.png b/lecture_22/01_phugoid/figures/oscillatory_trajectory.png new file mode 100644 index 0000000..6e7dca9 Binary files /dev/null and b/lecture_22/01_phugoid/figures/oscillatory_trajectory.png differ diff --git a/lecture_22/01_phugoid/figures/rocket_CV.png b/lecture_22/01_phugoid/figures/rocket_CV.png new file mode 100644 index 0000000..5686f4f Binary files /dev/null and b/lecture_22/01_phugoid/figures/rocket_CV.png differ diff --git a/lecture_22/01_phugoid/figures/vonKarman-phugoids.png b/lecture_22/01_phugoid/figures/vonKarman-phugoids.png new file mode 100644 index 0000000..e3c6414 Binary files /dev/null and b/lecture_22/01_phugoid/figures/vonKarman-phugoids.png differ diff --git a/lecture_22/01_phugoid/phugoid.py b/lecture_22/01_phugoid/phugoid.py new file mode 100755 index 0000000..0f99fd6 --- /dev/null +++ b/lecture_22/01_phugoid/phugoid.py @@ -0,0 +1,112 @@ +# Script to plot the flight path of the phugoid using Lanchester's model. +# It uses the sign convention and formulae provided by Milne-Thomson (1958). + +import numpy +from matplotlib import pyplot + +numpy.seterr(all='ignore') +''' +see http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html for explanation. ignore over/underflow errors that pop up in the radius_of_curvature function +''' + +def radius_of_curvature(z, zt, C): + """Returns the radius of curvature of the flight path at any point. + + Parameters + --------- + z : float + current depth below the reference horizontal line. + zt : float + initial depth below the reference horizontal line. + C : float + constant of integration. + + Returns + ------- + radius : float + radius of curvature. + """ + return zt / (1/3 - C/2*(zt/z)**1.5) + +def rotate(x, z, xCenter, zCenter, angle): + """Returns the new position of the point. + + Parameters + --------- + x : float + previous x-position of the point + z : float + previous z-position of the point. + xCenter : float + x-location of the center of rotation. + zCenter : float + z-location of the center of rotation. + angle : float + angle of rotation + + Returns + ------- + xCenter_new : float + new x-location of the center of rotation. + zCenter_new : float + new z-location of the center of rotation. + """ + dx = x - xCenter + dz = z - zCenter + # the following formulae take into account the orientation of the axes + xNew = dx*numpy.cos(angle) + dz*numpy.sin(angle) + zNew = -dx*numpy.sin(angle) + dz*numpy.cos(angle) + return xCenter + xNew, zCenter + zNew + +def plot_flight_path(zt, z0, theta0): + """Plots the flight path. + + Parameters + --------- + zt : float + trim height of the glider. + z0 : float + initial height of the glider. + theta0 : float + initial orientation of the glider. + + Returns + ------- + None : None + """ + # arrays to store the coordinates of the flight path + N = 1000 + z = numpy.zeros(N) + x = numpy.zeros(N) + + # set initial conditions + z[0] = z0 + x[0] = 0. + theta = theta0 + + # calculate the constant C + C = (numpy.cos(theta) - 1/3*z[0]/zt)*(z[0]/zt)**.5 + # incremental distance along the flight path + ds = 1 + + #obtain the curve coordinates + for i in range(1,N): + # minus sign for the second coordinate because the z-axis points downwards + normal = numpy.array([numpy.cos(theta+numpy.pi/2.), -numpy.sin(theta+numpy.pi/2.)]) + R = radius_of_curvature(z[i-1], zt, C) + center = numpy.array([x[i-1]+normal[0]*R, z[i-1]+normal[1]*R]) + dtheta = ds/R + x[i], z[i] = rotate(x[i-1], z[i-1], center[0], center[1], dtheta) + theta = theta + dtheta + + # generate a plot + pyplot.figure(figsize=(10,6)) + pyplot.plot(x, -z, color = 'k', ls='-', lw=2.0, label="$z_t=\ %.1f,\\,z_0=\ %.1f,\\,\\theta_0=\ %.2f$" % (zt, z[0], theta0)) + pyplot.axis('equal') + pyplot.title("Flight path for $C$ = %.3f" % C, fontsize=18) + pyplot.xlabel("$x$", fontsize=18) + pyplot.ylabel("$z$", fontsize=18) + pyplot.legend() + pyplot.show() + +# End of File diff --git a/lecture_22/figures/glider_forces-lesson3.png b/lecture_22/figures/glider_forces-lesson3.png new file mode 100644 index 0000000..6d73dd7 Binary files /dev/null and b/lecture_22/figures/glider_forces-lesson3.png differ diff --git a/lecture_22/figures/glider_forces.png b/lecture_22/figures/glider_forces.png new file mode 100644 index 0000000..ac036d5 Binary files /dev/null and b/lecture_22/figures/glider_forces.png differ diff --git a/lecture_22/figures/glider_forces_fbd.svg b/lecture_22/figures/glider_forces_fbd.svg new file mode 100644 index 0000000..47a1d34 --- /dev/null +++ b/lecture_22/figures/glider_forces_fbd.svg @@ -0,0 +1,465 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + + + + + + + + + + + + diff --git a/lecture_22/figures/glider_forces_nodrag.png b/lecture_22/figures/glider_forces_nodrag.png new file mode 100644 index 0000000..969042c Binary files /dev/null and b/lecture_22/figures/glider_forces_nodrag.png differ diff --git a/lecture_22/figures/glider_forces_nodrag.svg b/lecture_22/figures/glider_forces_nodrag.svg new file mode 100644 index 0000000..00942f4 --- /dev/null +++ b/lecture_22/figures/glider_forces_nodrag.svg @@ -0,0 +1,368 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trajectory + diff --git a/lecture_22/figures/oscillatory_trajectory.png b/lecture_22/figures/oscillatory_trajectory.png new file mode 100644 index 0000000..6e7dca9 Binary files /dev/null and b/lecture_22/figures/oscillatory_trajectory.png differ diff --git a/lecture_22/figures/rocket_CV.png b/lecture_22/figures/rocket_CV.png new file mode 100644 index 0000000..5686f4f Binary files /dev/null and b/lecture_22/figures/rocket_CV.png differ diff --git a/lecture_22/figures/vonKarman-phugoids.png b/lecture_22/figures/vonKarman-phugoids.png new file mode 100644 index 0000000..e3c6414 Binary files /dev/null and b/lecture_22/figures/vonKarman-phugoids.png differ diff --git a/lecture_22/lecture_22.ipynb b/lecture_22/lecture_22.ipynb new file mode 100644 index 0000000..b986828 --- /dev/null +++ b/lecture_22/lecture_22.ipynb @@ -0,0 +1,829 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Initial Value Problem\n", + "\n", + "## Euler's method\n", + "\n", + "$\\frac{dy}{dt}=f(t,y)$\n", + "\n", + "$y_{i+1}=y_{i}+f(t_{i},y_{i})h$\n", + "\n", + "The error of this method is:\n", + "\n", + "$E_{t}=\\frac{f'(t_i , y_i )}{2!}h^2 + \\cdots + O(h^{n+1})$\n", + "\n", + "or\n", + "\n", + "$E_{a}=O(h^2)$\n", + "\n", + "### Example: Freefalling problem\n", + "\n", + "An object is falling and has a drag coefficient of 0.25 kg/m and mass of 60 kg\n", + "Define time from 0 to 12 seconds with `N` timesteps \n", + "function defined as `freefall`\n", + "\n", + "Using the Euler ODE solution results in a conditionally stable solution *(at some point the time steps are too large to solve the problem)*" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "function [v_analytical,v_terminal,t]=freefall(N,tmax)\n", + " t=linspace(0,tmax,N)';\n", + " c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", + "\n", + " v_analytical = v_terminal*tanh(g*t/v_terminal);\n", + " v_numerical=zeros(length(t),1);\n", + " delta_time =diff(t);\n", + " for i=1:length(t)-1\n", + " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*delta_time(i);\n", + " end\n", + " % Print values near 0,2,4,6,8,10,12 seconds\n", + " indices = round(linspace(1,length(t),7));\n", + " fprintf('time (s)| error (m/s)\\n')\n", + " fprintf('-------------------------\\n')\n", + " M=[t(indices),abs(v_analytical(indices)-v_numerical(indices))];\n", + " fprintf('%7.1f | %10.2f\\n',M(:,1:2)');\n", + " plot(t,v_analytical,'-',t,v_numerical,'o-')\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)| error (m/s)\n", + "-------------------------\n", + " 0.0 | 0.00\n", + " 2.3 | 0.46\n", + " 4.0 | 0.95\n", + " 6.3 | 1.03\n", + " 8.0 | 0.80\n", + " 10.3 | 0.46\n", + " 12.0 | 0.28\n", + "\n", + "O(h^2)=0.33\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t6\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t8\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t12\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\tgnuplot_plot_1a\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tgnuplot_plot_2a\n", + "\n", + "\t\t \n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "[v_an,v_t,t]=freefall(22,12);\n", + "fprintf('\\nO(h^2)=%1.2f',min(diff(t).^2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heun Method\n", + "\n", + "Increase accuracy with *predictor-corrector approach*\n", + "\n", + "$y_{i+1}=y_{i}^{m}+f(t_{i},y_{i})h$\n", + "\n", + "$y_{i+1}^{j}=y_{i}^{m}+\n", + "\\frac{f(t_{i},y_{i}^{m})+f(t_{i+1},y_{i+1}^{i-1})}{2}h$\n", + "\n", + "This is analagous to the trapezoidal rule\n", + "\n", + "$\\int_{t_{i}}^{t_{i+1}}f(t)dt=\\frac{f(t_{i})+f(t_{i+1})}{2}h$\n", + "\n", + "therefore the error is\n", + "\n", + "$E_{t}=\\frac{-f''(\\xi)}{12}h^3$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Example with Heun's method**\n", + "\n", + "Problem Statement. Use Heun’s method with iteration to integrate \n", + "\n", + "$y' = 4e^{0.8t} − 0.5y$\n", + "\n", + "from t = 0 to 4 with a step size of 1. The initial condition at t = 0 is y = 2. Employ a stopping criterion of 0.00001% to terminate the corrector iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy =\n", + "\n", + " 3\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", + "\n", + "y =\n", + "\n", + " 2\n", + " 5\n", + " 0\n", + " 0\n", + " 0\n", + "\n" + ] + } + ], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "dy(1)=yp(t(1),y(1))\n", + "y(2)=y(1)+dy(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dy_corr =\n", + "\n", + " 4.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "y =\n", + "\n", + " 2.00000\n", + " 6.70108\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n" + ] + } + ], + "source": [ + "% improve estimate for y(2)\n", + "dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2\n", + "y(2)=y(1)+dy_corr(1)*(t(2)-t(1))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This process can be iterated until a desired tolerance is achieved" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "n=0;\n", + "e=10;\n", + "while (1)\n", + " n=n+1;\n", + " yold=y(2);\n", + " dy_corr(1)=(dy(1)+yp(t(2),y(2)))/2;\n", + " y(2)=y(1)+dy_corr(1)*(t(2)-t(1));\n", + " e=abs(y(2)-yold)/y(2)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.00000\n", + " 6.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "dy_corr =\n", + "\n", + " 4.36087\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + " 0.00000\n", + "\n", + "n = 11\n", + "e = 6.3760e-06\n" + ] + } + ], + "source": [ + "y\n", + "dy_corr\n", + "n\n", + "e" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y_an =\n", + "\n", + "@(t) 4 / 1.3 * exp (0.8 * t) - 1.0769 * exp (-t / 2)\n", + "\n", + "dy_an =\n", + "\n", + "@(t) 0.8 * 4 / 1.3 * exp (0.8 * t) + 1.0769 / 2 * exp (-t / 2)\n", + "\n" + ] + } + ], + "source": [ + "\n", + "y_euler=zeros(size(t));\n", + "for i=1:length(t)-1\n", + " y_euler(i+1)=y_euler(i)+dy(i)*(t(i+1)-t(i));\n", + "end\n", + "\n", + "y_an =@(t) 4/1.3*exp(0.8*t)-1.0769*exp(-t/2)\n", + "dy_an=@(t) 0.8*4/1.3*exp(0.8*t)+1.0769/2*exp(-t/2)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "yp=@(t,y) 4*exp(0.8*t)-0.5*y;\n", + "t=linspace(0,4,5)';\n", + "y=zeros(size(t));\n", + "dy=zeros(size(t));\n", + "dy_corr=zeros(size(t));\n", + "y(1)=2;\n", + "for i=1:length(t)-1\n", + " dy(i)=yp(t(i),y(i));\n", + " dy_corr(i)=yp(t(i),y(i));\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " n=0;\n", + " e=10;\n", + " while (1)\n", + " n=n+1;\n", + " yold=y(i+1);\n", + " dy_corr(i)=(dy(i)+yp(t(i+1),y(i+1)))/2;\n", + " y(i+1)=y(i)+dy_corr(i)*(t(i+1)-t(i));\n", + " e=abs(y(i+1)-yold)/y(i+1)*100;\n", + " if e<= 0.00001 | n>100, break, end\n", + " end\n", + "end" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 2.0000\n", + " 6.3609\n", + " 15.3022\n", + " 34.7433\n", + " 77.7351\n", + "\n", + "y_euler =\n", + "\n", + " 0\n", + " 3\n", + " 3\n", + " 3\n", + " 3\n", + "\n", + "ans =\n", + "\n", + " 2.0000\n", + " 6.1946\n", + " 14.8439\n", + " 33.6772\n", + " 75.3390\n", + "\n" + ] + } + ], + "source": [ + "y\n", + "y_euler\n", + "y_an(t)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t10\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t30\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t50\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t70\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t1.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t2.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t3.5\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t4\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\t\n", + "\t\ty\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\ttime\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tHeuns method\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tHeuns method\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tEuler\n", + "\n", + "\t\n", + "\t\tEuler\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "\t\n", + "\tanalytical\n", + "\n", + "\t\n", + "\t\tanalytical\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(t,y,'o',t,y_euler,'s',linspace(min(t),max(t)),y_an(linspace(min(t),max(t))))\n", + "legend('Heuns method','Euler','analytical','Location','NorthWest')\n", + "xlabel('time')\n", + "ylabel('y')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_22/lecture_22_python.ipynb b/lecture_22/lecture_22_python.ipynb new file mode 100644 index 0000000..276a7a0 --- /dev/null +++ b/lecture_22/lecture_22_python.ipynb @@ -0,0 +1,807 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Phugoid Oscillation example\n", + "\n", + "[phugoid lessons in numerical methods with python](https://github.com/numerical-mooc/numerical-mooc/tree/master/lessons/01_phugoid)\n", + "\n", + "![Image](./figures/glider_forces-lesson3.png)\n", + "#### Figure 1. Forces with a positive trajectory angle.\n", + "\n", + "[folder with original 4-part lesson in \"01_phugoid\"](./01_phugoid)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Figure 1, $L$ is the lift, $W$ is the weight, $D$ is the drag, and $\\theta$ the positive angle of the trajectory, instantaneously. \n", + "\n", + "\\begin{align}\n", + "m \\frac{dv}{dt} & = - W \\sin\\theta - D \\\\\n", + "m v \\, \\frac{d\\theta}{dt} & = - W \\cos\\theta + L\n", + "\\end{align}\n", + "\n", + "We can use a few little tricks to make these equations more pleasing. First, use primes to denote the time derivatives and divide through by the weight:\n", + "\n", + "\\begin{align}\n", + " \\frac{v'}{g} & = - \\sin\\theta - D/W \\\\\n", + "\\frac{v}{g} \\, \\theta' & = - \\cos\\theta + L/W\n", + "\\end{align}\n", + "\n", + "\n", + "Ratio of lift to weight is known as the trim conditions—$L/W=v^2/v_t^2$— and also from the definitions of lift and drag, \n", + "\n", + "$$\\begin{eqnarray}\n", + "L &=& C_L S \\times \\frac{1}{2} \\rho v^2 \\\\\n", + "D &=& C_D S \\times \\frac{1}{2} \\rho v^2\n", + "\\end{eqnarray}$$\n", + "\n", + "we see that $L/D=C_L/C_D$. The system of equations can be re-written:\n", + "\n", + "\\begin{align}\n", + " v' & = - g\\, \\sin\\theta - \\frac{C_D}{C_L} \\frac{g}{v_t^2} v^2 \\\\\n", + " \\theta' & = - \\frac{g}{v}\\,\\cos\\theta + \\frac{g}{v_t^2}\\, v\n", + "\\end{align}\n", + "\n", + "It is very interesting that the first equation has the factor $C_D/C_L$, which is the inverse of a measure of the aerodynamic efficiency of the aircraft. It turns out, this is the term that contributes damping to the phugoid model: if drag is zero, there is no damping. Drag is never zero in real life, but as engineers design more aerodynamically efficient aircraft, they make the phugoid mode more weakly damped. At altitude, this is nothing but a slight bother, but vertical oscillations are unsafe during final approach to land, so this is something to watch out for!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize the flight trajectories predicted by this model, integrate the spatial coordinates, which depend on both the forward velocity (tangential to the trajectory) and the trajectory angle. The position of the glider on a vertical plane will be designated by coordinates $(x, y)$ with respect to an inertial frame of reference, and are obtained from:\n", + "\n", + "\\begin{align}\n", + "x'(t) & = v \\cos(\\theta) \\\\\n", + "y'(t) & = v \\sin(\\theta).\n", + "\\end{align}\n", + "\n", + "Augmenting our original two differential equations by the two equations above, we have a system of four first-order differential equations to solve. We will use a time-stepping approach, like in the previous lesson. To do so, we do need *initial values* for every unknown:\n", + "\n", + "$$\n", + "v(0) = v_0 \\quad \\text{and} \\quad \\theta(0) = \\theta_0\\\\\n", + "x(0) = x_0 \\quad \\text{and} \\quad y(0) = y_0\n", + "$$\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Euler's Method\n", + "\n", + "Apply Euler's method: replace each of the time derivatives by an approximation of the form:\n", + "\n", + "$$v'(t) \\approx \\frac{v^{n+1} - v^n}{\\Delta t},$$\n", + "\n", + "where we are now using a superscript $n$ to indicate the $n$-th value in the time iterations. The first differential equation, for example, gives:\n", + "\n", + "$$\\frac{v^{n+1} - v^n}{\\Delta t} = - g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2$$\n", + "\n", + "At each time iteration $t^n$, we want to evaluate all the known data of our system to obtain the state at $t^{n+1}$—the next time step. We say that we are _stepping in time_ or _time marching_.\n", + "\n", + "The full system of equations discretized with Euler's method is:\n", + "\n", + "\\begin{align}\n", + "v^{n+1} & = v^n + \\Delta t \\left(- g\\, \\sin\\theta^n - \\frac{C_D}{C_L} \\frac{g}{v_t^2} (v^n)^2 \\right) \\\\\n", + "\\theta^{n+1} & = \\theta^n + \\Delta t \\left(- \\frac{g}{v^n}\\,\\cos\\theta^n + \\frac{g}{v_t^2}\\, v^n \\right) \\\\\n", + "x^{n+1} & = x^n + \\Delta t \\, v^n \\cos\\theta^n \\\\\n", + "y^{n+1} & = y^n + \\Delta t \\, v^n \\sin\\theta^n.\n", + "\\end{align}" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from math import sin, cos, log, ceil\n", + "import numpy\n", + "from matplotlib import pyplot\n", + "%matplotlib inline\n", + "from matplotlib import rcParams\n", + "rcParams['font.family'] = 'sans-serif'\n", + "rcParams['font.size'] = 16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Set the parameter values and the _initial values_. \n", + "\n", + "Acceleration of gravity is: 9.8 m/s$^2$, but what are good values for $C_D/C_L$, the inverse of the aerodynamic efficiency? Some possible values are given on a table in the Wikipedia entry for [lift-to-drag ratio](http://en.wikipedia.org/wiki/Lift-to-drag_ratio): a modern sailplane can have $L/D$ of 40 to 60, depending on span (and, in case you're interested, a flying squirrel has $L/D$ close to 2).\n", + "\n", + "For the _trim velocity_, the speed range for typical sailplanes is between 65 and 280 km/hr, according to Wikipedia (it must be right!). Let's convert that to meters per second: 18 to 78 m/s. We'll pick a value somewhere in the middle of this range.\n", + "\n", + "#### Possible set of parameters for the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 30.0 # trim velocity in m s^{-1} \n", + "C_D = 1/40 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1 # for convenience, use C_L = 1\n", + "pi = numpy.pi\n", + "\n", + "### set initial conditions ###\n", + "v0 = v_t # start at the trim velocity (or add a delta)\n", + "theta0 = pi/12 # initial angle of trajectory\n", + "x0 = 0 # horizotal position is arbitrary\n", + "y0 = 1000 # initial altitude" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def f(u):\n", + " \"\"\"Returns the right-hand side of the phugoid system of equations.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " array containing the solution at time n.\n", + " \n", + " Returns\n", + " -------\n", + " dudt : array of float\n", + " array containing the RHS given u.\n", + " \"\"\"\n", + " \n", + " v = u[0]\n", + " theta = u[1]\n", + " x = u[2]\n", + " y = u[3]\n", + " return numpy.array([-g*sin(theta) - C_D/C_L*g/v_t**2*v**2,\n", + " -g*cos(theta)/v + g/v_t**2*v,\n", + " v*cos(theta),\n", + " v*sin(theta)])" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# ?f accesses help documentation of code" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def euler_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using Euler's method.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equations.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " approximate solution at the next time step.\n", + " \"\"\"\n", + " \n", + " return u + dt * f(u)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d=numpy.array([1,2,3,4,5])\n", + "d[-3] # note negative indices are fun" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "T = 100 # final time\n", + "dt = 0.1 # time increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u = numpy.empty((N, 4))\n", + "u[0] = numpy.array([v0, theta0, x0, y0])# fill 1st element with initial values\n", + "\n", + "# time loop - Euler method\n", + "for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nv7Qni1QDd999N0pLnXSEFStWYNOmTVFfu379eundHzZsWFiFHltQo+FeUlRUhAsvvBCAk9yZbKRr\ny5YtMlJ69dVXp9QmWAKxNmlpabjgggsAOJFNr+pKqyI/VSL5I0aMkH8bFRUVrvXb03nj5/KZQPiG\nWLZ48uMR+bquayqqiBblkk1jo11n7dq1YcmsNop8cY0lq44d9BaRL54ZRXu2Jc4UBmCG8v2/dH7v\nMcZYrnoAY+yfAIwHsB3AR8r3CwCM6/xyY5TxNnb2Wxbj/FOCwsJCPPLII/LrBx98MGKlnY6ODnz9\n61+XXz/00ENW1nh+6qmntI119dVXy7aIwifKX//6V9m+9tprk+rLVtS1US0727Zt82S8VIzkZ2Vl\nSZG9Z88e1zYp6um88XNlHYEQ1YcPH5Y79+omUZGv87omUDfqUnfpNYkQ+enp6dZUiXnqqaeQkZEh\nbyJts+u0tbWhqakJAFXWsYXeIvLFLXm0Twz1+2roaDEcQT4fQBVj7HXG2AuMsR0Afg3Hq/8Fzrl6\nFR+ltKsQGXH19V+YKkn++Z//WX5wf/DBB3jiiSfOec1TTz0lxdi0adPwjW98Q+scY0WU9tSB6st/\n5513kuqrN4h8dW10+PJFv/n5+b6MPkdDbOrV1NQUtntqMvR03vjdrgOctey0t7cbi7YKkV9SUoK8\nvLyYj9N5XRPk5OSguLgYgD0iX9iGSktLpV3SNGJthGXHtkg+Jd3ahx1/ud4jjMwXMsamRfj5PUq7\nj2hwzo/D8eU/B6AfgBsA3AJgEoDDcKrtdD3LCpV2U5T5iC39+kT5ecqSlZWF3/3ud/Ki+fjjj4dt\nkPXHP/4R3/ve9wAAjDH85je/sba6RjwfnMkyd+5c5OY6D5PefPPNhKODra2tsrLOyJEjMXbsWNfm\naBPq2ngdyT916hQOHjwox0ol+9OECRNke/fu3a702dN5o1qD/CryTVfYCQaD0ioUrx9f53VNRdTy\nP3r0qGtPjRKFcy4j+bZYdYCzayNEfl1dnfaN6rqDymfaR68Q+Zzz1QD+Buf9vs4Y+xJjrA9jbDRj\n7CcA/gFAe+fLpXpijJ0Hp+zml+DcCAwHUASn7GYNgJ8BeJNRdklcXHHFFViyZAkAIBQK4c4778RV\nV12FK6+8El/72tfkBf6RRx7BxRdfbHKq1pCbm4trrnGKPx09ehRbtmxJqJ/33nsPra1Oqsm1117b\n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\n8VBdkh3KTXYpN9mm/GRXObkp3A0YoiK/vVTkVzYV+SJlGj486TYIkjblJruUm2xTfrKrnNwceeSR\n9OvXD+hYkd+/f3+NrFOBeszoOpVGo+uIiIhIRx133HEsW7YMgI0bNzJ06NA2xW3ZsoUhQ4YAMHny\n5Kb3kOY0uo6IiIiIdLv4KTsrV65sc1xNTU3Tc52qU5lU5IuIiIjkVLnn5et8/MqnIl+kTGvWrEm7\nCZJAucku5SbblJ/sKjc35Rb5jz/+eNNzFfmVSUW+SJlmzpyZdhMkgXKTXcpNtik/2VVuboYPH87+\n++8PwB/+8Afq6upajamrq2sq8g844AAOPfTQsrYt6VKRL1KmG264Ie0mSALlJruUm2xTfrKr3NyY\nGccffzwQ3cE2fhpOktraWrZu3QrAlClTMLOyti3pUpEvUiYNNZddyk12KTfZpvxkV0dyM3Xq1Kbn\nDz3U+n1BH3744abnU6ZMKXu7ki4V+SIiIiI5duKJJzY9f+CBB1pdf8mSJU3P418QpLKoyBcRERHJ\nsREjRjB69GgAli9fzsaNGxPXfeutt1i+fDkAhx12GCNHjuyWNkrnU5EvUqbZs2en3QRJoNxkl3KT\nbcpPdnU0N9XV1QC4O4sXL05cb8mSJTQ2NgJwyimndGibki4V+SJl2r59e9pNkATKTXYpN9mm/GRX\nR3NTKPIBFixYkLje/Pnzm57PmDGjQ9uUdJm7p90GKcHMxgM1NTU1jB8/Pu3miIiISAVrbGxk5MiR\nvPbaa1RVVbFu3TqGDRvWbJ1NmzYxbNgw6uvrOeigg1i7di1VVToe3JLa2lomTJgAMMHda9NuT5wy\nJyIiIpJzVVVVnHPOOUBU8N922227rXPzzTdTX18PwBlnnKECv8IpeyIiIiI9wLnnnttUuM+dO5ed\nO3c2Lfvwww/52c9+BkRj619wwQWptFE6j4p8kTJt3rw57SZIAuUmu5SbbFN+sqszcjNy5Eg+//nP\nA7Bx40bmzJnTtGzu3LmsX78egOnTp2tUnRxQkS9SpvPOOy/tJkgC5Sa7lJtsU36yq7Nyc+WVVzYd\nzf/+97/PihUrWLVqFbNmzQKio/hXXXVVp2xL0qUiX6RM+iOYXcpNdik32ab8ZFdn5Wbs2LFcfPHF\nAOzcuZNjjz2Wo48+umn0ngsuuIBx48Z1yrYkXRpdJ6M0uo6IiIh0hR07djBt2jQeffTRZvMnTZrE\n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\nbaq84r/f6wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# get the glider's position with respect to the time\n", + "\n", + "x = u[:,2]\n", + "y = u[:,3]\n", + "\n", + "# visualization of the path\n", + "pyplot.figure(figsize=(8,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'x', fontsize=18)\n", + "pyplot.ylabel(r'y', fontsize=18)\n", + "pyplot.title('Glider trajectory, flight time = %.2f' % T, fontsize=18)\n", + "pyplot.plot(x,y, 'k-', lw=2);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Grid Convergence\n", + "\n", + "Convergence of Euler's method for the phugoid model\n", + "\n", + "We need to be careful, though, and make sure that the fine-grid solution is resolving all of the features in the mathematical model. How can we know this? We'll have a look at that in a bit. Let's see how this works first.\n", + "\n", + "You need a sequence of numerical solutions of the same problem, each with a different number of time grid points.\n", + "\n", + "1. Create a NumPy array called `dt_values` that contains the time-increment of each grid to be solved on. \n", + "\n", + "2. For each element `dt_values[i]`, we will compute the solution `u_values[i]` of the glider model using Euler's method. \n", + "\n", + "3. If we want to use five different values of $\\Delta t$, we'll have five solutions: we put them in an array ... but each one is also an array\n", + "\n", + "To get all the numerical solutions—each with its value of $\\Delta t$, we will loop over the elements of the array `dt_values`. Within the loop, we need to access both `dt_values[i]` and the index `i`. \n", + "\n", + "`enumerate()` is a built-in Python function that will give us consecutive `index, value` pairs just like we need. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt) + 1 # number of time-steps\n", + "\n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " \n", + " u[n+1] = euler_step(u[n], f, dt) ### call euler_step() ###\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def get_diffgrid(u_current, u_fine, dt):\n", + " \"\"\"Returns the difference between one grid and the fine one using L-1 norm.\n", + " \n", + " Parameters\n", + " ----------\n", + " u_current : array of float\n", + " solution on the current grid.\n", + " u_finest : array of float\n", + " solution on the fine grid.\n", + " dt : float\n", + " time-increment on the current grid.\n", + " \n", + " Returns\n", + " -------\n", + " diffgrid : float\n", + " difference computed in the L-1 norm.\n", + " \"\"\"\n", + " \n", + " N_current = len(u_current[:,0])\n", + " N_fine = len(u_fine[:,0])\n", + " \n", + " grid_size_ratio = ceil(N_fine/N_current)+1\n", + " \n", + " diffgrid = dt * numpy.sum( numpy.abs(\\\n", + " u_current[:,2]- u_fine[::grid_size_ratio,2])) \n", + " \n", + " return diffgrid" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dt = 0.1\n", + "dt = 0.05\n", + "dt = 0.01\n", + "dt = 0.005\n", + "dt = 0.001\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:24: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n" + ] + }, + { + "ename": "ValueError", + "evalue": "operands could not be broadcast together with shapes (100001,) (50001,) ", + "output_type": "error", + "traceback": [ + "\u001b[0;31m--------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;31m### call the function get_diffgrid() ###\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mdiffgrid\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_diffgrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mu_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mget_diffgrid\u001b[0;34m(u_current, u_fine, dt)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mgrid_size_ratio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mceil\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN_fine\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mN_current\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mdiffgrid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdt\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0mu_current\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m \u001b[0mu_fine\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mgrid_size_ratio\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdiffgrid\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (100001,) (50001,) " + ] + } + ], + "source": [ + "# compute difference between one grid solution and the finest one\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " print 'dt = ', dt\n", + "\n", + " ### call the function get_diffgrid() ###\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nDFN3QvMo/QcYWWBfYW5iH2rnCK1BJyIiEewf//gHffr0yd9+7LHH+P3vf+8xkYgfRS2YFhAqdr49\nyj4RkaiVnp5O27ZtfceIKJ9++ik33XQTOTk5APTr14++fft6TiXihzmnWqcsmFkcsL5169bUqVOH\npKQkkpKSfMcSkbCOHTuSlpbmO0bE2LFjBy1btuSDDz4A4Pe//z1/+ctfqFw50IerRY4rNTWV1NRU\nsrOzWbt2LUBz55yXdYxUMJWRQwXT+vXriYuL8x1HROSYcnNziY+P569//SsA55xzDv/85z+pW7eu\n52RSUWVlZdG8eXPwWDCV+FcFM2sd/vJfzrntJT2fiIj4NWTIkPxiqV69eqxatUrFklR4QVxbfQnI\n5X8ze4uISJSaPXs2jz76KACVK1dm+fLl/OxnP/OcSsS/IAqmbCDXObctgHOJiIgnL774Iv369cvf\nnjlzJldddZXHRCKRI4iJK/8L1DKzqgGcS0TEix49eviO4NWGDRu4+eabOXjwIACDBg3i9ttv95xK\nJHIEUTAtBmKBDgGcS0TEi4o80/f27duJj49n27bQjYIbbriBhx56yHMqkcgSRME0DXgNmG5mNwRw\nPhGRMldRp/k4ePAgHTp04D//+Q8A5513HqmpqVSqVMlzMpHIEsQYphHAWuACINPM3gdeAb4nNBj8\nqJxz9wfQt4iIlMD//d//8dxzzwFw6qmnsmrVKmrXru05lUjkCaJgGsuRS6OcD/yyEMepYBIR8WjG\njBnMmDEDgNjYWFasWMHZZ5/tOZVIZAqiYFqLlkYRkSi3bt06WrVq5TtGmXnuuecYOHBg/vbs2bMr\n1PcvUlQlLpicc1cGkENExKvJkydXmILho48+on379uTmhkZNDBs2jO7du/sNJRLhghj0LSIS9RYv\nXuw7Qpn44YcfuPHGG8nOzgYgISGBiRMnek4lEvlUMImIADVq1PAdodQdOHCAW265hU8++QSACy+8\nkIULF+qJOJFCCGItublFPGQfsB14H3jeOfddSTOIiMjxOefo378/L730EgANGjQgMzOTk046yW8w\nkSgRxKDv7hRt0Lcd1v6gmaUAdzvndgWQRUREjmLatGnMmTMHgKpVq5Kenk6TJk08pxKJHkHcklsQ\nfm0nVAztBdYBaeHXuvA+A7aF22YCXxOaIbwXofmbdE1YRLwZOnSo7wil5i9/+QuDBw/O305OTqZl\n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\ngUmSJKmG/w8oV6sCANpbvgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# log-log plot of the grid differences\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel('$L_1$-norm of the grid differences', fontsize=18)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1], color='k', ls='-', lw=2, marker='o');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Second Order Runge-Kutta\n", + "\n", + "Estimate average slope along time step\n", + "\n", + "\\begin{align}\n", + "u_{n+1/2} & = u_n + \\frac{\\Delta t}{2} f(u_n) \\\\\n", + "u_{n+1} & = u_n + \\Delta t \\,\\, f(u_{n+1/2}).\n", + "\\end{align}\n", + "\n", + "This method is known as the *explicit midpoint method* or the *modified Euler method*, and it is a second-order method. Notice that we had to apply the right-hand side, $~f(u)$, twice. This idea can be extended: we could imagine estimating additional points between $u_{n}$ and $u_{n+1}$ and evaulating $~f(u)$ at the intermediate points to get higher accuracy—that's the idea behind Runge-Kutta methods." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# model parameters:\n", + "g = 9.8 # gravity in m s^{-2}\n", + "v_t = 4.9 # trim velocity in m s^{-1} \n", + "C_D = 1/5.0 # drag coefficient --- or D/L if C_L=1\n", + "C_L = 1.0 # for convenience, use C_L = 1\n", + "\n", + "### set initial conditions ###\n", + "v0 = 6.5 # start at the trim velocity (or add a delta)\n", + "theta0 = -0.1 # initial angle of trajectory\n", + "x0 = 0.0 # horizotal position is arbitrary\n", + "y0 = 2.0 # initial altitude" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def rk2_step(u, f, dt):\n", + " \"\"\"Returns the solution at the next time-step using 2nd-order Runge-Kutta.\n", + " \n", + " Parameters\n", + " ----------\n", + " u : array of float\n", + " solution at the previous time-step.\n", + " f : function\n", + " function to compute the right hand-side of the system of equation.\n", + " dt : float\n", + " time-increment.\n", + " \n", + " Returns\n", + " -------\n", + " u_n_plus_1 : array of float\n", + " solution at the next time step.\n", + " \"\"\"\n", + " u_star = u + 0.5*dt*f(u)\n", + " return u + dt*f(u_star)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Solve with both RK2 and Euler (or RK1)" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# set time-increment and discretize the time\n", + "T = 15.0 # final time\n", + "dt = 0.01 # set time-increment\n", + "N = int(T/dt) + 1 # number of time-steps\n", + "\n", + "\n", + "# set initial conditions\n", + "u_euler = numpy.empty((N, 4))\n", + "u_rk2 = numpy.empty((N, 4))\n", + "\n", + "\n", + "# initialize the array containing the solution for each time-step\n", + "u_euler[0] = numpy.array([v0, theta0, x0, y0])\n", + "u_rk2[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + "\n", + "# use a for loop to call the function rk2_step()\n", + "for n in range(N-1):\n", + " \n", + " u_euler[n+1] = euler_step(u_euler[n], f, dt)\n", + " u_rk2[n+1] = rk2_step(u_rk2[n], f, dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "x_euler = u_euler[:,2]\n", + "y_euler = u_euler[:,3]\n", + "x_rk2 = u_rk2[:,2]\n", + "y_rk2 = u_rk2[:,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How far will the glider travel before reaching ground?" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# get the index of element of y where altitude becomes negative\n", + "idx_negative_euler = numpy.where(y_euler<0.0)[0]\n", + "if len(idx_negative_euler)==0:\n", + " idx_ground_euler = N-1\n", + " print ('Euler integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_euler = idx_negative_euler[0]\n", + " \n", + "idx_negative_rk2 = numpy.where(y_rk2<0.0)[0]\n", + "if len(idx_negative_rk2)==0:\n", + " idx_ground_rk2 = N-1\n", + " print ('Runge-Kutta integration has not touched ground yet!')\n", + "else:\n", + " idx_ground_rk2 = idx_negative_rk2[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Compare the results" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nN9FJJ5100kmnYJr0ipmXiUgxrG/+E3se251yGWPM31gP+nsi6ZhZf3tYR4YZY6KxrrjkxXp2xE4c\n0M9mXuJzWmFYV46SisK6ogTwkjHmXxexJKR4qxdW/ucYY1bblDmD9TcQoLVt9N61yxgzOSMVuMq7\nMeY4sBJrm6JSlwasq22JV2o/SzHvWayrT3FANxdhDMP60uFGrDGn3NXTEdtGY4zTq1rGmKtYVxYF\neFxEkl59jOD6PtHfGHPeSfm1WLeD2jLGrDfGhDqmN9MRvy9MxmoQjzXG/OqjdewHhgK1sa5Q58K6\net8c2Ir1v9IY8HZnJkkVcKynMNatrH851l8Q64p4IyBx+18TkRd9GItSSikVkLRh5n0PcT2vrj4g\nevQhyBhzCjiE9cH1LRGp5Uk97hCRkiLypoh87+hk4XKKDi6KORYt76KaHx2NIGf2JPn5phTz6jte\nDxtjnHaAYhNzHq43WL4RkRvsJuA3x3KFRaSsu+vIgK/cWSiDeU9sbN0tIlWczG/reN1ljNmeYl5i\nzjcBxkXeQoHELxzS0xFIPawP52vS+LvsciwfAlRLUj5xX78IfO1iPb5sYHiNiDwHPAIcxGo4+YQx\n5jljzHBjzA/GmMPGmKvGmFhjzBKs/5UvHIs+KiK++pIi8ZiYE6tR/4gxZokx5qwx5qLjC5Q6wGGs\nY9swEcnpo1iUUkqpgKQNM+8rk+TnXXYLOa6anfZwHa9h3fJzJ7BBRA6LyBwR6SIi5TysMxkRaYIV\n/yCs55sKYX0gNykmsH9WzmA9G+Z8pjEXkvwanmJ24uC6P6cz9NuwPvyBdUXurItpS5JyxfC9/Wkt\n4IW8L8fq2Q9SXDVz9FjY2FF+ppOyFRyv9XGdtzNYDSbBzbw5GlwlHb8OS6P+f5IUTVp/GcfrXuO6\nV7/fXMwLCI7nGkdj/S16pPhfyDSOPL6AdTsx2F9pzahzWPuLwbpN9oCTWE5iPUcJ1tXYh3wUi1JK\nKRWQtGHmfXmT/HwujWXTmu+UscZPqofVw1881zsVmQD87rjS8qAndYPVJTzXO934E6vTjfuxno0r\nwPVOLg47irgaD8/dbrFTdnSSeAvbWTfLJ0raWEnZmHE15U7nejzhcnBfb+TdGHMZWIiVz1YpZrfE\narQaYLaTEBJvN0vPlMvVNqWo+1qYbk6Q/O+S+L/lk/+rTDYSq9G91BjzZVoL+5LjFtjvsfaZqj5a\nzbEkP3/nYrkNSX5Oc1gRpZRSKivRAaa9L+mHwrxYHS3YyetinkvGmPXAesczODWxvl1ujHUloybw\nrYjUMcZscVGNnU5YH4hPAzWMMcecLZTi+R9vS7z9MV86yyXNf4Qxxq3bBwOEt/L+GdZVkBIiUs9c\nHxy4LVaDZ50x5rCTcom5W2KMcTlOnQeS/l1eNsZMyEAdaf3fePx/lYkSb519WlKMe5eCAB2SjE3X\nwRjj7GpnRiU+w5nusf3ctAt4zPGzq2Ni0nm+PL4opZRSAUevmHnfgSQ/p+ruO5GIJF4FyRBjzBlj\nTLQxZogx5gGsK2kXsTrUGOBhtfc6Xr9x0Ti4Fd9+cNqL9aE0ZacgaTmAdZsnWD3eBROv5N0Ys5Hr\n+2GUo9xtXH/2zu6D/X6snN/ufsjucTxneNzxq6f1H3C8lhORUBfLVfKw/szmzhXDlMv5SuIznq4a\nTRnxU5Kfi7hYLum8U7ZLKaWUUlmQNsy87weuNwyauljuGV+s3BizDvgG6wN2hRSzryT+ICJ2Y6SB\ndXuaIXkPkCm18zBEdyX2plhSROq6W8jRANiMtf3P+iIwB3dzmR7ezPssrBw0FZHcXO/04wL2nWNE\nO16riEjKfccbViWJyZOr9Rsdr7mxrg7baeZB3ZntOazhA1xNYO0Py5O8t8zbgYhIcawr7gbY5u36\nHVZw/X+mjovlHk3yc8rOaZRSSqksTRtmXmaMicUaE0iAl2wGyb0ZGIgH34CLSBERKexifgjXO0k4\nnmJ20qswrgYgTrxy8h9HhxEp13E3Vhf4vvwGfw5Wt/ACfORqEGgnV0/edbzWEBG7rvqTlr/Tg/jc\nzWV6eDPvib0z5sX6gqC1o9znzrqZd5iF1fFGCDA9rVsmRaRMOnvOe8/xeiswLq0GrWOg9qSWY+Vd\ngP+KSMoOYxCR+liDYgc0Y8x+Y8wOV1OSxU8keT9dV5HSGGgcEQnDGpA78Vm+lEMoeIUx5jTWlVoB\n2jr52yY2EHs5ft1L8s55lFJKqSwvoBtmIpJDROqKyDsiskVETjq6Dv9bRL4Qkcc9qHNI0q7HnUzx\nHn5QT6ov1oCx4cA6EXlOREqIyI0i0hzr4fcwPLtV527gLxGZLSLPikh5ESnkqP9RrG/UK+EYxytF\n2e1c74xjsKNMDhEJTdG4me94LQysEpH6IlLM8UG8J7Aeq1MOX932lNhj43OO7bgTiBGRbiJSTkQK\niMitIhIhIp8CH6YouwSrkQHWB/gVjmVLikh+EbnFsV8NE5FdwBgPQnQ3l+nhtbwbY/7g+gfbEcAd\njp9nOS9xLecdsLbrAeBnEekuIhVFpKAjlvtE5AUR+RL4g3Q8A2iMieH6+H1dgI0i0kJESjv+piVE\npJaI9BWRGKxOTJKWv4z1vwVWxxAbRaSR48uKUiLyKrAEq+MUWyJSJ8n/+2B343dSz20iUiNxIvkt\nmpWSzhORknb1ZIQb29JHRHaIyABHbm92/A+UEZF2WLcYJvbUucYYM89mPUVTbGvSTkJuSbGtdrdw\nv4HV8E88LrZ3xFNMRJpiHReLY91x8Ioxxpdf/HgsiM9LSimlAlygd/5RB+uWNgMcxTpxn8dqeDwJ\nRIjIJGNMFw/q/p9jSsngeTf2VgXG7BGRZ7F62CsKfJJikTigBVYvip48bJ8b6za9lL3uXQsB65vv\nj1PEFSsis7Buh3vBMSUV4lhuvYhMALpifQBblWK541iDw87G6lnOToZu8TPGrBCRVsBUrKtS450t\nBsxw8n5HrAZMd6wPnnYflgzXB7ZNT2xu5TKddXor74k+w2pglXH8ftRJnSljiBaRSKyrG6WAD+wW\nBa7ifq+bifW/ISJxWF3mP4j94OROb6szxkwX62pLX6znD1N27nIQq0H/rTvhuBu3jcE4v7VUgI9S\nvDcU8OVg1q625S7sB7RPfHZtEVbnM3ae4PqA8EkJ8LxjSrQOSHX7sTHmqIg8gfXl0c1O6jPAZaBb\ngHfaE5TnJaWUUoEv0BtmCVgfGMYaY35IOsNx5WkO8KKIfG+Msb0SYGOpMcZnH5SMMV+IyL1YtyzW\nx3qoPRbrA+NoY8xOSfvRJGcP/H/vqK8e1oC7t2J9yxwC/I31fNU0x4CtzjwP7MT6gF8e61a3xPGF\nksbfQ0S2AC8BlR31H8b6IPyuMeb/PIzfbjnnM4xZICLrsbqOb4Q1TllurA9Ef2J9yFvgpFw80FNE\nPgFexPowVQqrK/qzjrI/ObZnpRsxOuNWLhNDcqdCL+U90Tys2zoTbzec485VCGPMSrE6C3kBq0F7\nN1ZD8DLWPvYr1lANixy3qKWqAtd/0/+KyBysq2b1sP6m+bA+3B7CapBFc33g45TlB4jIt1i3vT0A\n5AH+ciw/iutX8Vxtqzeuxvi6Q46k6/F0/iSsv1lNrH20KFanQ3FYOdsEzDTGfO+FONJczhizTUTu\nwvrbPYXVO2UO4P+ANcA4x9XeQBa05yWllFKBTQL0bhG3OD50P4d1C04DN8sMAYYAQ/UEqJRSypv0\nvKSUUspTAf2MmRsSe+26NZ3lgrc1qpRSKpDpeUkppZRHAv1WxrQkdmjwdzrLCVBNRP6L1dHCaayT\n6XJjzDmXJZVSSil7el5SSinlkaBtmInVtXIHrj+4nh4G6yHtJ5NWCZwWkZeNMT7pMloppVTWpecl\npZRSGRGUtzI6uiOfjfUQ+w5gcjqK78PqkOM+rG8lC2N1orEcyI81fpNdb4dKKaVUKnpeUkoplVFB\n2fmHiEzB6to5FnjIGLPPS/WOw+r971/gFmPMVW/Uq5RSKmvT85JSSqmMCrqGWZKT1HGgnjFmhxfr\nLoR18gsBHrbrQlpEigANgQPARW+tXymlVJpyY43NF22MOe7nWIDAOC85ltVzk1JK+YdXzk1B9YyZ\niLyLdfI7ATTw5skPwBhzUkT+BW4CbnGxaEOsW1aUUkr5RxusMcP8KoDOS6DnJqWU8rcMnZuCpmEm\nIqOBV4CTWCe/7WkU8WQdIVjPB4A1CLGdAwCzZs2iYsWK3g7DJ1555RXef/99f4fhNo3XtzRe39J4\nfWfXrl1ERUWB4zjsTwF2XoIgPDdllmDaxzOb5sY5zYs9zU1q3jo3BUXDTERGAr2xTn6PGWO2+WhV\nTYBwIAHY6mK5iwAVK1akatWqPgrFuwoUKBA0sYLG62sar29pvJnCr7fqBeB5CYLw3JRZgnQfzxSa\nG+c0L/Y0Ny5l6NwU8L0yisgIoC/Xv5FM8+QnIt1EZJeITE/x/q0i0kZEcjkp8xTwCVaXxbOMMf96\nZQMCxJYtW/wdQrpovL6l8fqWxpu16Xkp+Og+bk9z45zmxZ7mxncC+oqZiERgdSFsgL1AdxFxtugx\nY0yfJL8XBcqTeoDPwsBnwMcish04DOQBKmENCmqAb4CuXtyMgFC2bFl/h5AuGq9vaby+pfFmXXpe\nCk66j9vT3DinebGnufGdgG6YYZ2wEruNvN8xOXMA6JPiPZOkbKK/gJFAdaAc1pgxYcAxrPFiZhtj\nFmQ46gBUrFgxf4eQLhqvb2m8vqXxZml6XgpCuo/b09w4p3mxp7nxnYBumBljZgAzPCg3DBjm5P0T\nWN90ZjutWgXX2KQar29pvL6l8WZdel4KTrqP29PcOKd5sae58Z2gG8csEIhIVSAmJiZGH35USqlM\ntG3bNqpVqwZQzYcdbgQlPTcppZR/eOvcFPCdfyjvWLp0qb9DSBeN17c0Xt/SeJUKLLqP29PcOKd5\nsae58R1tmGUTc+fO9XcI6aLx+pbG61sar1KBRfdxe5ob5zQv9jQ3vqO3MnpAbxdRSin/0FsZ7em5\nSSml/ENvZVRKKaWUUkqpLCKge2VU2Zcxht9//53Nmzdz5MgRLly4QNGiRbnrrruoWbMmefLk8XeI\nQevQoUMcO3bM32EoBUDRokUpVaqUv8NQSiml/E4bZiqg/Pvvv0yePJkpU6Zw8OBBAAoVKkSePHk4\nduwYly9fJleuXLRs2ZJevXpx3333+Tni4HLo0CEqVqxIXFycv0NRCoDw8HB27dqljTOllFLZnjbM\nsomOHTsybdo0f4dh68KFC7z77ruMGjWKhIQESpYsyVdffUWtWrXIly8fAAkJCezcuZMvv/ySSZMm\nMXPmTJ5//nlGjhxJkSJF/Bp/oOc30bFjx4iLi2PWrFlUrFjR3+GobG7Xrl1ERUVx7NgxbZgpnwqW\nY7Q/aG6c07zY09z4jjbMsokGDRr4OwRb27ZtIyoqin379tGjRw8GDhxIdHQ0jRs3vr7Qv/8S8uST\nVK5Vi8otWtCnd28mTZ7M66+/TnR0NIsXL6Z69ep+24ZAzq8zFStW1M4BlFLZRrAdozOT5sY5zYs9\nzY3vaOcf2USgjtI+depUHnzwQXKFhbF9+3bGjBlD4cKFU8cbGgoVKsCCBVCzJqEPPEDXO+5gx44d\n3HzzzdSqVYslS5b4ZyMI3PwqpZTSY7QrmhvnNC/2NDe+ow0z5RfGGHr37s3zzz/PlIceIiZ3bird\ncYd9gSJFYOZMOHQIVq6EG26ABg249dVX2fDFFzz11FO0aNGCefPmZd5GKKWUUkop5SV6K6PKdAkJ\nCXTr1o1FEyfyZ8WKlFm/Htq3hwsXIGdO14VDQqBRI2jYEObPhy5dyPXgg8xZtIhOuXMTFRVFoUKF\naNiwYeZsjFJKKaWUUl6gV8yyiY0bN/o7BMBqlHXu3JnNEyeyv0gRyhw7BitWwPTpkD//teXSjFcE\nnn0W/vc/KFmS0NOnmTp1Ko0aNeKZZ57h559/9u2GpBAo+VVKKZWaHqPtaW6c07zY09z4jjbMsonR\no0f7OwSMMXTv3p39U6awOVcu8pUuDVu3whNPpFrW7XhLl4aNG6FePXLkyMG8efMoV64czZo14/Tp\n017eAnuBkF+llFLO6THanubGOc2LPc2N72jDLJsIhGevxowZw8GPPyY6Rw5y1qkD330HNl1kpyte\nkWs/5s2bl0WLFhEbG8vzzz+PMSajYbslEPKrlFLKOT1G29PcOKd5sae58R1tmGUT4eHhfl3/woUL\n6du3Lx/eeis5nnwSli0DFzFlJN7bb7+dTz/9lEWLFjFz5kyP60kPf+dXKaWUPT1G29PcOKd5sae5\n8R1tmCmf++mnn2jbti2tWrWi9I4dVpf3uXL5dJ3NmjWjbdu29OzZk8OHD/t0XUoppZRSSmWUNsyU\nTx0/fpxnnnmGe++9l2nTphFSsGDaPS96ydixY8mTJw9du3bNlPUpBTBjxgxCQkLcnsqWLev1GMqU\nKUNISAhvvvmm1+tWSimllG9owyyb6NOnT6avMyEhgaioKM6fP8/ChQvJlY6rZN6It/CpU8zs1Ytl\ny5bx5ZdfZrg+V/yRXxXYRMStKSTE+4fhxLqVUhY9RtvT3DinebGnufEdHccsmyhl08mGL40YMYLo\n6Giio6O59dZb01XWK/F260b93bt5ok4devbsSb169cidO3fG63XCH/lVgW/lypXUqlXL5TK+aJgp\npZLTY7Q9zY1zmhd7mhvf0U8E2USPHj0ydX0bNmxg6NChDB06lMceeyzd5b0S74cfIkePMuO22zh4\n8CAffPBBxuu0kdn5VcEhd+7chIeHu5x89WWBUuo6PUbb09w4p3mxp7nxHW2YKa87deoUA1q1onbt\n2rz++uv+C+T222HIEIrMnMmwp59m5MiRnDp1yn/xKKWUUkopZUMbZsrr3n/2Wb49coSFHToQGhrq\n32Beew0qVqT3gQNcvHCBMWPG+DcepdLgTscdBw8evNZ5yIYNGzxaT0JCAjNnzuTJJ5+kRIkS5MqV\ni6JFi/Loo4/yySefEB8f77Tc+vXrCQkJITQ0lEOHDnH69GneeOMNqlSpQoECBTIUk1JKKZWdacMs\nm9i9e3emrGfR1Kl0iI7mdLly3BgV5XE9Xos3Z054/33CfvqJSY0aMXbsWP755x/v1J1EZuVXZX3p\n6bjD0w4+Dh8+TPXq1enQoQMrV67kn3/+4erVq5w8eZINGzbQuXNnatWqxYkTJ1zWs2/fPqpUqcLb\nb7/Nzp07OXfunD4zpwKSHqPtaW6c07zY09z4jp5Bs4m+ffv6fB1/HzmCdOlC8Zw5KbpqVYa6xfdq\nvPXrQ+PGtN6xgzyhobz99tveq9shM/KrlDecPXuWRx99lO3bt1OsWDHee+89du7cyYkTJ9i3bx/j\nxo2jYMGCbN68mRYtWrisq3379pw/f55x48axb98+YmNjWbduHbfddlsmbY1S7tFjtD3NjXOaF3ua\nG9/RXhmziQ8//NDn61gcGUn3K1c4+8knSAbHZvJ6vKNHE3rvvXzQqhUdJ01i4MCBFC9e3GvVZ0Z+\nVfC5cOEC58+fd7lMWFgYOTNpbD+AN954g71791KiRAl+/PFHbrnllmvzChQoQPfu3alduzYPPvgg\n3377LZ9//jlPP/10qnqMMcTGxrJlyxYqV6587f20eqFUyh/0GG1Pc+Oc5sWe5sZ3tGGWTfi6a9OV\nH35Ih5gY9tety23PP5/h+rwe7913w759NMqfn5xLl/LBBx/w1ltvea367NZ1bFxcXEDfylChQgXC\nw8P9HQaNGzdOc5mhQ4cyePDgTIjG+rtNnToVEWH48OHJGmVJ3XPPPbRq1Yrp06cze/Zspw0zEeG5\n555L1ihTKlBlt2N0emhunNO82NPc+I42zFSGHY+NpeCrr3IuPJyyS5f6Oxx7pUtTCHjxxRf56KOP\n6N+/P/ny5fN3VEFp9+7dVKtWzd9h2IqJiaFq1ar+DsOtZ8AycyDoTZs2cf78eUSEOnXquLyaV6VK\nFQB++ukn22Uef/xxr8eolFJKZVfaMFMZ9n6nTvS/coVL8+YhQdDQeeWVVxg/fjyTJ0/mtdde83c4\nQalChQrExMT4OwxbFSpU8HcIAKxbt47atWv7O4xrkl7lLFeunFtlYmNjbefps2RKKaWU92jDLJsY\nNWoU/fr183q9K1eu5K0VK6j4wQe0adrUa/X6Kl6AW265hTZt2vD+++/To0cPwsLCMlynL+MNROHh\n4QFxRSrQGWP8HUIyp0+fvvazu1fqLl++bDsvEG4XVcod2e0YnR6aG+c0L/Y0N76jvTJmE3FxcT6p\ns0uXLjz22GO07t7d63X7Up8+fTh8+DDz58/3Sn2+jldlH+40mK5evepR3Xnz5r3289mzZ4mPj09z\n8nRdSgUSPUbb09w4p3mxp7nxHW2YZRPDhg3zep1vvfUWR48e5aOPPvL6czK+iDepSpUq8dhjjzFh\nwgSv1OfreFX2kTt3bsDq0dHOkSNHPKo76a2He/fu9agOpYKRHqPtaW6c07zY09z4jjbMlEd2797N\nO++8w4ABA9x+ViXQdOvWjc2bNwf0s1Iq+7n55psB2LNnj+0yK1eu9KjuOnXqkCtXLgDmzZvnUR1K\nKaWU8g018yu5AAAgAElEQVRtmKl0M8bQrVs3SpUqFbz3GMfHE/HTT7QvVsxrV82U8oYaNWpgjGH1\n6tX8888/qebv3r3b4zFk8uXLxwsvvIAxhrFjx7Ju3TqXy1+6dIlDhw55tC6llFJKpY82zLKJY8eO\nea2uefPm8c033/Dhhx9eu+3K27wZr1OhoYR89x3Dw8OZO3cux48fz1B1Po9XBaXEAabTmpJq3749\noaGhxMXF0bBhQ7799ltOnjzJwYMH+eijj3j44Ye56aabPI7prbfeomLFily6dIkGDRrQvXt3Nm7c\nSGxsLKdOnWLfvn188cUXdOvWjVtvvZVFixZlNA1K+Z0eo+1pbpzTvNjT3PiONsyyiU6dOnmlnjP7\n9zOve3eaNWtGo0aNvFKnM96K16Vevbj14EHuvXqVadOmZaiqTIlXBRVjDI0bNyZfvnxpTkmvSpUv\nX57hw4cD8Msvv1CvXj2KFClC2bJl6d69O8WLF2fWrFkex5UvXz7WrVtHnTp1iI+Pv9bYK168OIUL\nF+aOO+7g6aef5uOPP+b48eNe6bVUKX/TY7Q9zY1zmhd7mhvf0YZZNjF06FCv1LP7ySf59MQJxo4Y\n4ZX67HgrXpciI6FMGcbccguTJk3KUNfmmRKvChoi4vYUEpL6MNy/f3+WLFnCI488QoECBQgPD6dS\npUq8+eabbNmyheLFi19bjyeKFSvGN998w4oVK2jdujVly5YlPDycsLAwihcvTu3atenfvz8//PAD\n3Z30uJoYu1LBQo/R9jQ3zmle7GlufEfHMcsmvDHm1N7Jk3lg1y6in3mGhj4ewDdTxsgKDYWXX6Zm\nnz6ci4/n+++/p1atWh5VpWN6qUTt27enffv2Ga6nSZMmNGnSxOm80qVLk5CQYFv2zz//dGsdjRs3\npnHjxumKK/FKm1LBRI/R9jQ3zmle7GlufEevmCm3JMTFEdazJ1vDw6mbgduoAk7HjkhYGK8VKsSn\nn37q72iUUkoppVQ2pQ0z5ZafW7TgposXYeJEcjq6284SChZEWrbkOWNYOH8+586d83dESimllFIq\nG9KGWTYxdepUj8ue3LiRu7/8kq+qVOH+tm29GJW9jMSbbp07U+jUKWrExbFw4UKPqsjUeJVSSqWL\nHqPtaW6c07zYSys3Fy9e5LfffmPt2rUsXbqUWbNmMW/ePJYtW8a6des4cOCA3hJvQxtm2cS2bds8\nK5iQwPFmzfgzJISay5Z5NygXPI7XEzVqwHffEVq/vse3M2ZqvEoppdJFj9H2NDfOaV7sJc1NQkIC\nMTExjB07lmeeeYYyZcoQHh7OXXfdRf369Xn66adp27YtrVq1okmTJjz66KOULVuWPHnyULlyZTp3\n7szMmTM5evSoH7cocGjnH9mEp4Mo75g1i3L//suqXr14qnRpL0dlL1MHfRaBWrXo0KkTrVu35o8/\n/uCOO+5IVxU6SLVSSgUuPUbb09w4p3mx9+GHH/L9998zf/58lixZwuHDh8mdOzcPPPAALVu2pHz5\n8txxxx2UKFGC/PnzkzdvXq5evUpcXBynTp3iwIED7Nu3j59//pmNGzcyefJkRIRatWrRvHlzoqKi\nKFSokL830y+0YaZsxcfH03HcOApWrsyqMWP8HY7PPfXUU+TLl485c+YwZMgQf4ejlFJKKRUwzpw5\nw8yZM5k4cSI7d+7klltuoVmzZjz99NPUrFmTXGn0QZAvXz6KFy9O+fLlk71/7Ngxli9fzuLFi3nt\ntdfo168fUVFR9OzZk7vuusuXmxRw9FZGZWvy5Mls27aNtz/5hNDQUH+H43N58uShadOmzJkzJ0Nj\nmimllFJKZRWnTp3izTffpHTp0vTq1Yvy5cuzevVqDh48yLhx43jkkUfSbJS5UrRoUTp27MiKFSv4\n66+/GDhwIF9++SWVK1emTZs27N2714tbE9i0Yaacio2NZeDAgTz//PPUqFHD3+FkmtatW/P777/r\nveVKKaWUytYuXbrEO++8Q5kyZXj77bdp27YtBw4cYPHixdSvX5+QEO83I4oXL86gQYM4cOAAEydO\nZP369VSoUIGePXty5swZr68v0GjDLJuIjIxM1/L9+/dHRPjvf//ro4hcS2+83lK3bl2KFy/OnDlz\n0lXOX/EqpZRKmx6j7WlunMvueVm+fDl33303AwYMICoqij///JMPPviAW265JVNykzNnTl588UX+\n+OMP3nrrLaZMmUKlSpVYsmSJz9ftT9owyya6d+/u9rKbNm3i008/5e2336Zo0aI+jMpeeuL1phw5\nctCyZUvmzZuXrq5c/RWvUkqptOkx2p7mxrnsmpd//vmH5s2bExkZSdmyZfn555/58MMPufnmm68t\n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\nacMLL7zA6NGj6dChQ8HMOyBa/6NTXWJTbfyjjlma6N69e9AR4qK8/kpE3n/961+sXbuWcdOmQfv2\n8MwzsCW3nQKxqb7+Sra8YWNmg4H2wC9AY+fcN3G8fHPkPreLSJeO3P+elxnu2bkzjj+fHgpqGd/w\n++9c2KQJU6ZMYfz48bRpE8/gm+Gk9T861SU21cZHzjnd4rwBNQGXmZnpksXq1auDjhAX5fVXovI2\nbNjQnXfeec6tWuVckSLODRqUr/movv5KpryZmZkO7xyumi4c7cHjeMPZbwDOzMfrq0Zevxs45AB/\n440DzKsm4MoWKuQuu+QS17x5879uZ599ths3btw+tZwyZYpr3rz5fjW+/fbb3YgRI/are/Pmzd3P\nP/+8z+P333+/69+//z6PrV692jVv3twtXbp0n8efeuop17Vr130e27Jli2vevLmbOXPmPo+/9tpr\nrm3btvtlu/LKK/P1PrKW8YN5H19//bWrXLmyK126tLv22msDeR9ZCvL/kX39T+b3kV1BvI+XX345\nJd6HH/+P1atXp8T7yHov8b6P3r177/P5WrNmTVe+fPkCaZs0KmM+aOQrkbwZN24cl19+OfPmzaPO\n00/DrFmwYgUU0s56yZ8wjcpoZgOBrsCveHvK4s4TGS7/V6Ak0Mg5NyPKNDOAesC9zrkBucyrJpA5\nEziqbFlOXLyY4sccE28kiWLu3LlkZGRw+OGHM2nSJE4++eSgI4lIiGhURhEJvYyMDE488UQGDx4M\nffvC9OnqlElKMLP+HGSnDMA5txOYgHdR6tZR/s4JwLmRX8flZZ7L7rqLwzdu5OdTTmHbl1/mJ1b6\n2rMH3njDu48YNWoUDRs2pHLlynzyySfqlImIb7SFJCK+KVy4MJ07d2bs2LF8X6QIHJena+6KhJqZ\nPQR0x+uUNclLp8zMOprZUjN7McrT/fEOgWlnZk2zvaYkMBKvrX7LObc8L/lqXncd3778Mn9u28a2\nGjXY9M47eXmZ/PIL/OMfcPXVMH06O3fupHPnzrRv354bbriBadOmceSRRwadUkRSmDpmaWLAgJhH\nv4SS8vorkXnbt29PiRIleOqpp/I9D9XXX8mWN0hm1hy4F68j9TXQycxGRbk9muOlRwJVgONzztM5\ntwjoAhQGJprZNDN7PTL/C4BlQFxD/51z3XVsmjCBL4DSLVqw8rXX4nynqeWAy/icOXDmmfDJJzBh\nAhuqVaNp06YMGzaMoUOH8uyzz1K8ePHEhE0wrf/RqS6xqTb+UccsTWzdujXoCHFRXn8lMu9hhx3G\nbbfdxrBhw/j99zwNKrcf1ddfyZY3YGXxOmUAtYE2MW6XR3mty/bafZ9wbjDQGJgMnAFk4I3Y+DBw\nlnNuY7xBa19yCcd+8QUPHHMMZ952G5MnT453Fikj5jK+Ywf06gX163t79D/7jBmHHEKNGjX43//+\nx4cffkiHDh1S+sLRWv+jU11iU238o8E/8kGDf4jEZ926dVSsWJF+/frRrVu3oONIEgvT4B9hE6tt\n+v3332ndujWTJk1i0KBBdOrUKaU7Gnm2eDG0aQNffAG9erG7e3f69u9P3759adCgAa+88grHaPAU\nEckDDf4hIknjmGOO4frrr2fQoEFs37496DgiaaVMmTK888473HXXXX+dM/XHH38EHStYe/bAVVd5\n9/Pm8V379jRq2pS+ffvSp08fpk6dqk6ZiCScOmYikhBdu3bl+++/57U0P9dFJAiFCxfmscceY/To\n0bz55pvUrl2bzz77LOhYwSlUCN57DzdvHi9+/jlnnHEG3377LR999BG9evWicOHCQScUkTSkjlma\n2LBhQ9AR4qK8/goi72mnnUZGRgaPPvooe/bsgdWr4Zln8vRa1ddfyZZX8q9NmzZkZmZSqlQp6tat\ny7BHH8WNHAm7dwcdzVfRlvE1xYrRrGVL2rVrR/Pmzfn8889p0KBBAOmCpfU/OtUlNtXGP+qYpYn2\n7dsHHSEuyuuvoPJ2796dpUuXMmHCBPj4Y+jUCRYe+FBs1ddfyZZXDk6VKlWYM2cOHTp0YHr37thN\nN7GjWjXvOoMpKvsyvnv3boYPH07VqlVZsmQJ//3vf3nppZcoW7ZsgAmDo/U/OtUlNtXGR8453eK8\nATUBl5mZ6ZJFMmV1Tnn9FmTec889151zzjluz44dzlWu7FxGxgFfo/r6K5nyZmZmZo1sWNOFoD0I\n0y0/bdN7773nmpUt6+YVKuQcuD0tWzr3zTd5fn1obdvm3IgRzu3a5Zzbu4zPnDnT1axZ0wHuxhtv\ndJs2bQoyZSgk0/qfSKpLbKrN/gqqbdIeszSRbKNHKq+/gsx73333MWfOHKZ9/LE3TPW77x5wr5nq\n669kyysF57LLLuPVb77hxVtu4Tpg/X//y55TT4V//QvWrg06Xvy2bPEOka5cGW69FT79FICjjjqK\n1q1bU79+fQoVKsTs2bMZMWIEhx12WMCBg6f1PzrVJTbVxj/qmIlIQl1yySXUqlWLvn37wjXXeBtQ\nDzwQdCyRtHX44YfzzLBh3DF3Lv+oUoUHdu1iy7PP4k46CRYtCjpe3nz3HfTo4V2LrHNnqFcPvviC\n9ZUq0a1bN6pUqcK0adMYNWoUn376Keeee27QiUVE9qOOmYgklJnRs2dPZsyYwceffJLnvWYi4q+6\ndesya9EijnjiCU4/5BA6Al1Gj2b9+vVBR4tt1iy4+mqoWBGGDYN27eCbb/hp0CC6Pv88J554Is8+\n+yx33303y5cvp23bthQqpE0fEQknfTqliZEjRwYdIS7K66+g82ZkZFCtWrV995r17h1z+qDzxkt5\nJVkVKVKEO++8k8UrV3L0/fczctQoTjrpJO69917WrVsXdLz9zZ0LS5bAY4/Bd9/xv3bt6DBgABUr\nVuT555+na9eurFq1ihNPPJEyZcoEnTaUtP5Hp7rEptr4Rx2zNLEwyfZGKK+/gs5bqFAhevbsydSp\nU5m7YAH06QP//S8sXRp1+qDzxkt5JdmVKVOGXr16sXLlSu644w6GDBnCCSecwBVXXMFHH33kDTay\neTPcfjuMGwe//RZM0DvvZOeiRbxRoQINL7uMM844g/Hjx3PPPfewcuVKHnzwQcqWLatlPBeqTXSq\nS2yqjX/MeSM5SRzMrCaQmZmZqRMgRfJpz549VK1alYoVKzLhvfcgMxPq1Ak6loTcwoULqVWrFkAt\n55y2DrLxs236/fffefnll3nmmWdYunQpf//73+nStCnXjxtHsVWroHBhqFkTqleHM87YeytXDszy\n9ke2b4fvv4cvv4TPPvPOb2vUyOv85bBz506mTZvGm2++ybhx49i4cSMNGzbk9ttvp2XLlhQtWrRA\n37+ISG4Kqm0qUnCRRETyrlChQtx3331cd911zM/MpI46ZSKhVaZMGTp27Mjtt9/O9OnTGTZsGHcM\nH85N27bRpHJlOlSqRD2g3Pz52EsvwY4d3gt37IDcOkn33w/jx3sdsl9+2fv4YYfBmWdCyZJ/PbR6\n9Wo+/vhjpk2bxrvvvsvGjRupVKkSt956K9deey2nn366P29eRCRB1DETkcBcffXV9OvXj549ezJl\nypSg44jIAZgZF1xwARdccAFbt25lypQpjBs3jnbvvcemTZsoWbIkZ9WuzaWnnEK9o46izPLlnHDC\nCZQuXTr6DMuUgQYN4G9/825HH83uSpVYDSz76iuWLVvG5zfcwIwZM1i9ejUAVatW5dZbb+XKK6+k\nevXqWF73yImIhJw6ZiISmMKFC/Pggw9yxRVX8PHHH9OgQYOgI4lIHpUqVYqWLVvSsmVLdu7cyfz5\n85k7dy5z587l6WnT6L5mDTz6KABly5blhBNOoEKFCpQoUYLixYtTvHhxihYtyu+//86mFSv49ddf\n+fXXX1m7di3bt2//62+cdtpptGzZkoYNG1K/fn3KlSsX5NsWEfGNBv9IExkZGUFHiIvy+itMeS+/\n/HLOPPNM7rvvPmKd8xqmvHmhvJJuihYtyrnnnkuXLl0YO3Ysq1ev5ocffmDmzJm88sor3H333dSp\nU4fixYvz559/sn79er7++msWL17ML7/8QpkyZahevTotW7ZkwIABTJkyhdWrV7N582YWLFjAk08+\nSYsWLfLdKdMyHptqE53qEptq4x/tMUsTnTp1CjpCXJTXX2HKW6hQIR566CEuvfRSpkyZwsUXX7zf\nNGHKmxfKKwIVKlSgQoUK1KtXL+goWsZzodpEp7rEptr4R6My5oNGZRQpWM456tWrx/bt25k/f77O\nGZGYNCpjbGqbRESCUVBtkw5lFJHAmRn9+vUjMzOTcePGeQ8OGQJ9+wYbTERERCRB1DETkVA4//zz\nady4Mffeey87d+6EjRvhoYdg5cqgo4mIiIj4Th2zNDF+/PigI8RFef0V1rwDBw5k+fLljBgxArp2\nhSOPhB49Qps3FuUVCRct47GpNtGpLrGpNv5RxyxNjBkzJugIcVFef4U1b40aNWjTpg29e/fm9927\noV8/GDuWMUOGBB0tLmGtbyzJllckXlrGY1NtolNdYlNt/KPBP/JBJ1iL+Oe7776jcuXKdOnShX59\n+0Lt2lC4MHz6KRTSd0npToN/xKa2SUQkGBr8Q0RS0rHHHsvdd9/NE088wdp167xBQBYsgBdeCDqa\niIiIiG+SomNmZleY2XQz22hmf5jZZ2bWzcziug6bmd1gZnsOcGvi1/sQkbzp3r07hx56KL169YLz\nzoPrr4cePbwBQURERERSUOgvMG1mg4DOwE5gGvAH0AgYAFxmZk2cc9vjnO3XwKwojztg3UHEFZEC\nUKZMGR544AE6duxIp06dqD1wIHz1FaxbB2XLBh1PREREpMCFeo+ZmbXA65RtBs5yzl3inLsCqAws\nAeoB+bnQ0SznXPsotxudc18U3DsIj3bt2gUdIS7K669kyHvzzTdTtWpV7rjjDtr26AFz58IZZwQd\nK0+Sob7ZJVtekXhpGY9NtYlOdYlNtfFPqDtmwL14e7Eecc59nvWgc24jcDtgQCczOzSgfEmjSZPk\nOkJTef2VDHmLFCnCkCFDmDt3LiVLlgSzoCPlWTLUN7tkyysSLy3jsak20akusak2/gntqIxm9jfg\nO7yO2UnOudVRplkNHAu0ds69kYd53gCMAl50zrU/iGwa+UokQa6++mqmT5/OV199xWGHHRZ0HAmY\nRmWMTW2TiEgw0mFUxjMj9xujdcoiFuSYNq8qmVlfM3vWzB43s3ZmVi5/MUXET4899hibN2/mgQce\nCDqKiIiIiG/C3DGrGLlfk8s0a/EOZ6yYyzTRnId3mORNwJ3ASGCtmXWPN6SI+OvYY4+lZ8+eDBky\nhC+//DLoOCIiIiK+CHPHLOu8sS25TPNH5L5MHuf5I/AQUBc4KvK6OsBooBjwiJn1iD9q+M2aFW0Q\nyvBSXn8lW966dety4okn0rFjR8J6+HV2yVbfZMsrEi8t47GpNtGpLrGpNv4Jc8eswDnnpjjn7nfO\nLXDObXTObXHOLXTOtQO64u19u9/Mjgo4aoEbOHBg0BHiorz+Sra8gwYNYujQoUyfPp0XX3zRe3D3\nbnjuOfjjj1xfG4Rkq2+y5RWJl5bx2FSb6FSX2FQb/4R58I9OwFPAIudcrRjTZF3j7E3n3FUH+fcK\n4e1RKwe0cc69msu0SXeC9datWylVqlTQMfJMef2VrHmvv/56Jk6cyNKlS/m/P/+E006Dm26CwYOD\njriPZK1vMtDgH7ElY9uUKMm0jCeaahOd6hKbarO/dBj8Y1Xk/rhcpjkOb9TGVblMkyfOuT3Aisiv\nx+blNc2aNSMjI2Of2znnnMP48eP3me79998nIyNjv9d37NiRkSNH7vPYwoULycjIYMOGDfs83rt3\nbwYMGLDPY2vWrCEjI4Nly5bt8/iQIUPo1q3bfn8vIyNjv93PY8aMiXo9iquuuirQ91GqVKmo72Pr\n1q2hfB+lSpWK6/8R9PvI+kA92OUqUe8jK2/btm3ZvHkzt99+Oxx/PDz8MDz1FL3btg3V+8jeYCVy\nPc/v+8ieNwyfV1nvo0+fPvt8vtaqVYtmzZrtl03kQLQRGZtqE53qEptq458w7zE7Bm9wjwIbLj8P\nf3MZ3sWr73DODc1lOn0rKRKQ0aNH07ZtWyZPnkzTxo3hggtg7VpYvBhKlw46nikFbGUAACAASURB\nVPhMe8xiU9skIhKMlN9j5pxbB8yP/No65/NmVg9vj9l2YOLB/r1Ig3ZK5Nd5Bzs/EfFHmzZtaNSo\nER06dGDLtm0wahSsXw9R9hKLiIiIJIvQdswiHsYbkKOHmf11rbLINceG4u1NG+Kc25ztuRZmttTM\nPsg+IzMraWa3m9l+X6mbWQPgP5H5zXTOLcg5TbKLdmhjmCmvv5I5r5kxfPhwfvzxR3r06AEnnQQD\nB8Lw4fDBB7nMJXGSub4iqUjLeGyqTXSqS2yqjX9C3TFzzr0DDAZKA3PNbKKZvYl3LtjpwCzg/hwv\nOwyoApyc4/FiwNPAz2b2iZm9bmZvmdliYDpwPLAYOKhBRMLq+OOPDzpCXJTXX8met3LlyvTv35+n\nn36aadOmwW23wYUXwo03wqZNAaXcK9nrK5JqtIzHptpEp7rEptr4J7TnmGVnZq2AjkANoCjwDfAy\nMMg5tyvHtDcALwCrnHMnZ3u8KHAfUBs4FTgSKAn8CnwOjAVG55xfjDw6jl8kYHv27OHCCy9k5cqV\nLF68mDKbNkFGBrzyClStGnQ88YnOMYtNbZOISDAKqm0qUnCR/OOcewt4K4/Tjsa7YHTOx3cCfQo2\nmYgEpVChQrzwwgucccYZdO3aleeeew4WLQKzoKOJiIiIxC3UhzKKiOSmYsWKPPbYYzz//PNMmjRJ\nnTIRERFJWuqYpYmc1w4KO+X1VyrlvfXWW2natCnt2rVj/fr1CUwVWyrVVyQVaBmPTbWJTnWJTbXx\njzpmaaJ79+5BR4iL8vorlfKaGS+++CJ79uyhbdu27NmzJ4HJokul+oqkAi3jsak20akusak2/lHH\nLE08/fTTQUeIi/L6K9XyVqhQgRdffJFJkybx1FNPJShVbKlWX5Fkp2U8NtUmOtUlNtXGP+qYpYlk\nG9pUef2VinmbNWvGnXfeSffu3Vm0aNG+TyZ4L1oq1lckmWkZj021iU51iU218Y86ZiKSMvr378/p\np5/O1VdfzebNkevOjx0LDRrAn38GG05EREQkF+qYiUjKKF68OK+//jrff/89N910E845qFQJFiyA\nO+8MOp6IiIhITOqYpYkBAwYEHSEuyuuvVM5bpUoVRo0axdixYxk8eDDUrAlDhsCzz8Jzz/mYcq9U\nrq9IMtIyHptqE53qEptq4x91zNLE1q1bg44QF+X1V6rnbdWqFV26dKFbt27MmjULbr4ZOnSAjh3h\n4499SrlXqtdXJNloGY9NtYlOdYlNtfGPOeeCzpB0zKwmkJmZmUnNmjWDjiMiUezcuZOLLrqIFStW\nsHDhQiqUKwdNmsD//gfz58OJJwYdUfJh4cKF1KpVC6CWc25h0HnCRG2TiEgwCqpt0h4zEUlJRYsW\n5Y033gDgn//8J9v37IE334RDD4V//AP++CPghJKszOwUM+tkZqPMbLGZ7TSzPWZ270HM8wgze8TM\nvjSzrWa20cxmmNl1BZldRETCSx0zEUlZFSpUYNy4cWRmZnLLLbfgypWDd9+FVatg8uSg40ny6gA8\nBbQBTsdrS/N9+ImZVQQWAfcARwJTgUygJvCSmb1wsIFFRCT81DFLExs2bAg6QlyU11/plLdu3bqM\nGjWKl156iYEDB0LVqrBiBbRqVYAJ95VO9U1TS4BHgWuB04BXDnJ+rwPHAdOAys65DOdcY6A68A1w\ng5ndeJB/I61pGY9NtYlOdYlNtfGPOmZpon379kFHiIvy+ivd8l5zzTX06tWLf//734wfPx7+7/8K\nKFl06VbfdOOce8E5d49z7nXn3HIg31cwN7OzgTrAbuAm59xv2f7Ot0AXwIBeBxk7rWkZj021iU51\niU218Y86ZmmiT58+QUeIi/L6Kx3z9unTh3/+859ce+21zJ8//+BDHeBvJZNky5ti6kTuVznnVkV5\nfmrk/jgzqxPleckDLeOxqTbRqS6xqTb+UccsTSTbCF3K6690zFuoUCFGjx5N9erVufTSS1mxYkUB\nJIsuHesr+VY6cv9LtCedc9uAbZFfayUkUQrSMh6bahOd6hKbauMfdcxEJG2UKlWK9957j3LlytG0\naVN++umnoCOJrI/cV4z2pJmVB0rmNo2IiKQGdcxEJK2UK1eOyZMn8+eff9KsWTM2b96898nNm2Hd\nuuDCSTr6CG9Ex6PMLCPK8x2y/VwmMZFERCQI6piliZEjRwYdIS7K6690z3vCCScwefJkvv76azIy\nMti6dav3xE03wfnnww8/HNT8072+kneRAT5ewRvgY5SZXWtmZc3sGDO7B/g3sCMyeb4HGUl3WsZj\nU22iU11iU238o45Zmli4MN8XIQ+E8vpLeaFatWpMnDiRefPmcfnll7N9+3bo3x+2bYOLLoKff873\nvFVfiVMHYBxwOPAysAFYCzwMvA1MjEy3MS8za9asGRkZGfvczjnnHG9E0mzef/99MjL230nXsWPH\n/Ta8Fi5cSEZGxn7DZPfu3ZsBAwbs89iaNWvIyMhg2bJl+zw+ZMgQunXrts9jW7duJSMjg1mzZu3z\n+JgxY2jXrt1+2a666qp8vY+sZTzZ30eWgnwf2df/ZH4f2RXE+xg/fnxKvA8//h8LFy5MifcB+ft/\n9OnTZ5/P11q1atGsWbP9suWHOZfva2KmLTOrCWRmZmbqBEiRJDdt2jQuvfRSmjZtyptvvknRlSuh\nQQOoUAGmTYOyZYOOKNksXLiQWrVqAdRyzoWiR2lmo/AuNt3LOffwQcynLnAxcDReJ2yyc+5jM5sN\nnA1c45wbm8vr1TaJiASgoNom7TETkbTWqFEj3n77bSZOnMi1117LzooVYepU+O47uPhi+O23A89E\npAA45z51zj3gnLvNOXdvpFNWGqgB7MI7H01ERFKUOmYikvYuueQSxo4dy/jx47niiivYXrkyfPAB\nrFgBTZvCpk1BR5T01RFvVMaxzrn8H18rIiKhp46ZiAjQokULxo8fz5QpU/jHP/7B1ipVvD1nK1bA\nrbcGHU+SnJl1NLOlZvZilOdOMrMjozzeHngQ75yzrv6nFBGRIKljliainTAZZsrrL+WNrlmzZkyY\nMIGZM2d6Q+mfcgpMnw6PPx7XfFTf1GZmZ5rZXDObY2ZzgEvxRlW8LeuxyK18tpcdCVQBjo8yy+bA\n95F5jjWzN81sJTAC78LTjZ1zuujeQdAyHptqE53qEptq458iQQeQxOjUqVPQEeKivP5S3tgaNWrE\n+++/T7NmzWjSpAkTJ07kiCOOiGseqm/KKwPUyfGYA46J3LJ+Lx5lmmgjbs0G3gLOAk6PTPMt8ADw\npHPu94KJnb60jMem2kSnusSm2vhHozLmg0a+Ekl9CxYsoGnTphx99NFMnDiR44+PtqNDEi2MozKG\nhdomEZFgaFRGEREf1a5dm9mzZ7NlyxbOPvtsPvvss6AjiYiISApTx0xEJIZTTz2VOXPm8Le//Y36\n9evz/vvvBx1JREREUpQ6Zmki5xXUw055/aW8eVehQgWmT59OgwYNuPTSSxk1atTeJ999F159db/X\nqL4i4aJlPDbVJjrVJTbVxj/qmKWJMWPGBB0hLsrrL+WNT+nSpXnnnXdo37497du3p2vXruzatQsm\nTYLrroOBAyHb+bpB541XsuUViZeW8dhUm+hUl9hUG/9o8I980AnWIunJOceQIUPo0qULF154Ia+P\nGcMRTzwB/fpB+/YwbBgUKxZ0zJSmwT9iU9skIhIMDf4hIpJgZkbnzp2ZMmUKCxYs4Ky6dfmydWsY\nPRpefhkuvhg2bgw6poiIiCQhdcxEROJ04YUXMn/+fEqUKEHdunX5zyGHwIcfwuLFcM45sGJF0BFF\nREQkyahjJiKSDyeddBJz5szhkksuoVWrVvzrrbfY/vHHYAZnnw0//RR0RBEREUki6piliXbt2gUd\nIS7K6y/lLRilS5fmjTfeYMiQIQwfPpz6bduy+vXXaXfqqVC+fNDx8iys9RUpKFrGY1NtolNdYlNt\n/KOOWZpo0qRJ0BHiorz+Ut6CY2Z06tSJ2bNns2HDBqqffz5H1K0bdKy4hLm+IgVBy3hsqk10qkts\nqo1/NCpjPmjkKxGJZtOmTdx44428/fbbdO7cmQEDBlCiRImgY6UUjcoYm9omEZFgaFRGEZGQOfzw\nw3nrrbcYPHgww4cP56yzzmLJkiVBxxIREZEkoI6ZiEgByhpSf/78+TjnqF27Nk888QR79uzxJti2\nLdiAIiIiEkrqmKWJWbNmBR0hLsrrL+X116xZs6hWrRrz58+nU6dO3H333TRu3JjvVq+Gpk3h1lth\n+/agY/4l2eorEi8t47GpNtGpLrGpNv5RxyxNDBw4MOgIcVFefymvv7LylihRgscff5ypU6fy1Vdf\ncUaNGsz/+9/hxRehQQP47rtgg0YkW31F4qVlPDbVJjrVJTbVxj8a/CMfkvEE661bt1KqVKmgY+SZ\n8vpLef0VLe/GjRvp0KEDY8eOpdfFF9NnyRIK7dgBY8fC+ecHEzQimeqrwT9iS8a2KVGSaRlPNNUm\nOtUlNtVmfxr8Q+KSbCuQ8vpLef0VLW/ZsmV5/fXXefnll3lqzhxq7N7NL8ccAxddBE8+CQF+SZZs\n9RWJl5bx2FSb6FSX2FQb/6hjJiKSIGbGddddx5IlS/i/00+n/GefMbVaNejSBa65BrZsCTqiiIiI\nBEQdMxGRBDvuuON4//33GTRkCBnLlvGvo4/mj88/h927g44mIiIiAVHHLE1069Yt6AhxUV5/Ka+/\n8pK3UKFCdOrUiUWLFjH3uOM4/Kuv6PXoo+zYsSMBCfeVbPUViZeW8dhUm+hUl9hUG/+oY5Ymjj/+\n+KAjxEV5/aW8/oonb5UqVZg9ezZ9HnyQ/v37c/bZZ/PFF1/4mG5/yVZfkXhpGY9NtYlOdYlNtfGP\nRmXMB418JSJ+WLhwIddffz3ffPMN/fr1484776Rw4cJBxwoVjcoYm9omEZFgaFRGEZEUU7NmTTIz\nM+nUqRPdunWjUaNGrFy5MuhYIiIikgDqmImIhEiJEiV47LHH+Oijj1izZg3VqlXjk+uuw40ZE3Q0\nERER8ZE6Zmli2bJlQUeIi/L6S3n9VRB5GzZsyOeff85VV17J8ldfxVq3Zsttt8GuXQWQcF/JVl+R\neGkZj021iU51iU218Y86Zmmie/fuQUeIi/L6S3n9VVB5y5Qpw4iRIyn3zjvcV7o0xZ99lvU1asD6\n9QUy/yzJVl+ReGkZj021iU51iU218Y8G/8iHZDzBes2aNUk1io7y+kt5/eVH3p9//pmnWrWi48cf\nU6xUKYq+8w6HXnRRgcw7meqrwT9iS8a2KVGSaRlPNNUmOtUlNtVmfxr8Q+KSbCuQ8vpLef3lR96j\njjqKB6dPZ/bgwXy9fTvFGjdm2d13F8i8k62+IvHSMh6bahOd6hKbauMfdcxERJKEmfHPzp05+quv\nmHLMMVR64gme6dSJ3bt3Bx1NREREDpI6ZiIiSea4k0/m0tWreb5TJ+4YOpSLL76Yn376KehYIiIi\nchDUMUsTAwYMCDpCXJTXX8rrr0TkLVy4MB2GDGHq1KksWbKEGjVqMGPGjHzNK9nqKxIvLeOxqTbR\nqS6xqTb+UccsTWzdujXoCHFRXn8pr78SmbdRo0Z89tlnnHbaaTRq1IhHHnmEeAd1Srb6isRLy3hs\nqk10qktsqo1/NCpjPmjkKxEJm927d9OnTx8eeughWrVqxahRoyhdunTQsQqcRmWMTW2TiEgwNCqj\niIj8pXDhwvTt25dx48YxefJkLjr7bFauXBl0LBEREckjdcxERFJIixYt+HTaNF5dvpy3Tz+daR9+\nGHQkERERyQN1zNLEhg0bgo4QF+X1l/L6K+i8f69Th6Pvu4+7t23j28aNGTViRK7TB51XxG9axmNT\nbaJTXWJTbfyjjlmaaN++fdAR4qK8/lJef4Uhb6nevdk9YgTtgMNuvpkH/v3vmIOChCGviJ+0jMem\n2kSnusSm2vhHHbM00adPn6AjxEV5/aW8/gpL3sI33kih8eNpXqQIDfr355ZrrmHHjh37TReWvCJ+\n0TIem2oTneoSm2rjH43KmA8a+UpEksqsWexo0oTMP/+k33nn8dqECZQpUyboVPmiURljU9skIhIM\njcooIiJ5U68exWbMoPYhh3D5vHk0atRI5wiIiIiEjDpmIiLpoE4din7yCXWmTmXNmjU0bNiQdevW\nBZ1KREREItQxSxMjR44MOkJclNdfyuuv0OY94wzOqF+fmTNnsnnzZurXr8+3334b3rwiBUTLeGyq\nTXSqS2yqjX/UMUsTCxcm16kYyusv5fVX2PNWqVKFWbNmUaRIEerVq8e0adOCjiTiq7Cvk0FSbaJT\nXWJTbfyjwT/yQSdYi0gq+Omnn2jUqBGbNm1ixowZVKpUKehIB6TBP2JT2yQiEgwN/iEiIgelfPny\nfPjhhxx66KFccMEFfPvtt0FHEhERSVvqmImIpLEKFSowbdo0muzZQ9Pzz2fVqlVBRxIREUlL6piJ\niKS5vxUqxPMbNzJo40YanX++RmsUEREJgDpmaSIjIyPoCHFRXn8pr7+SLu8tt1Dotddotm0bPX/5\nhYubNuXXX38NOpZIgUm2dTKRVJvoVJfYVBv/qGOWJjp16hR0hLgor7+U119JmbdlS+yZZ2j/xx+0\n+vZbMjIy2LZtW9DRRApEsq2TiaTaRKe6xKba+CcpRmU0syuAjkA1oBjwNfAq8KRzblc+5lcT+DdQ\nHzgM+AH4L9DXOfdzHl+vka9EJPX07g0PPsgtxYrxY9OmvP322xQpUiToVH8Jw6iMZnYK0ASoFbmd\nBhQGejrnHs7nPMsC3YBLgZOAosB6YA4wxDk3Mw/zUNskIhKAtBmV0cwGAW8A5wCfApOA44ABwIdm\nVjzO+bUC5gKXA6uA8cBuoBOw2MxOKrDwIiLJpk8fuPlmhu/axc4JE7jllltIhi/wEqwD8BTQBjgd\nry3Nd5Ei7c4S4B6gAvARXtv0G/BPYIaZ3XmQmUVEJORC3TEzsxZAZ2AzcJZz7hLn3BVAZbxGrB7Q\nN475HQ28iPfN5i3OubOdc9cApwAvA+WB1wr0TYiIJBMzGDqUQhdfzDslSvDOqFE8/HC+dgKlsiXA\no8C1eHvLXjnI+T2J1yF7DzjBOdfcOXeVc64qcGtkmgFm9reD/DsiIhJioe6YAffifQv5iHPu86wH\nnXMbgdsBAzqZ2aF5nN9dQCngA+fcyGzzc5H5/QbUMbPGBZQ/NMaPHx90hLgor7+U119Jn7dIERgz\nhmKvvkrnPn3o2bMnb775ZjDhQsg594Jz7h7n3OvOueXAnoOc5QWR+wedc/uc2OecGwGsAIoAdQ7y\n76StZFsnE0m1iU51iU218U9oO2aRbwZrR34dk/N559xsYC1QHGiWx9m2wOvoRZvfFuDdyK+Xx5s3\n7AYMGBB0hLgor7+U118pkbdMGWjRgvvvv59rrrmGNm3aMH/+/MSHSw9/5nG6Db6mSGHJtk4mkmoT\nneoSm2rjn9B2zIAzI/cbnXOrY0yzIMe0MZlZaaBSjtdFm5/lZX7J5qijjgo6QlyU11/K669Uymtm\njBw5kurVq5ORkcHatWsTmCxtTMJre3qbWcnsT5jZzXiH7y/GGwhE8iHZ1slEUm2iU11iU238E+aO\nWcXI/ZpcplmL15hVzGWaLCdm+znWPLO2OPIyPxGRtFCyZEnGjx9PsWLFyMjIYMuWLUFHSjXd8L4Y\nvBRYY2bvmdkbZvY/YBjeuWcXO+cO9pBJEREJsTB3zLLOG8ttC+CPyH2ZOOaX2zzjmZ+ISNqoUKEC\n7733HsuXL+fmm2/WSI0FyDm3Hu88s1eBsniH57fCG1jkO7xRGnUYo4hIigtzx0xEREKkWrVqjBo1\nijFjxvDkk08GHSdlmNmpwGfAZXhD8R+Hd43N84GfgCeACWZmQWUUERH/heeqofvbHLk/JJdpSkfu\nf49jflnz3BxlmrzOrwTA0qVL8/Bnw2HevHksXBjItVjzRXn9pbz+SuW8lSpVok2bNtxzzz2cdtpp\nlC9f3ud0+8r2uVsioX/YJ2ZWGPgP3kWlr3DOvZ3t6Zlm1hT4EmiMd9200bnMrgRA48aNqVq16j5P\nbNy4kbZt23LBBRf89dicOXMYO3bsfp3s/v37c+qpp9KiRYu/Hlu6dCnPPfcc999/P0ccccRfjw8f\nPpwSJUrQtm3bvx774YcfGDhwIJ07d6Zixb1nBrz++uv8+OOP3Hnn3kuybdu2jXvvvZc2bdpw5pl7\nT++ePHkyc+fOpU+fPvtk69GjB02bNo37fWQt48n+PrIU5PvIvv4n8/so6P/HzJkzadiwYdK/Dz/+\nH/PmzWPChAlJ/z4gf/+PKlWq8NVXX/31+Pr161m/fn3WrwfXNjnnQnnD++ZwD7A+l2n+g3dx6AF5\nmN+hkfntBk6PMc0dkWk+PcC8WuON7qibbrrpplswt9ZBt1PZ2oRReG3Lvfl47bl47c5WwGJMMzIy\nzctqm3TTTTfdQn07qLYpzHvMFkXuy5nZCS76yIxZw+kf8Kte59xmM/saODnyui8OYn5T8C4suoq8\nD3MsIiIHrwTeYE5TAs5RUI6P3G91kd5VFL9F7sseYF5qm0REglEgbVNoO2bOuXVmNh+vs9QaeCT7\n82ZWD+84/D+BiXmc7Ti80a9ak+NwEDM7BGiO19t9e/+X7pPtF+C1PP5NEREpWJ8EHaAArYvcH2Fm\nJzvnvokyTV28tmllbjNS2yQiEqiDbpvCPvjHw3jD4fcws78OSjWzcsBQvIZqiHNuc7bnWpjZUjP7\nIMr8BuEdLnKRmd2U7TWF8IYkPhyY55yL9loREZF8MbOOkbbpxRxPzcHrnBkwwsyOzPYaM7MewDmR\nh8YkJKyIiATCYh85EQ5m9iTQGdgFfIg31P2FeCNWzQKaOOe2Z5v+Brzj/Vc5506KMr9WeN8oFgE+\nxTvkow7eidc/APWcc7l+KykiIukr8kXhMLwvB8E7RP5IvKHt12WbtIVz7qfIa3oDvYHpzrlGOeZ3\nAfAuUApvYKpPI/fVI/N2QD/n3P1+vScREQle2PeY4Zy7C7gKb/fgOcAleBeCvge4MHunLPvL2Ntg\n5pzfW3iHhfwH70LSLfDqMASokVunzMyuMLPpZrbRzP4ws8/MrJuZheqQUDMrYmaNzOxRM5tnZr+a\n2Q4z+8HM3jGzZkFnPBAzG2hmeyK3e4POE4uZFTWzzmY208x+MbNtZrbWzCaa2ZVB58vOzI4zs6fN\nbJmZbY1k/dbMXjSzagnOcoqZdTKzUWa22Mx25vV/bWYXRer7c+R9LDWzhyKHI4cmc2Rvxzlm9mBk\n+dgQWQ9/NrP3zax1mPLmMp/bs62Lz4Uxb6TWN5jZVDNbb2Z/mtn3ZvahmXXwIW4ZvC/0zorcyuG1\nOcdke6wOUDzH66K2Tc65j4AzgGfwOnbn4Q2AVQKvrWqcW6csWdqmRCqo5T+VpMK2gZ/MrLWZjY6s\nPz9FarPJzD41sx5+tzHJJFm20fwW+XzZk8ttt5kVi2eeSfGhHelMvZXHaUeT+3DCOOcWAVfEk8HM\nBuHtudsJTMO7GHUjYABwmZk1idFJDEJD4AO8DYAfgZl4exr/jtfYNzezZ51zfmywHDQzOxfogjcK\nWWiv22Nmx+Kd5Hka8DPeHtwteOc+1sdbRsYGFjAbM6sLvI93SYh1eLl3AzXwhuBubWbXOOf+k6BI\nHYB/se9G6gF335vZXcDjeMvGTLxrPNUH7gUuN7N6zrmNBR8XiD/zScDsyDQbgfnAr5HHL8Q7pPpq\n4HLn3K4Q5N2PmZ2E9xmXiHUxv8tEGeA9vOXgN7wv8TbhdZJq4I3IO6wggzrnZgCF43zNA8ADuTy/\nCq+NiUuStU2JdNDLfwpK6m2DBOiAtwNgKZCJ97ldPvJYHaC9mTVwzv0YXMTgJcs2WgI5vLb+6xjP\n7Y5vbiEYajjsN7y9anvwGv3q2R4vC3weKfrAoHNmy3UBXofg3CjPXYHXgO8Grgs6a5R8JYHlwBr2\nXg4h7iGoE5CzBN6H926gJ1A4yvPVgs6ZLU/Wcjo0StYHIsv3L0CxBOVpj7fheDVwCt6XKbn+r/E2\nsncDO/AOYc5e6w8i72FsWDLjdcA+wLv+lOV4rj7eoWq7gZ5hyBvl9QZ8HPnceyFS3+fCUt9sr/so\nMt0zQKkczxUBaiZimQ7ilmxtU4Jrc1DLfyreknnbIEH1qQMcHuXxIyKfhbuBV4POGXCNkmIbLYH1\nGBWpQZsCm2fQbyoZbsC8SOF7RHnuPPZeg+bQoLPm8f08H8n8ftBZomQbHKn1xRzEtYESkPPBSA2H\nBp0lD1nLsvcafuWiPF8I71vT3dk37hKc8YD/68gGxW5geJTnjsc7D3U3cEpYMh/g9fdF/i/Lw5gX\nuCsy/a1450b52jHL5zLRPpJrQqJyhemWam2Tz7UKbXsSlluYtw2CvgH1IrX5OegsAdchKbbREliP\nAu+Yhf4cs6CZ2d/Ye32z/UbEcs7NxjvnrTiQLMdnZ10j7rhAU+RgZucDnYDRzrnJAceJKXLexm14\nu6gfDThOXsRzGNMG31IcBDMryt71K9p6uAbvUAKAlonKdZBCuR4CmFkV4CG8gSqeDTpPLjqTPOth\ngUrRtkmCFdrPpBDIOtw8HQ8LBpJnGy3ZJcU5ZgHLGqZ/o4t+kWuABcCxkWnfSEiqg1M5cv9DoCmy\niZxU+wJeprsCjnMgNfFGYFvnnFtpZmcAlwNH451DNBOY5CJfpwTNObfFzGbifeP3kJnd4SLnNJmZ\n4R3KWBJvr8O6XGYVpFPwRqxzeOtbNAvwDhE8M8bzYRO69RD+unzIaLxvh28MOE5MZvZ/QDW8DaY5\nkfPhrgROwDvP6lPgHefczuBS+ioV2yYJVig/k4JmZqXx2kkHvBNwnEAk2TZaohnQyLxB1A7FOy1k\nHjDRObcj3pmpY3ZgFSP3a3KZZi3eP6ZiLtOEgpmVB9rifcDkaUCVBHkcpW+YfQAACrRJREFUb4Oq\nhXPut6DDHEDWCIbfmdkjQPccz98DLDKzFs65tYmNFtPNwATgFrwBARbg7X4/E2+QhNHAHcHFO6Cs\ndWuTc25LjGnW5pg2tMysJHv39oRpPQRvea4D3Om8ASnCKms9/AVv+X6cfds0A741s5bOuSWJDpcA\nKdU2SbBCvG2QcGbWGGiNd5h/1uAfpYFJQI8AowUpmbbREs0B1+d4zIAfzKy9c25KPDPToYwHdmjk\nPtbGIHjfzoI3hHJomVlh4FW8a8AtBnwb+joeZtYEr8Mwxjn3XtB58qBc5L4m3kbs00AVvLo2Br7C\n6/D8N1LzwDnnlgPn4g1G8TcgA++QvxOBFcAM59wfMWcQvJRZDyOG4W0srwMeCTjLX8ysKtAHmO2c\nGxJwnAMpl+3+KWAcUBVvWTkHmIs3AMskMzsikIT+SrV1QgIS1m2DAP0db7Ti6/Da9NJ4179t55zb\nHGSwICThNloifYY3+mtVvM/Z8kATvFMrjgbeMbMG8cxQHbP08izeMMo/A62cP0N0xyUy1PVIvGHP\nw7zHJrus4WGLAK855/7lnPvaOfeHc24a3kr5J96KenVQIbMzs/OA/wGnA9cAFfAGBWkOFANeMLPn\ng0uYPsysF16jvw240jn3a8CRgL82zrJGrmsfcJy8yFoPC+N1JK92zi11zm11zs3DWw9/wmscbw8q\npEgSCN22QZCcc4Odc4Xx2sZKwN1452kuNbN6gYZLsCTdRkuYyLLydKTt2eKc2+Cc+9A5Vx/vsNdi\nwKB45qmO2YFlfTuS24UFS0fuf/c5S76Z2WC8ja1f8C5W+k3AkbIMxtuDc0dYNlDzIPs3Zvt9sxg5\nfHFC5NeLEpIoF2Z2GN7ehHJAS+fcWOfcz86535xzE/FGV9qKd42WhkFmzUWqrIdd8M5V+BPvkJC5\nAUfKrifeJQl6O+eiXY8lbA60Hv4BvILXgQt8PfRBSqwTEqwQbxsEzjm32zm30jk3CLgEb9j8V8ws\n54XjU1kybqOFRe/IfXUzOyavL9I5Zge2KnKf2yhFx+EdY7oql2kCY2aP433TsRHv+k+LA46UXQu8\nk/c7mlnHHM+dGrm/KXLM94/OuWsSmi66b2P8nHMaw/u2PmiX4g1W8rVzbr+BMyIDmHwKnI+3ATsj\nsfHyZFXk/nAzOyTGeWbH5Zg2VMzsDuAxvFG9LnfOfRBwpJxa4C2zGWZ2aY7nTozcX2ZmHwE45y5I\nYLZo8roeQjjWw4K2KnKftG2TBCvk2wah4pybZ2Zf4h3mWJu9owCnumTcRguLpdl+Phbv1IUDUsfs\nwLKGjy1nZifEGP0qa8jihQnKlGdmNhBvBJ1f8T54Fx3gJYnm8JbD3I7BPSFyW5WIQHmwEC83REZn\njDLNkZH7MJy3dXzkPrdvzbNO5i3rc5b8+gpvr15JvPUtWuexNt7/JYzrYUe8bx6zOmVhHWrY4V3/\nKpbykVsYRhxdjrfXqDR717ecwrQeFrSkbpskWEmwbRBGWV8I/l+gKRIrGbfRwqJctp/zfG6iDmU8\ngMjw4fMjv7bO+XzkeOPj8Da4JiYw2gGZWX+gK94Hb2PnXOgaZ+dcWedc4Wg34KXIZL0ij50cZNYs\nzrmfgFmRX/c7RCpynbOGeB9o8xIYLZasjuOpZnZozicjeWtGfl2ZsFRxiAx5PgFvj0609fAEvMFN\nwDtsMzTM7DZgCN7hi5c75yYFHCkq59yZuayLD0YmGxl5LPAv9Zxzu4Hx5H6oYmO89fDTROVKlGRu\nmyRYybBtEDZmdiRQPfLr8iCzJFIybqOFSNbew9/xvlzOE3XM8uZhvMa/h5n9dY0kMysHDMVr+IeE\nabQeM3sIb8TArG/D9MFbsB7AWyb+bWZ1sx6MDKDwBN5ocL/jXRU+aJPwvukrCYyIXI8E+OvCzYPw\n9qrtJNzDJPfHW9famVnTrAcjQ8+PxPs8eysyAmUomNnNwDN4G8etwtopS2IP4y23N+c8/NLMuuFd\nu2833ud0Kkq6tkmCpW2D6MzsNDNrHe38MTM7BXgT72Ltc5xzXyQ8oISOmVU3s+Y5R982z41AP7zP\n4MGRLxLzNt+QXAM39MzsSbzrDu0CPsTb0L0Qb3jZWXgfcKG4IryZNccbDSbrYrxfxph0g3OuW8KC\nxcnMRgE3AD2dcw8HnScnM7sX6Iu34TcP+BFvz9OJeIfdtQrLIWtmdi3exSGLABvwvmnfiXeo0zF4\n7+F251xCRmaMbEQOY+8hcSfjHXb2HfseGtoisocy63X/wuv4gnc443q8i0pXAJYB9Z1zG8OQ2cyq\ns/cQsmXksvfUOdcu6LwHmFdvvBOZRzjnbinorJG/kd9log1ex7ww3ufdKrwRUU/F+7y+zTn3gh+Z\nwyCZ2qZEKsjlP1WkyraBHyIDX32Et/4swltOiuF9aVkT7wuQL4FLnHPfBZUzTMK+jeY3M/sH3hE6\nv+K19T8Bh+O1P8fjrWevATc45/bkdb6BH46SLJxzd5nZbKAj3jVyigLf4H1jOShkw8uWZW9jVJu9\n5xnktAoI+4dvaL85cM49bGbzgDuBunh1/hGvAzQwTHtunHOvmtlivKwN8IZGNuAH4GW8b9X3GxjE\nR2XwLmK8T0y8TuIx2X7f59tL59xgM1uCN3zxWXgj0q3Bq3n/GIOCBJX58GzTncreE6VzckCBd8zI\nZ41z4fB3fczvMvGSmX2Bd2H3+ngXnv4FeAN4PMHLdcIlWduUSAW9/KeCVNo2KGhfAPfifYacijdC\nbVG8gVGmAv8BXowcVi97hXYbLQE+B57EW4+q4J1OYXgdtLHAKBfnxaVBe8xEREREREQCp3PMRERE\nREREAqaOmYiIiIiISMDUMRMREREREQmYOmYiIiIiIiIBU8dMREREREQkYOqYiYiIiIiIBEwdMxER\nERERkYCpYyYiIiIiIhIwdcxEREREREQCpo6ZiIiIiIhIwNQxExERERERCZg6ZiIiIiIiIgFTx0xE\nRERERCRg6piJiIiIiIgETB0zERERERGRgKljJiIiIiIiErAiQQcQEf+Z2eFAb7x1vhIwFngNeBQw\n4Aign3NuaWAhRUQkrahtEtmXOmYiKc7MigJDgS7OuR/N7HhgJZAB3AmcAkwANgKdAwsqIiJpQ22T\nyP50KKNI6rsNeMY592Pk9z/xvolc6ZxbDRQGlgNjAsonIiLpR22TSA7aYyaS+jY452Zn+7125H4y\ngHNuctbPIiIiCaK2SSQH7TETSXHOuZzfNjYCdgKzo0wuIiLiO7VNIvsz51zQGUQkgcwsE9jhnDsn\n6CwiIiKgtkkEtMdMJK2Y2RFAdWB6jsdvDCSQiIikPbVNIh51zERSmJkdaWbzzKxv5KGL8db7edmn\nAfQNpYiIJITaJpHo1DETSW0N8U6o3mlmJYArgXVAaQAzOwR4CugTVEAREUk7aptEotA5ZiIpLNK4\nPQnswGvwHgHKAA8Dq4FiwEDn3P8CCykiImlFbZNIdOqYiYiIiIiIBEyHMoqIiIiIiARMHTMRERER\nEZGAqWMmIiIiIiISMHXMREREREREAqaOmYiIiIiISMDUMRMREREREQmYOmYiIiIiIiIBU8dMRERE\nREQkYOqYiYiIiIiIBEwdMxERERERkYCpYyYiIiIiIhIwdcxEREREREQCpo6ZiIiIiIhIwP4ftMr1\ns7Ps1oEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot the glider path\n", + "pyplot.figure(figsize=(10,6))\n", + "pyplot.subplot(121)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler[:idx_ground_euler], y_euler[:idx_ground_euler], 'k-', label='Euler')\n", + "pyplot.plot(x_rk2[:idx_ground_rk2], y_rk2[:idx_ground_rk2], 'r--', label='RK2')\n", + "pyplot.title('distance traveled: {:.3f}'.format(x_rk2[idx_ground_rk2-1]))\n", + "pyplot.legend();\n", + "\n", + "# Let's take a closer look!\n", + "pyplot.subplot(122)\n", + "pyplot.grid(True)\n", + "pyplot.xlabel('$x$')\n", + "pyplot.ylabel('$y$')\n", + "pyplot.plot(x_euler, y_euler, 'k-', label='Euler')\n", + "pyplot.plot(x_rk2, y_rk2, 'r--', label='RK2')\n", + "pyplot.xlim(0,5)\n", + "pyplot.ylim(1.8,2.5);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Convergence rates" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:24: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n" + ] + }, + { + "ename": "ValueError", + "evalue": "operands could not be broadcast together with shapes (15001,) (7501,) ", + "output_type": "error", + "traceback": [ + "\u001b[0;31m--------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 27\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt_values\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0mdiffgrid\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_diffgrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mu_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mu_values\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mget_diffgrid\u001b[0;34m(u_current, u_fine, dt)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mgrid_size_ratio\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mceil\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mN_fine\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mN_current\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0mdiffgrid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdt\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mabs\u001b[0m\u001b[0;34m(\u001b[0m \u001b[0mu_current\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m \u001b[0mu_fine\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mgrid_size_ratio\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdiffgrid\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: operands could not be broadcast together with shapes (15001,) (7501,) " + ] + } + ], + "source": [ + "diffgrid1=diffgrid\n", + "# use a for-loop to compute the solution on different grids\n", + "dt_values = numpy.array([0.1, 0.05, 0.01, 0.005, 0.001])\n", + "\n", + "u_values = numpy.empty_like(dt_values, dtype=numpy.ndarray)\n", + "\n", + "for i, dt in enumerate(dt_values):\n", + " \n", + " N = int(T/dt)+1 # number of time-steps\n", + " \n", + " ### discretize the time t ###\n", + " t = numpy.linspace(0.0, T, N)\n", + " \n", + " # initialize the array containing the solution for each time-step\n", + " u = numpy.empty((N, 4))\n", + " u[0] = numpy.array([v0, theta0, x0, y0])\n", + "\n", + " # time loop\n", + " for n in range(N-1):\n", + " u[n+1] = rk2_step(u[n], f, dt)\n", + " \n", + " # store the value of u related to one grid\n", + " u_values[i] = u\n", + "\n", + "# compute diffgrid\n", + "diffgrid = numpy.empty_like(dt_values)\n", + "for i, dt in enumerate(dt_values):\n", + "\n", + " diffgrid[i] = get_diffgrid(u_values[i], u_values[-1], dt)" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nC/0/o8Jji7c0W23ky8nJYdzQoXRr2ZKrmzalW8uWjBs6tOh2VGl+/PFHnvT34alRowajRo0KR7il\nUq65R7euRMqwaNEiOnXqVOY2bhQ6EhnUby6y5eTkcF3HjtydlUVaQQEGsMB76elct3Qp81avJikp\nqcR9f/rpJ0477TT+7//+jzvvvJNTTz01rLEfT7nmHhU6ImWoUaMGiYmJXochIiV4dPRo7s7K4opi\nfXAMcEVBATYri8fGjCGtlOUe2rdvz5dffsncuXPp1q1bmCIWL+hPURERiUqrFi6kRykdja8oKGDV\nggVl7p+QkECfPn1o0KCBG+FJhFChE8dK7LgXASI1rkAF0pH4u+++K+rM/OGHH1aqnYKCAl566SWu\nuuoqGjVqRPXq1alXrx5dunThueeeK3VK+xUrVuDz+UhISGDbtm3s3buXsWPH0rZtW2rXrh1UTLFm\n5cqVXocgpbDWUjMvj9J6shkgMS8vas4nyjX3qNCJM5XtuBevcVVGRToSV7bD8fbt27ngggv4y1/+\nwqJFi9ixYwdHjhxhz549fPjhhwwaNIhOnTqxe/fuMo+zZcsW2rZty4MPPsiGDRvYv3+/+hwV8/DD\nD3sdgpTCGENu1aqUVsZYILdq1ajp1K9cc4/OaHGksONex/R03v/2W97avp33v/2WjunpXNexo2dF\nRaTGFalycnLo0qUL69ato379+kyZMoUNGzawe/dutmzZwvTp06lTpw6ffPIJN954Y5nH6tevH7m5\nuUyfPp0tW7awa9culi9fzmmnnRambxPZ5syZ43UIUoaLmjThvVI+e9fno1NycljjCYZyzT3qjBxH\ngum4F49xARw8eJDc3Nwyt6lWrRpVq1YNU0QwduxYNm/eTKNGjfj4449p0qRJ0We1a9dmyJAhXHzx\nxfzhD39g2bJlvPnmm1xzzTUnHMday65du/j000/5/e9/X/R+eaPM4ok6okewt9/m7ytXch3O1Zsr\noGjU1bs+H1PbtGHexImehlgRyjX36IpOHCm34156OjRpcvTRtWv5B+3a9dh9jn9MmVL2/ps2serJ\nJ4PqUOimK6+8kqSkpDIfDz30UNjiOXDgADNnzsQYw4QJE44pcopr164dKSkpWGuZPXt2idsYYxg4\ncOAxRY5IVFi/HlJSSALmAZ/8z//QvUULejduTPcWLfhkyJAThpbv2bOn1H5rEtt0RSdOBNRxLz8f\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot using the matplotlib function loglog()\n", + "pyplot.figure(figsize=(6,6))\n", + "pyplot.grid(True)\n", + "pyplot.xlabel(r'$\\Delta t$', fontsize=18)\n", + "pyplot.ylabel(r'normalized $L_1$-norm', fontsize=18)\n", + "pyplot.xlim(1e-4,1)\n", + "pyplot.ylim(1e-4,1)\n", + "pyplot.axis('equal')\n", + "pyplot.loglog(dt_values[:-1], diffgrid[:-1]/max(diffgrid), color='k',\\\n", + " label='RK2',ls='--', lw=2, marker='o');\n", + "pyplot.loglog(dt_values[:-1], diffgrid1[:-1]/max(diffgrid1), color='r',\\\n", + " label='Euler',ls='--', lw=2, marker='o');\n", + "pyplot.legend(loc='upper left')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}