{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerically solving differential equations with python\n", "\n", "*This is a brief description of what numerical integration is and a practical tutorial on how to do it in Python.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Software required\n", "\n", "*In order to run this notebook in your own computer, you need to install the following software:*\n", "\n", "* [python](http://python.org)\n", "* [numpy](http://numpy.org) and [scipy](http://scipy.org) - python scientific libraries\n", "* [matplotlib](http://matplotlib.org) - a library for plotting\n", "* the [ipython notebook](http://ipython.org/notebook.html) (now renamed to *Jupyter*)\n", "\n", "On Windows and Mac, we recommend installing the [Anaconda distribution](https://store.continuum.io/cshop/anaconda/), which includes all of the above in a single package (among several other libraries), available at http://continuum.io/downloads.\n", "\n", "On Linux, you can install everything using your distribution's prefered way, e.g.:\n", "\n", "* Debian/Ubuntu: `sudo apt-get install python-numpy python-scipy python-matplotlib python-ipython-notebook`\n", "* Fedora: `sudo yum install python-numpy python-scipy python-matplotlib python-ipython-notebook`\n", "* Arch: `sudo pacman -S python-numpy python-scipy python-matplotlib jupyter\n", "\n", "Code snippets shown here can also be copied into a pure text file with .py extension and ran outside the notebook (e.g., in an python or ipython shell).\n", "\n", "### From the web\n", "Alternatively, you can use a service that runs notebooks on the cloud, e.g. [SageMathCloud](https://cloud.sagemath.com/) or [wakari](https://www.wakari.io/). It is possible to visualize publicly-available notebooks using http://nbviewer.ipython.org, but no computation can be performed (it just shows saved pre-calculated results)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How numerical integration works\n", "\n", "Let's say we have a differential equation that we don't know how (or don't want) to derive its (analytical) solution. We can still find out what the solutions are through **numerical integration**. So, how dows that work?\n", "\n", "The idea is to approximate the solution at successive small time intervals, extrapolating the value of the derivative over each interval. For example, let's take the differential equation\n", "\n", "$$ \\frac{dx}{dt} = f(x) = x (1 - x) $$\n", "\n", "with an initial value $x_0 = 0.1$ at an initial time $t=0$ (that is, $x(0) = 0.1$). At $t=0$, the derivative $\\frac{dx}{dt}$ values $f(0.1) = 0.1 \\times (1-0.1) = 0.09$. We pick a small interval step, say, $\\Delta t = 0.5$, and assume that that value of the derivative is a good approximation over the whole interval from $t=0$ up to $t=0.5$. This means that in this time $x$ is going to increase by $\\frac{dx}{dt} \\times \\Delta t = 0.09 \\times 0.5 = 0.045$. So our approximate solution for $x$ at $t=0.5$ is $x(0) + 0.045 = 0.145$. We can then use this value of $x(0.5)$ to calculate the next point in time, $t=1$. We calculate the derivative at each step, multiply by the time step and add to the previous value of the solution, as in the table below:\n", "\n", "| $t$ | $x$ | $\\frac{dx}{dt}$ |\n", "| ---:|---------:|----------:|\n", "| 0 | 0.1 | 0.09 |\n", "| 0.5 | 0.145 | 0.123975 |\n", "| 1.0 | 0.206987 | 0.164144 |\n", "| 1.5 | 0.289059 | 0.205504 |\n", "| 2.0 | 0.391811 | 0.238295 |\n", "\n", "Of course, this is terribly tedious to do by hand, so we can write a simple program to do it and plot the solution. Below we compare it to the known analytical solution of this differential equation (the *logistic equation*). **Don't worry about the code just yet**: there are better and simpler ways to do it!" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from numpy import *\n", "from matplotlib.pyplot import *\n", "\n", "# time intervals\n", "tt = arange(0, 10, 0.5)\n", "# initial condition\n", "xx = [0.1]\n", "\n", "def f(x):\n", " return x * (1.-x)\n", "\n", "# loop over time\n", "for t in tt[1:]:\n", " xx.append(xx[-1] + 0.5 * f(xx[-1]))\n", "\n", "# plotting\n", "plot(tt, xx, '.-')\n", "ta = arange(0, 10, 0.01)\n", "plot(ta, 0.1 * exp(ta)/(1+0.1*(exp(ta)-1.)))\n", "xlabel('t')\n", "ylabel('x')\n", "legend(['approximation', 'analytical solution'], loc='best',)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Why use scientific libraries?\n", "\n", "The method we just used above is called the *Euler method*, and is the simplest one available. The problem is that, although it works reasonably well for the differential equation above, in many cases it doesn't perform very well. There are many ways to improve it: in fact, there are many books entirely dedicated to this. Although many math or physics students do learn how to implement more sophisticated methods, the topic is really deep. Luckily, we can rely on the expertise of lots of people to come up with good algorithms that work well in most situations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Then, how... ?\n", "\n", "We are going to demonstrate how to use scientific libraries to integrate differential equations. Although the specific commands depend on the software, the general procedure is usually the same:\n", "\n", "* define the derivative function (the right hand side of the differential equation)\n", "* choose a time step or a sequence of times where you want the solution\n", "* provide the parameters and the initial condition\n", "* pass the function, time sequence, parameters and initial conditions to a computer routine that runs the integration.\n", "\n", "### A single equation\n", "\n", "So, let's start with the same equation as above, the logistic equation, now with any parameters for growth rate and carrying capacity:\n", "\n", "$$ \\frac{dx}{dt} = f(x) = r x \\left(1 - \\frac{x}{K} \\right) $$\n", "\n", "with $r=2$, $K=10$ and $x(0) = 0.1$. We show how to integrate it using python below, introducing key language syntax as necessary." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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2/+X7iVryez1IC0TO7uOIwFOpR+aavt9V/E7lP39Onpl/oPVUeeRNlo3WRER/1DxO1JSXETBzDsoNeG0vvUljEffCpG6ctlll3Hw4MGzXs6qVav46KOPqh6/9957PPnkk2e9XNfUNo6seHkiKWUb+X7AX2jRtmYHZERCUVlZWa1f89FHH9GkSZOzXvfxxT9q1CgeeCDwb4qks3ocWPHpawzc8xZLE65j4MjbXceRIPTH99ezYecJt7k4K93aNObRK7ufdr7Ro0ezY8cOioqKmDRpEhMmTKBRo0b86le/Yv78+TRt2pSZM2eSkJDAsGHD6N27N99++y15eXlMnTqV/v3789hjj7Fz506ysrKIj4/nr3/9K3fccQe5ubkkJCQwbdo04uLi6N+/P++99x4pKSmMHTuW4cOHM378eJKSkkhPTyc/P58RI0YwZMgQli5dSq9evbj99tt59NFH2bNnDzNmzKB///58++233HfffRQWFhIdHc20adPo2LEjjzzyCIWFhSxatIgHH3yQwsJC0tPTeeGFF9i2bdsJmdq3b8+4ceNo3Lgx6enp5OTk8NRTT3HttdfW6ffibGmL38+2Za7gnCX3syn8XPre+YLrOCJ1burUqSxfvpz09HSef/559u3bR0FBAX379mXFihVceOGF/PGPf6yav6CggMWLF/Ovf/2LO+64o2r68uXLmTt3Lm+88Qb33HMPv/jFL1izZg0333wzEydOJC4ujhdeeIFx48Yxc+ZMDhw4wPjx40/I8/333zNp0iTWrFlDZmYmb7zxBosWLeLpp5/mL3/5CwBdunRh4cKFrFy5kscff5yHHnqIyMhIHn/8cW644QZWrVrFDTfccMxyq8v0k127drFo0SI++OCDevkXgrb4/Wjf7mwi3rqRUiKIvfV1InWhlvhITbbMfeX5559nzpw5AOzYsYPNmzfj8XiqivOWW25hzJgxVfOPHTsWgKFDh5KXl1e1b37UqFFER0cDsGTJEmbPrrhn06233sr9998PwCWXXMI777zD3XffzerVq6vN07FjR3r27AlA9+7dufjiizHG0LNnT7KysgA4dOgQt912G5s3b8YYQ2lp6Wnf58kyQcVfPR6Ph27durF79+7Tf9H8TFv8flJ0JJ+9L11DU+8B9o16ldYdUlxHEqlzCxYs4IsvvmDJkiWsXr2aPn36VHt++dGn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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# everything after a '#' is a comment\n", "\n", "## we begin importing libraries we are going to use\n", "# import all (*) functions from numpy library, eg array, arange etc.\n", "from numpy import *\n", "# import all (*) interactive plotting functions, eg plot, xlabel etc.\n", "from matplotlib.pyplot import *\n", "# import the numerical integrator we will use, odeint()\n", "from scipy.integrate import odeint\n", "\n", "# time steps: an array of values starting from 0 going up to (but\n", "# excluding) 10, in steps of 0.01\n", "t = arange(0, 10., 0.01)\n", "# parameters\n", "r = 2.\n", "K = 10.\n", "# initial condition\n", "x0 = 0.1\n", "\n", "# let's define the right-hand side of the differential equation\n", "# It must be a function of the dependent variable (x) and of the \n", "# time (t), even if time does not appear explicitly\n", "# this is how you define a function:\n", "def f(x, t, r, K):\n", " # in python, there are no curling braces '{}' to start or \n", " # end a function, nor any special keyword: the block is defined\n", " # by leading spaces (usually 4)\n", " # arithmetic is done the same as in other languages: + - * /\n", " return r*x*(1-x/K)\n", "\n", "# call the function that performs the integration\n", "# the order of the arguments is as below: the derivative function,\n", "# the initial condition, the points where we want the solution, and\n", "# a list of parameters\n", "x = odeint(f, x0, t, (r, K))\n", "\n", "# plot the solution\n", "plot(t, x)\n", "xlabel('t') # define label of x-axis\n", "ylabel('x') # and of y-axis\n", "\n", "# plot analytical solution\n", "# notice that `t` is an array: when you do any arithmetical operation\n", "# with an array, it is the same as doing it for each element\n", "plot(t, K * x0 * exp(r*t)/(K+x0*(exp(r*t)-1.)))\n", "legend(['approximation', 'analytical solution'], loc='best') # draw legend" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get a much better approximation now, the two curves superimpose each other!\n", "\n", "Now, what if we wanted to integrate a system of differential equations? Let's take the Lotka-Volterra equations:\n", "\n", "$$ \\begin{aligned}\n", "\\frac{dV}{dt} &= r V - c V P\\\\\n", "\\frac{dP}{dt} &= ec V P - dP\n", "\\end{aligned}$$\n", "\n", "In this case, the variable is no longer a number, but an array `[V, P]`. We do the same as before, but now `x` is going to be an array:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape of x: (5000, 2)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# we didn't need to do this again: if the cell above was run already,\n", "# the libraries are imported, but we repeat it here for convenience\n", "from numpy import *\n", "from matplotlib.pyplot import *\n", "from scipy.integrate import odeint\n", "\n", "t = arange(0, 50., 0.01)\n", "\n", "# parameters\n", "r = 2.\n", "c = 0.5\n", "e = 0.1\n", "d = 1.\n", "\n", "# initial condition: this is an array now!\n", "x0 = array([1., 3.])\n", "\n", "# the function still receives only `x`, but it will be an array, not a number\n", "def LV(x, t, r, c, e, d):\n", " # in python, arrays are numbered from 0, so the first element \n", " # is x[0], the second is x[1]. The square brackets `[ ]` define a\n", " # list, that is converted to an array using the function `array()`.\n", " # Notice that the first entry corresponds to dV/dt and the second to dP/dt\n", " return array([ r*x[0] - c * x[0] * x[1],\n", " e * c * x[0] * x[1] - d * x[1] ])\n", "\n", "# call the function that performs the integration\n", "# the order of the arguments is as below: the derivative function,\n", "# the initial condition, the points where we want the solution, and\n", "# a list of parameters\n", "x = odeint(LV, x0, t, (r, c, e, d))\n", "\n", "# Now `x` is a 2-dimension array of size 5000 x 2 (5000 time steps by 2\n", "# variables). We can check it like this:\n", "print('shape of x:', x.shape)\n", "\n", "# plot the solution\n", "plot(t, x)\n", "xlabel('t') # define label of x-axis\n", "ylabel('populations') # and of y-axis\n", "legend(['V', 'P'], loc='upper right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An interesting thing to do here is take a look at the *phase space*, that is, plot only the dependent variables, without respect to time:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial condition: [1. 3.]\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# `x[0,0]` is the first value (1st line, 1st column), `x[0,1]` is the value of \n", "# the 1st line, 2nd column, which corresponds to the value of P at the initial\n", "# time. We plot just this point first to know where we started:\n", "plot(x[0,0], x[0,1], 'o')\n", "print('Initial condition:', x[0])\n", "\n", "# `x[0]` or (equivalently) x[0,:] is the first line, and `x[:,0]` is the first\n", "# column. Notice the colon `:` stands for all the values of that axis. We are\n", "# going to plot the second column (P) against the first (V):\n", "plot(x[:,0], x[:,1])\n", "xlabel('V')\n", "ylabel('P')\n", "\n", "# Let's calculate and plot another solution with a different initial condition\n", "x2 = odeint(LV, [10., 4.], t, (r, c, e, d))\n", "plot(x2[:,0], x2[:,1])\n", "plot(x2[0,0], x2[0,1], 'o')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Congratulations**: you are now ready to integrate any system of differential equations! (We hope generalizing the above to more than 2 equations won't be very challenging)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring parameters with a simple interface\n", "\n", "\n", "IPython’s widgets allow to create user interface (UI) controls for exploring your code interactively. To use this resource you have to run the code below in a computer with all the software required (see first section), plus the library [ipywidgets](http://ipywidgets.readthedocs.io/en/latest/index.html).\n", "\n", "\n", "The [interact](http://ipywidgets.readthedocs.io/en/latest/examples/Using%20Interact.html) function provides a quick way to use widgets to explore the parameter space of ODEs. To do this, first create a new function that integrate your ODEs and return a plot. The argumnts of this functions should be the parameters that you want to explore.\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def LV_plot(r=2, c=0.5, e=0.5, d=1):\n", " # Time range\n", " t = arange(0, 50., 0.01)\n", " # Initial conditions\n", " x0 = array([1., 3.])\n", " # The function to be integrated\n", " def LV(x, t, r, c, e, d):\n", " return array([ r*x[0] - c * x[0] * x[1],\n", " e * c * x[0] * x[1] - d * x[1] ])\n", " #integrating\n", " y = odeint(LV, x0, t, (r, c, e, d))\n", " # ploting: use the function show\n", " show(plot(t, y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now call your the function you created above within interact. The arguments for the sliders that set each parameter of the equations are (min, max, step). " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "try:\n", " import piplite\n", " await piplite.install(['ipywidgets'])\n", "except ImportError:\n", " pass\n", "#Libraries to use interact\n", "from __future__ import print_function\n", "from ipywidgets import interact, interactive, fixed\n", "import ipywidgets as widgets\n", "\n", "#Now call the function to be integrated within interact\n", "interact(LV_plot, r=(0,5.,0.1), c = (0,1,0.1), e = (0,1,0.1), d = (0,5, 0.1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are reading this notebook in [nbviewer](http://nbviewer.jupyter.org/) only static images of the sliders will show up. To have the sliders working you have to run the code above in a computer with the required software installed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### For more info:\n", "\n", "* [Python tutorial](http://docs.python.org/3/tutorial/index.html) (chapters 3 to 5 are specially useful).\n", "* [An introduction to Numpy](http://nbviewer.ipython.org/github/iguananaut/notebooks/blob/master/numpy.ipynb)\n", "* [Another one](http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-2-Numpy.ipynb), covering a little bit more ground.\n", "* [The matplotlib gallery](http://matplotlib.org/gallery.html): all kinds of plots, with sample code to use.\n", "* [Outro tutorial sobre integração numérica em Python, do Blog de Wendell Barreto](https://arodadavida.wordpress.com/2015/05/01/estabilidade-e-equilibrio-em-modelos-de-duas-especies/)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.5" }, "widgets": { "state": { "3fbca79423d847b59a354d82da1a56d6": { "views": [ { "cell_index": 15 } ] } }, "version": "1.2.0" } }, "nbformat": 4, "nbformat_minor": 4 }