{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Adaptive Step Size Method\n", "\n", "Our goal is to implement the adaptive step size forward Euler method with the explicit trapezoidal method embedded in it for estimating the error. More explanation is in the lecture notes PDF. Here is the algorithm.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy.integrate\n", "import numpy.linalg\n", "import matplotlib.pyplot as plt\n", "\n", "def degradation_model( t, y, params ):\n", " y1 = y[0]\n", " y2 = y[1]\n", " dydt = np.zeros( (2,) )\n", " dydt[0] = -params[0] * y1\n", " dydt[1] = -params[1] * y2\n", " return dydt" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "def forwardEulerAdaptiveStepSize(f,t0,tFinal,y0,params,ETOL):\n", " \"\"\"\n", " Runge-Kutta Method of Order 1 (Forward Euler) embedded\n", " in Runge-Kutta Method of Order 2 (Trapezoidal)\n", " Performs Forward Euler method of integration\n", " for O.D.E's, using an error estimate (assuming an embedded order 2 method is \n", " the true solution) to control the step-size.\n", " [t,y,h] = forwardEulerAdaptiveStepSize(f,h,t0,tFinal,y0)\n", " f : function handle for f(t,y) = y'\n", " (where f has signature y = f(t,y,params) with\n", " t as a scalar\n", " y is a column vector with the same length as y0\n", " params is a vector with the parameters)\n", " t0 : initial time\n", " tFinal : final time\n", " y0 : initial conditions\n", " params : model parameters\n", " ETOL : maximum error tolerated. The step size will be chosen to guarantee \n", " that the estimated error is smaller than ETOL.\n", " Return values:\n", " t : the entire series of time steps \n", " y : the series of values of y at each time step\n", " (has dimensions length(y0) by length(t))\n", " steps : the set of step-sizes taken internally\n", " \"\"\"\n", " if tFinal <= t0:\n", " disp(['Error - the final time is before the initial time']);\n", " return;\n", " t = [t0];\n", " steps = [];\n", " h = (tFinal-t0)/100;\n", " # start with y as a list of nparrays.\n", " y = [np.array(y0)]; # list of 1st order solutions\n", " while t[-1] < tFinal:\n", " Yi = y[-1];\n", " YFE = Yi + h * f(t[0],Yi,params);\n", " YET = Yi + h/2 * f(t[-1],Yi,params) + h/2 * f(t[-1]+h,YFE,params);\n", " err = numpy.linalg.norm(YET-YFE,2);\n", " if err <= ETOL:\n", " # The step size was small enough. Record this\n", " # info and determine the next step size.\n", " t.append( t[-1] + h );\n", " steps.append( h );\n", " y.append( YFE )\n", " hnew = h * np.sqrt(0.9*ETOL/err);\n", " # Make sure h doesn't more than double\n", " if hnew >= 2*h:\n", " hnew = 2*h;\n", " h = hnew;\n", "\n", "\n", " t = np.array(t)\n", " y = np.array(y).T\n", " steps = np.array(steps)\n", " return (t,y,steps)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run and plot result from adaptive method.\n", "\n", "Run both the adaptive forward Euler method on the degradation model with degradation rates (2,5) and initial conditions (1,1) with time beginning at 0 and ending at 4. Use an error control (EST) of 1e-4.\n", "\n", "Then plot the true solution (solid lines) and the adaptive forward Euler's solution (dashed lines).\n", "\n", "Then plot the difference over time between the true solution and adaptive forward Euler's solution (dashed lines).\n", "\n", "Finally, plot the step size over time." ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "params = (2,5)\n", "y0 = np.array([1,1])\n", "(t,y,steps) = forwardEulerAdaptiveStepSize( degradation_model, 0, 4, y0, params, 1e-4)\n", "tru_y1 = y0[0]*np.exp(-params[0]*t)\n", "tru_y2 = y0[1]*np.exp(-params[1]*t)\n", "tru_y = np.vstack( ( tru_y1, tru_y2) )\n", "plt.figure( figsize = (8,4) )\n", "plt.subplot(3,1,1)\n", "plt.plot( t, y.T, '.-' );\n", "plt.subplot( 3, 1, 2 )\n", "plt.plot( steps, '*' );\n", "plt.subplot( 3, 1, 3)\n", "plt.plot( t, tru_y.T-y.T );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step Size vs Desired Estimated Error\n", "\n", "Determine which time steps are chosen, given the value of ETOL. Also, compare the ETOL to the actual error." ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# range from smallest timestep that doesn't take way too long to run to largest time step with qualitatively correct answer.\n", "ETOLs = np.array([1e-5,1e-4,1e-3,1e-2])\n", "act_err = np.zeros( (ETOLs.size,) )\n", "params = (2,5)\n", "y0 = np.array((1,1))\n", "t0 = 0\n", "tF = 4\n", "all_steps = []\n", "\n", "plt.figure(figsize=(8,4))\n", "for i in range(ETOLs.size):\n", " (t,y,steps) = forwardEulerAdaptiveStepSize( degradation_model, t0, tF, y0, params, ETOLs[i])\n", " all_steps.append( steps )\n", " sol = scipy.integrate.solve_ivp(fun=degradation_model, t_span=(t0, t[-1]), y0=y0, \n", " method='LSODA', rtol=1e-8, atol=1e-8, t_eval=t, args=[params] )\n", " plt.subplot( ETOLs.size, 1, i+1 )\n", " plt.plot( t, sol.y.T )\n", " plt.gca().set_prop_cycle(None) # this resets the color cycle\n", " plt.plot( t, y.T, '--')\n", " act_err[i] = np.mean(scipy.linalg.norm( sol.y-y, 2, axis=0) )\n", "plt.tight_layout()\n", " \n", "plt.figure()\n", "plt.subplot( 2, 1, 1 )\n", "legs = []\n", "for i in range(len(all_steps)):\n", " plt.plot( all_steps[i] )\n", " legs.append( \"ETOL = %0.1e\" % ETOLs[i])\n", "plt.legend( legs )\n", "plt.ylabel('Step size')\n", "plt.subplot( 2, 1, 2 )\n", "plt.loglog( ETOLs, act_err, '.-' );\n", "plt.xlabel( 'EST');\n", "plt.ylabel( 'Actual Error');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bonus Code\n", "### Examine step size changes over time\n", "\n", "Do we take lots of rejected steps?\n", "\n", "Examine each step size attempted. To do this, I have taken the code out of the function and added lists to keep even the rejected steps. Here, I use the degradation model." ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "f = lambda t, y, params: -params[0]*y[0]\n", "params = (5,)\n", "y0 = np.array([.01,])\n", "t0 = 0\n", "tFinal = 0.12\n", "h = 0.1\n", "ETOL = 1e-4\n", "t = [t0];\n", "steps = [];\n", "# start with y as a list of nparrays.\n", "y = [np.array(y0)]; # list of 1st order solutions\n", "attempted_t = [t0,[]]\n", "attempted_y = [np.array(y0),[]]\n", "while t[-1] < tFinal:\n", " Yi = y[-1];\n", " YFE = Yi + h * f(t[0],Yi,params);\n", " YET = Yi + h/2 * f(t[-1],Yi,params) + h/2 * f(t[-1]+h,YFE,params);\n", " attempted_t[-1].append( t[-1]+h )\n", " attempted_y[-1].append( YFE )\n", " err = numpy.linalg.norm(YET-YFE,2);\n", " hnew = h * np.sqrt(0.9*ETOL/err);\n", " # Make sure h doesn't more than double\n", " if hnew / h >= 2:\n", " hnew = 2*h;\n", " if err <= ETOL:\n", " # The step size was small enough. Record this\n", " # info and determine the next step size.\n", " t.append( t[-1] + h );\n", " steps.append( h );\n", " y.append( YFE )\n", " h = hnew;\n", " if t[-1] + h >= tFinal:\n", " # If we are going to step out of bounds, then\n", " # restrict the size of the last step.\n", " h = tFinal - t[-1];\n", " attempted_t.append( [] )\n", " attempted_y.append( [] )\n", " else:\n", " h = hnew;\n", "\n", "# The first step taken from any time point will be blue and the second orange.\n", "plt.subplot( 2, 1, 1 )\n", "for i in range(len(attempted_t)-1):\n", " plt.gca().set_prop_cycle(None) # this resets the color cycle\n", " for j in range(len(attempted_t[i+1])):\n", " plt.plot( [t[i], attempted_t[i+1][j]], [y[i], attempted_y[i+1][j]], '.-' )\n", "plt.ylabel( \"Y\")\n", "plt.subplot( 2, 1, 2 )\n", "for i in range(len(attempted_t)-1):\n", " plt.gca().set_prop_cycle(None) # this resets the color cycle\n", " for j in range(len(attempted_t[i+1])):\n", " plt.plot( t[i], attempted_t[i+1][j]-t[i], '.' )\n", "plt.xlabel( 'Time')\n", "plt.ylabel( \"Step Size Taken \\nfrom that Time\");\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate rejected steps for the Goodwin oscillator\n", "\n", "Here I repeat the code from above, but use it on the Goodwin oscillator." ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "\n", "def goodwin_oscillator( t, statevars, params ):\n", " X = statevars[0];\n", " Y = statevars[1];\n", " Z = statevars[2];\n", " alpha_1 = params[0]\n", " K = params[1]\n", " n = params[2]\n", " gamma_1 = params[3]\n", " alpha_2 = params[4]\n", " gamma_2 = params[5]\n", " alpha_3 = params[6]\n", " gamma_3 = params[7]\n", " \n", " dydt = np.zeros( (3,) )\n", " dydt[0] = alpha_1*K**n/(K**n+Z**n) - gamma_1*X\n", " dydt[1] = alpha_2*X - gamma_2*Y;\n", " dydt[2] = alpha_3*Y - gamma_3*Z;\n", "\n", " return dydt\n", "\n", "f = goodwin_oscillator\n", "alpha_1 = 1\n", "K = 0.61\n", "n = 11\n", "gamma_1 = 0.15\n", "alpha_2 = 1\n", "gamma_2 = 0.15\n", "alpha_3 = 1\n", "gamma_3 = 0.25\n", "params = (alpha_1,K,n,gamma_1,alpha_2,gamma_2,alpha_3,gamma_3)\n", "\n", "y0 = np.array([0.02051344, 0.27934056, 1.31619671])\n", "\n", "t0 = 0\n", "tFinal = 24\n", "h = 1\n", "ETOL = 1e-3\n", "t = [t0];\n", "steps = [];\n", "# start with y as a list of nparrays.\n", "y = [np.array(y0)]; # list of 1st order solutions\n", "attempted_t = [t0,[]]\n", "attempted_y = [np.array(y0),[]]\n", "while t[-1] < tFinal:\n", " Yi = y[-1];\n", " YFE = Yi + h * f(t[0],Yi,params);\n", " YET = Yi + h/2 * f(t[-1],Yi,params) + h/2 * f(t[-1]+h,YFE,params);\n", " attempted_t[-1].append( t[-1]+h )\n", " attempted_y[-1].append( YFE )\n", " err = numpy.linalg.norm(YET-YFE,2);\n", " hnew = h * np.sqrt(0.9*ETOL/err);\n", " # Make sure h doesn't more than double\n", " if hnew / h >= 2:\n", " hnew = 2*h;\n", " if err <= ETOL:\n", " # The step size was small enough. Record this\n", " # info and determine the next step size.\n", " t.append( t[-1] + h );\n", " steps.append( h );\n", " y.append( YFE )\n", " h = hnew;\n", " if t[-1] + h >= tFinal:\n", " # If we are going to step out of bounds, then\n", " # restrict the size of the last step.\n", " h = tFinal - t[-1];\n", " attempted_t.append( [] )\n", " attempted_y.append( [] )\n", " else:\n", " h = hnew;\n", "\n", "# The first step taken from any time point will be blue (X), orange (Y), or green (Z)\n", "# The second step taken will be red(X), purple (Y), or brown (Z)\n", "plt.subplot( 2, 1, 1 )\n", "for i in range(len(attempted_t)-1):\n", " plt.gca().set_prop_cycle(None) # this resets the color cycle\n", " for j in range(len(attempted_t[i+1])):\n", " plt.plot( [t[i], attempted_t[i+1][j]], [y[i], attempted_y[i+1][j]], '.-' )\n", "plt.ylabel( \"Y\")\n", "plt.subplot( 2, 1, 2 )\n", "for i in range(len(attempted_t)-1):\n", " plt.gca().set_prop_cycle(None) # this resets the color cycle\n", " for j in range(len(attempted_t[i+1])):\n", " plt.plot( t[i], attempted_t[i+1][j]-t[i], '.' )\n", "plt.xlabel( 'Time')\n", "plt.ylabel( \"Step Size Taken \\nfrom that Time\");\n", "plt.tight_layout()" ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }