{ "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 Jupyter Notebook of the series _\"The phugoid model of glider flight\"_, the first learning module of the course [**\"Practical Numerical Methods with Python.\"**](https://openedx.seas.gwu.edu/courses/course-v1:MAE+MAE6286+2017/info)\n", "\n", "In the [first notebook](https://nbviewer.jupyter.org/github/numerical-mooc/numerical-mooc/blob/master/lessons/01_phugoid/01_01_Phugoid_Theory.ipynb), _\"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", "$$\n", "\\begin{equation}\n", "L - W = - \\frac{W}{g}\\frac{d^2 z}{dt^2}\n", "\\end{equation}\n", "$$\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", "$$\n", "\\begin{equation}\n", "\\frac{L}{W}=\\frac{v^2}{v_t^2}\n", "\\end{equation}\n", "$$\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", "$$\n", "\\begin{equation}\n", "\\frac{d^2z}{dt^2} + \\frac{gz}{z_t} = g\n", "\\end{equation}\n", "$$" ] }, { "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", "$$\n", "\\begin{equation}\n", " \\frac{d^2 x}{dt^2}= -\\frac{k}{m}x\n", "\\end{equation}\n", "$$\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 perturbation. 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", "$$\n", "\\begin{equation}\n", "z(t)'' + \\frac{g \\,z(t)}{z_t}=g\n", "\\end{equation}\n", "$$\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", "$$\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", "\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", "$$\n", "\\begin{equation}\n", "\\vec{u} = \\begin{pmatrix} z \\\\ b \\end{pmatrix}\n", "\\end{equation}\n", "$$\n", "\n", "and write the differential system as a single vector equation:\n", "\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", "\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", "$$\n", "u(t=0)=u_0\n", "$$\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", "$$\n", "u'(t) = \\lim_{\\Delta t\\rightarrow 0} \\frac{u(t+\\Delta t)-u(t)}{\\Delta t}\n", "$$\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", "$$\n", "\\begin{equation}\n", "u(t+\\Delta t) \\approx u(t) + u'(t) \\Delta t\n", "\\end{equation}\n", "$$\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 Jupyter Notebook to show the plots inline." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "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": {}, "outputs": [], "source": [ "# Create the time grid.\n", "T = 100.0 # length of the time-interval\n", "dt = 0.02 # time-step size\n", "N = int(T / dt) + 1 # number of time steps\n", "t = numpy.linspace(0.0, T, num=N) # time grid" ] }, { "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", "$$\n", "\\begin{equation}\n", "u_{n+1} = u_n + \\Delta t \\,f(u_n)\n", "\\end{equation}\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", "$$\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}\n", "$$" ] }, { "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": {}, "outputs": [], "source": [ "# Set the initial conditions.\n", "z0 = 100.0 # altitude\n", "b0 = 10.0 # upward velocity resulting from gust\n", "zt = 100.0 # trim altitude\n", "g = 9.81 # acceleration due to gravity\n", "\n", "# Set the initial value of the numerical solution.\n", "u = numpy.array([z0, b0])\n", "\n", "# Create an array to store the elevation value at each time step.\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": {}, "outputs": [], "source": [ "# Temporal integration using Euler's method.\n", "for n in range(1, N):\n", " rhs = numpy.array([u[1], g * (1 - u[0] / zt)])\n", " u = u + dt * rhs\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](https://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": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Set the font family and size to use for Matplotlib figures.\n", "pyplot.rcParams['font.family'] = 'serif'\n", "pyplot.rcParams['font.size'] = 16\n", "\n", "# Plot the solution of the elevation.\n", "pyplot.figure(figsize=(9.0, 4.0)) # set the size of the figure\n", "pyplot.title('Elevation of the phugoid over the time') # set the title\n", "pyplot.xlabel('Time [s]') # set the x-axis label\n", "pyplot.ylabel('Elevation [m]') # set the y-axis label\n", "pyplot.xlim(t[0], t[-1]) # set the x-axis limits\n", "pyplot.ylim(40.0, 160.0) # set the y-axis limits\n", "pyplot.grid() # set a background grid to improve readability\n", "pyplot.plot(t, z, color='C0', linestyle='-', linewidth=2);" ] }, { "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", "$$\n", "\\begin{eqnarray}\n", "z(0) = z_0 \\\\\n", "b(0) = b_0\n", "\\end{eqnarray}\n", "$$\n", "\n", "Applying these to the exact solution and solving for $A$ and $B$, we get:\n", "\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}\n", "$$" ] }, { "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 cast the value of the variable between parenthesis and insert line breaks and Python will treat the next line as a continuation of the first." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "z_exact = (b0 * (zt / g)**0.5 * numpy.sin((g / zt)**0.5 * t) +\n", " (z0 - zt) * numpy.cos((g / zt)**0.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 add a legend using `pyplot.legend()`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the numerical solution and the exact solution.\n", "pyplot.figure(figsize=(9.0, 4.0)) # set the size of the figure\n", "pyplot.title('Elevation of the phugoid over the time') # set the title\n", "pyplot.xlabel('Time [s]') # set the x-axis label\n", "pyplot.ylabel('Elevation [m]') # set the y-axis label\n", "pyplot.xlim(t[0], t[-1]) # set the x-axis limits\n", "pyplot.ylim(40.0, 160.0) # set the y-axis limits\n", "pyplot.grid() # set a background grid to improve readability\n", "pyplot.plot(t, z, label='Numerical',\n", " color='C0', linestyle='-', linewidth=2)\n", "pyplot.plot(t, z_exact, label='Analytical',\n", " color='C1', linestyle='-', linewidth=2)\n", "pyplot.legend(); # set the legend" ] }, { "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 time step, 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", "$$\n", "E = \\Delta t \\sum_{n=0}^N \\left|z(t_n) - z_n\\right|\n", "$$\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", "$$\n", "E = \\int \\vert z-z_\\rm{exact}\\vert dt\n", "$$\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." ] }, { "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": {}, "outputs": [], "source": [ "# Set the list of time-step sizes.\n", "dt_values = [0.1, 0.05, 0.01, 0.005, 0.001, 0.0001]\n", "\n", "# Create an empty list that will contain the solution of each grid.\n", "z_values = []\n", "\n", "for dt in dt_values:\n", " N = int(T / dt) + 1 # number of time-steps\n", " t = numpy.linspace(0.0, T, num=N) # time grid\n", " # Set the initial conditions.\n", " u = numpy.array([z0, b0])\n", " z = numpy.empty_like(t)\n", " z[0] = z0\n", " # Temporal integration using Euler's method.\n", " for n in range(1, N):\n", " rhs = numpy.array([u[1], g * (1 - u[0] / zt)])\n", " u = u + dt * rhs\n", " z[n] = u[0] # store the elevation at time-step n+1\n", " z_values.append(z) # store the elevation over the time" ] }, { "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": {}, "outputs": [], "source": [ "def l1_error(z, z_exact, dt):\n", " \"\"\"\n", " Computes and returns the error\n", " (between the numerical and exact solutions)\n", " in the L1 norm.\n", " \n", " Parameters\n", " ----------\n", " z : numpy.ndarray\n", " The numerical solution as an array of floats.\n", " z_exact : numpy.ndarray\n", " The analytical solution as an array of floats.\n", " dt : float\n", " The time-step size.\n", " \n", " Returns\n", " -------\n", " error: float\n", " L1-norm of the error with respect to the exact solution.\n", " \"\"\"\n", " error = dt * numpy.sum(numpy.abs(z - z_exact))\n", " return error" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note**: in the first 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": {}, "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.\n", "In the following code cell, we use the built-in function [`zip`](https://docs.python.org/3/library/functions.html#zip) to iterate over the two lists `z_values` and `dt_values`." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Create an empty list to store the errors on each time grid.\n", "error_values = []\n", "\n", "for z, dt in zip(z_values, dt_values):\n", " N = int(T / dt) + 1 # number of time-steps\n", " t = numpy.linspace(0.0, T, num=N) # time grid\n", " # Compute the exact solution.\n", " z_exact = (b0 * (zt / g)**0.5 * numpy.sin((g / zt)**0.5 * t) +\n", " (z0 - zt) * numpy.cos((g / zt)**0.5 * t) + zt)\n", " # Calculate the L1-norm of the error for the present time grid.\n", " error_values.append(l1_error(z, z_exact, 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": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the error versus the time-step size.\n", "pyplot.figure(figsize=(6.0, 6.0))\n", "pyplot.title('L1-norm error vs. time-step size') # set the title\n", "pyplot.xlabel('$\\Delta t$') # set the x-axis label\n", "pyplot.ylabel('Error') # set the y-axis label\n", "pyplot.grid()\n", "pyplot.loglog(dt_values, error_values,\n", " color='C0', linestyle='--', marker='o') # 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 solution for several different time-step sizes using two nested `for` loops.\n", "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 code cell that computes the solution for different time-step sizes using 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": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\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 3 (MOOC)", "language": "python", "name": "py36-mooc" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.6" } }, "nbformat": 4, "nbformat_minor": 1 }