{
 "metadata": {
  "name": "",
  "signature": "sha256:5e192df9871207038abee233a20599d6b9f17927b6caddc60e7a2cefc2595873"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The following is part of my notes on scientific computing with python:\n",
      "* [Lecture 0 - Scientific Computing with Python](http://nbviewer.ipython.org/github/diego898/scientific-python/blob/master/Lecture%200%20-%20Scientific%20Computing%20with%20Python.ipynb)\n",
      "* [Lecture 1 - NumPy](http://nbviewer.ipython.org/github/diego898/scientific-python/blob/master/Lecture%201%20-%20NumPy.ipynb)\n",
      "* [Lecture 2 - SciPy](http://nbviewer.ipython.org/github/diego898/scientific-python/blob/master/Lecture%202%20-%20SciPy.ipynb)\n",
      "* [Lecture 3 - Matplotlib](http://nbviewer.ipython.org/github/diego898/scientific-python/blob/master/Lecture%203%20-%20Matplotlib.ipynb)"
     ]
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Notebook Setup"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# load numpy\n",
      "import numpy as np\n",
      "\n",
      "# load scipy\n",
      "import scipy as sp\n",
      "\n",
      "# load data visualization\n",
      "import matplotlib.pyplot as plt  # the tidy way \n",
      "\n",
      "# allows embedding of plots in the notebook\n",
      "%matplotlib inline \n",
      "\n",
      "# load image processing\n",
      "from IPython.display import Image"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Scipy"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The `scipy` package contains various toolboxes dedicated to common issues in scientific computing. Its different submodules correspond to different applications, such as:\n",
      "* interpolation\n",
      "* integration\n",
      "* optimization\n",
      "* image processing\n",
      "* statistics\n",
      "* special functions\n",
      "* etc.\n",
      "\n",
      "`scipy` can be compared to other standard scientific-computing libraries, such as the `GSL` (GNU Scientific Library for C and C++), or Matlab\u2019s toolboxes. `scipy` is the **core** package for scientific routines in Python; it is meant to operate efficiently on numpy arrays, so that **`numpy` and `scipy` work hand in hand.**\n",
      "\n",
      "Before implementing a routine, it is worth checking if the desired data processing is not already implemented in Scipy. As non-professional programmers, scientists often tend to re-invent the wheel, which leads to buggy, non-optimal, difficult-to-share and unmaintainable code. By contrast, Scipy\u2018s routines are optimized and tested, and should therefore be used when possible.\n",
      "\n",
      "\n",
      "`scipy` is composed of task-specific sub-modules:\n",
      "\n",
      "| Package             | Function                               |\n",
      "| ------------------- | -------------------------------------- |\n",
      "| `scipy.cluster`     | Vector quantization / Kmeans           |\n",
      "| `scipy.constants`   | Physical and mathematical constants    |\n",
      "| `scipy.fftpack`     | Fourier transform                      |\n",
      "| `scipy.integrate`   | Integration routines                   |\n",
      "| `scipy.interpolate` | Interpolation                          |\n",
      "| `scipy.io`          | Data input and output                  |\n",
      "| `scipy.linalg`      | Linear algebra routines                |\n",
      "| `scipy.ndimage`     | n-dimensional image package            |\n",
      "| `scipy.odr`         | Orthogonal distance regression         |\n",
      "| `scipy.optimize`    | Optimization                           |\n",
      "| `scipy.signal`      | Signal processing                      |\n",
      "| `scipy.sparse`      | Sparse matrices                        |\n",
      "| `scipy.spatial`     | Spatial data structures and algorithms |\n",
      "| `scipy.special`     | Any special mathematical functions     |\n",
      "| `scipy.stats`       | Statistics                             |\n",
      "\n",
      "They all depend on `numpy`, but are mostly independent of each other. The standard way of importing Numpy and these Scipy modules is:\n",
      "\n",
      "```python\n",
      "import numpy as np\n",
      "from scipy import stats  # same for other sub-modules\n",
      "```\n",
      "\n",
      "The main `scipy` namespace mostly contains functions that are really `numpy` functions (try `scipy.cos` - its really `np.cos`). Those are exposed for historical reasons only; there\u2019s usually no reason to use `import scipy` in your code: instead use the `from scipy` notation."
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "File I/O: `scipy.io`"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# loading and saving matlab files\n",
      "from scipy import io as spio # name it whatever you want\n",
      "a = np.ones((3,3))\n",
      "#spio.savemat('file.mat', {'a' : a}) # savemat expects a dictionary\n",
      "#data = spio.loadmat('file.mat', struct_as_record=True)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 163
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# scipy.misc\n",
      "from scipy import misc as spimisc\n",
      "#spimisc.imread('image.png')\n",
      "#plt.imread('image.png') # matplotlib also has a similar function"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 164
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Special Functions: `scipy.special`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "A large number of mathematical special functions are important for many computional physics problems. SciPy provides implementations of a very extensive set of special functions. For details, see the list of functions in the reference documention at http://docs.scipy.org/doc/scipy/reference/special.html#module-scipy.special. The docstring of the `scipy.special` module is also very well-written, so we won\u2019t list all functions here. Frequently used ones are:\n",
      "\n",
      "* Bessel function, such as `scipy.special.jn()` (nth integer order Bessel function)\n",
      "* Elliptic function (`scipy.special.ellipj()` for the Jacobian elliptic function, ...)\n",
      "* Gamma function: `scipy.special.gamma()`, also note `scipy.special.gammaln(` which will give the log of Gamma to a higher numerical precision.\n",
      "* Erf, the area under a Gaussian curve: `scipy.special.erf()`\n",
      "\n",
      "To demonstrate the typical usage of special functions we will look in more detail at the Bessel functions:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import special as spec\n",
      "# from scipy.special import jn, yn, jn_zeros, yn_zeros # could also just import specific functions"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 60
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# The scipy.special module includes a large number of Bessel-functions\n",
      "# Here we will use the functions jn and yn, which are the Bessel functions \n",
      "# of the first and second kind and real-valued order. We also include the \n",
      "# function jn_zeros and yn_zeros that gives the zeroes of the functions jn\n",
      "# and yn.\n",
      "\n",
      "n = 0    # order\n",
      "x = 0.0\n",
      "\n",
      "# Bessel function of first kind\n",
      "print \"J_%d(%f) = %f\" % (n, x, spec.jn(n, x))\n",
      "\n",
      "x = 1.0\n",
      "# Bessel function of second kind\n",
      "print \"Y_%d(%f) = %f\" % (n, x, spec.yn(n, x))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "J_0(0.000000) = 1.000000\n",
        "Y_0(1.000000) = 0.088257\n"
       ]
      }
     ],
     "prompt_number": 61
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "x = linspace(0, 10, 100)\n",
      "\n",
      "fig, ax = plt.subplots()\n",
      "for n in range(4):\n",
      "    ax.plot(x, spec.jn(n, x), label=r\"$J_%d(x)$\" % n)\n",
      "ax.legend();"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n36jpqgAAAABJRU5ErkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x6442128>"
       ]
      }
     ],
     "prompt_number": 63
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# zeros of Bessel functions\n",
      "n = 0 # order\n",
      "m = 4 # number of roots to compute\n",
      "spec.jn_zeros(n, m)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 65,
       "text": [
        "array([  2.40482556,   5.52007811,   8.65372791,  11.79153444])"
       ]
      }
     ],
     "prompt_number": 65
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scispec?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 181
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Linear Algebra: `scipy.linalg`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The `scipy.linalg` module provides standard linear algebra operations, relying on an underlying efficient implementation (BLAS, LAPACK). It contains a lot of matrix related functions, including linear equation solving, eigenvalue solvers, matrix functions (for example matrix-exponentiation), a number of different decompositions (SVD, LU, cholesky), etc. \n",
      "\n",
      "Detailed documetation is available at: http://docs.scipy.org/doc/scipy/reference/linalg.html\n",
      "\n",
      "Here we will look at how to use some of these functions:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import linalg as lnal"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 128
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Linear Equation Systems"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Linear equation systems on the matrix form\n",
      "\n",
      "$A x = b$\n",
      "\n",
      "where $A$ is a matrix and $x,b$ are vectors can be solved like:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A = array([[1,2,3], [4,5,6], [7,8,9]])\n",
      "b = array([1,2,3])\n",
      "x = lnal.solve(A, b)\n",
      "x"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 129,
       "text": [
        "array([-0.33333333,  0.66666667,  0.        ])"
       ]
      }
     ],
     "prompt_number": 129
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# check\n",
      "np.dot(A, x) - b"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 131,
       "text": [
        "array([  0.00000000e+00,  -2.22044605e-16,   0.00000000e+00])"
       ]
      }
     ],
     "prompt_number": 131
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can also do the same with\n",
      "\n",
      "$A X = B$\n",
      "\n",
      "where $A, B, X$ are matrices:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A = rand(3,3)\n",
      "B = rand(3,3)\n",
      "X = lnal.solve(A, B)\n",
      "X"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 132,
       "text": [
        "array([[-0.24793038,  2.12003048, -1.18210657],\n",
        "       [ 0.32383755, -1.86063   ,  2.05391593],\n",
        "       [ 0.15140203,  1.80755783,  0.0934813 ]])"
       ]
      }
     ],
     "prompt_number": 132
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# check\n",
      "lnal.norm(np.dot(A, X) - B)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 135,
       "text": [
        "3.3450938666784586e-16"
       ]
      }
     ],
     "prompt_number": 135
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Eigenvalues and Eigenvectors"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The eigenvalue problem for a matrix $A$:\n",
      "\n",
      "$\\displaystyle A v_n = \\lambda_n v_n$\n",
      "\n",
      "where $v_n$ is the $n$th eigenvector and $\\lambda_n$ is the $n$th eigenvalue.\n",
      "\n",
      "To calculate eigenvalues of a matrix, use the `eigvals` and for calculating both eigenvalues and eigenvectors, use the function `eig`:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "evals = lnal.eigvals(A)\n",
      "evals"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 137,
       "text": [
        "array([ 1.34326185+0.j, -0.08925560+0.j,  0.43108031+0.j])"
       ]
      }
     ],
     "prompt_number": 137
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "evals, evecs = lnal.eig(A)\n",
      "evals"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 136,
       "text": [
        "array([ 1.34326185+0.j, -0.08925560+0.j,  0.43108031+0.j])"
       ]
      }
     ],
     "prompt_number": 136
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "evecs"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 138,
       "text": [
        "array([[  6.10823424e-01,   7.55812455e-01,  -3.37148378e-04],\n",
        "       [  7.81863685e-01,  -6.54297626e-01,  -6.07161749e-01],\n",
        "       [  1.24835583e-01,   2.53406547e-02,   7.94578188e-01]])"
       ]
      }
     ],
     "prompt_number": 138
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The eigenvectors corresponding to the $n$th eigenvalue (stored in `evals[n]`) is the $n$th *column* in `evecs`, i.e., `evecs[:,n]`. To verify this, let's try mutiplying eigenvectors with the matrix and compare to the product of the eigenvector and the eigenvalue:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "n = 1\n",
      "\n",
      "lnal.norm(np.dot(A, evecs[:,n]) - evals[n] * evecs[:,n])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 139,
       "text": [
        "1.6547354837046931e-16"
       ]
      }
     ],
     "prompt_number": 139
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "There are also more specialized eigensolvers, like the `eigh` for Hermitian matrices. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scilinalg?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 185
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Fast Fourier Transforms: `scipy.fftpack`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Fourier transforms are one of the universal tools in computational physics, which appear over and over again in different contexts. SciPy provides functions for accessing the classic [FFTPACK](http://www.netlib.org/fftpack/) library from NetLib, which is an efficient and well tested FFT library written in FORTRAN. The SciPy API has a few additional convenience functions, but overall the API is closely related to the original FORTRAN library.\n",
      "\n",
      "To use the `fftpack` module in a python program, include it using:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import fftpack as fftp"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 111
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To demonstrate how to do a fast Fourier transform with SciPy, let's look at the FFT of the solution to the damped oscillator from the previous section:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "N = len(t)\n",
      "dt = t[1]-t[0]\n",
      "\n",
      "# calculate the fast fourier transform\n",
      "# y2 is the solution to the under-damped oscillator from the previous section\n",
      "F = fftp.fft(y2[:,0]) \n",
      "\n",
      "# calculate the frequencies for the components in F\n",
      "w = fftp.fftfreq(N, dt)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 112
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = plt.subplots(figsize=(9,3))\n",
      "ax.plot(w, abs(F));"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x638a400>"
       ]
      }
     ],
     "prompt_number": 113
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Since the signal is real, the spectrum is symmetric. We therefore only need to plot the part that corresponds to the postive frequencies. To extract that part of the `w` and `F` we can use some of the indexing tricks for NumPy arrays that we saw in Lecture 2:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "indices = where(w > 0) # select only indices for elements that corresponds to positive frequencies\n",
      "w_pos = w[indices]\n",
      "F_pos = F[indices]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 114
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = plt.subplots(figsize=(9,3))\n",
      "ax.plot(w_pos, abs(F_pos))\n",
      "ax.set_xlim(0, 5);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAADICAYAAAC07KilAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4lOW9xvHvhD2GfZmgURNRhIQlI0qsB3QCBEolKHKK\nUiWphNb1VEDFrUhoT2ksVA8gbalaxaVYTlsQEKOoDAK2F0gJ0iKilhwSTCIBggSIIcmcPx6TsIRk\nkryTd5b7c13PNTPJ5J0fjjB3ntXh9Xq9iIiIiFggwu4CREREJHQoWIiIiIhlFCxERETEMgoWIiIi\nYhkFCxEREbGMgoWIiIhYxqdgUVlZicvlIjU1FYDMzExiYmJwuVy4XC6ys7P9WqSIiIgEh9a+PGnh\nwoXEx8dz7NgxABwOBzNnzmTmzJl+LU5ERESCS4M9Fvn5+axbt45p06ZRvZeW1+tF+2qJiIjI2RoM\nFjNmzGD+/PlERNQ+1eFwsHjxYgYPHkxGRgYlJSV+LVJERESChLcea9as8d57771er9fr3bBhg3fc\nuHFer9frLSoq8lZVVXmrqqq8TzzxhHfq1Kl1/nyfPn28gJqampqamloItD59+tQXG7zeb4c0zuux\nxx7zxsTEeGNjY73R0dHeyMhI75QpU854zr59+7wDBgyo++LUe3lpYXPmzLG7BDmL3pPAovcj8Og9\nCSy+fK7XOxQyb9488vLy2LdvH6+//jojRozg5ZdfpqCgoOY5K1euZODAgfVdRkRERMKET6tCALxe\nLw6HA4BZs2axc+dOHA4HcXFxLF261G8FioiISPDwOVi43W7cbjcAr7zyir/qET+qfv8kcOg9CSx6\nPwKP3pPg4/h2zMQ/F3c4tCxVREQkRPjyua4tvcPExo3w4ot2VyEiIqFOPRZh4PhxSEiAkhLYuRMu\nvdTuikREJBj58rmuYBEGHnkE8vOhb1/45BN4/XW7KxIRkWDky+e6z5M3JTj985/whz/Arl3QqRP0\n6webNsHw4XZXJiIioUhzLEJYVRXccw/MnQvR0RAZCb/6FTzwAFRW2l2diIiEIgWLELZsGXzzDdx1\nV+3Xbr3VBIyXXrKtLBERCWGaYxGiDh2C+Hh46y246qozv7d9O4wbB59+aoZHREREfKHJm2Fs2jS4\n4AJYuLDu70+dCj16mKERERERXyhYhKktW2DSJLMC5Hw9EoWFMGAA/O1vcMUVLVufiIgEJ8s2yKqs\nrMTlcpGamgrA4cOHSUlJoW/fvowePZqSkpLmVyuWOHUK7r4bnnmm/mGO6Gh4+GF46KGWq01EREKf\nT8Fi4cKFxMfH1xxClpWVRUpKCnv37mXkyJFkZWX5tUjx3cKFcOGF8P3vN/zc6dPhX/+C9ev9X5eI\niISHBoNFfn4+69atY9q0aTXdH6tXryY9PR2A9PR0Vq1a5d8qxSf790NWFixZAt9mwHq1awcLFpiA\nUVHh//pERCT0NRgsZsyYwfz584mIqH1qUVERTqcTAKfTSVFRkf8qFJ898AD85Cdw+eW+/8xNN0Hv\n3vC73/mvLhERCR/17ry5du1aevXqhcvlwuPx1Pkch8NRM0RSl8zMzJr7px+9LtZaswZ27278dt0O\nh5mPMXIkTJ4M3bv7pz4REQk+Ho/nvJ//51PvqpDHH3+cV155hdatW1NWVsbXX3/NLbfcwrZt2/B4\nPERHR1NQUEBycjJ79uw59+JaFdIiqg8Ze+EFExCa4r77ICICFi+2tjYREQkdli433bhxIwsWLGDN\nmjXMmjWL7t2788gjj5CVlUVJSUmdEzgVLFrGo49CXh689lrTr1FcDP37g8djQoqIiMjZLFtuevoF\nAR599FHWr19P3759ef/993n00UebXqU0y+7dpqfi179u3nV69IDZs2HGDFAWFBGRptIGWUHuv/4L\nevUyoaC5Tp2CwYPNypLx45t/PRERCS2W91hIYPF6zaTNCROsuV6bNjBvngkWIiIiTaFgEcT++U+z\nqsPKORE33ghffAGff27dNUVEJHwoWASxNWsgNdW3zbB81aYN3HYbvPKKddcUEZHwoWARxKqDhdXS\n0kyw0PQYERFpLAWLIPXVV+b00htusP7aV10F7dubU1JFREQaQ8EiSL35JqSkQNu21l/b4ajttRAR\nEWkMBYsg5a9hkGq33w5//jOUlfnvNUREJPQoWAShsjJ47z343vf89xoXXwyJibB2rf9eQ0REQo+C\nRRDyeGDgQLNbpj9NmaLhEBERaZwGg0VZWRlJSUkkJiYSHx/PY489BphTS2NiYnC5XLhcLrKzs/1e\nrBhr18K4cf5/nYkTYeNGOHjQ/68lIiKhwactvU+cOEFkZCQVFRUMGzaMBQsW8N5779GxY0dmzpx5\n/otrS2/Leb0QGwvr1rXMYWG33w7f+Q7cf7//X0tERAKbZVt6R0ZGAlBeXk5lZSVdu3YFUGiwwa5d\n0KoVxMe3zOtNmQIvv9wyryUiIsHPp2BRVVVFYmIiTqeT5ORkEr79VXnx4sUMHjyYjIwMSkpK/Fqo\nGP7YbbM+o0aZI9n37GmZ1xMRkeDmU7CIiIggJyeH/Px8PvjgAzweD/fccw/79u0jJyeH3r178+CD\nD/q7VsH/y0zP1ro1/OAHmsQpIiK+ad2YJ3fu3Jkbb7yRjz76CLfbXfP1adOmkXqeT7vMzMya+263\n+4yfk8YpKoJPP4Xrr2/Z101LM8eo//znEKF1RCIiYcPj8eDxeBr1Mw1O3iwuLqZ169Z06dKFkydP\nMmbMGObMmUNCQgLR0dEAPPPMM2zbto0//vGPZ15ckzct9Yc/QHY2rFjR8q89aBAsXuyfLcRFRCQ4\n+PK53mCPRUFBAenp6VRVVVFVVcWUKVMYOXIkaWlp5OTk4HA4iIuLY+nSpZYVLnVbswZuucWe105L\nM5M4FSxERKQ+Pi03bfLF1WNhmbIycDrh3/+G7t1b/vW//BIGDIADB6BDh5Z/fRERsZ9ly03Ffhs2\nmOEIO0IFwIUXwjXXwBtv2PP6IiISHBQsgkRLrwapi7b4FhGRhmgoJAh4vXDppfD229C/v311HD8O\nMTFmTwun0746RETEHhoKCRE7d0LbttCvn711XHCBWXa6fLm9dYiISOBSsAgCLb3bZn00HCIiIvVR\nsAgCgTC/olpystmo61//srsSEREJRAoWAa6gAD77DIYPt7sSo1Urc+Kpei1ERKQuChYB7s03YcwY\naNPG7kpqTZkCr74KlZV2VyIiIoFGwSLABdIwSLUBA6BXL2jk9vEiIhIGFCwC2MmTZmOssWPtruRc\naWnw4ot2VyEiIoGm3mBRVlZGUlISiYmJxMfH89hjjwFw+PBhUlJS6Nu3L6NHj6akpKRFig03778P\nLhd062Z3JedKS4N168wW3yIiItXqDRbt27dnw4YN5OTk8PHHH7NhwwY2b95MVlYWKSkp7N27l5Ej\nR5KVldVS9YaVQBwGqdatm5lrsXix3ZWIiEggaXAoJDIyEoDy8nIqKyvp2rUrq1evJj09HYD09HRW\nrVrl3yrDkNcLa9cGbrAAmD4dnn8ejh2zuxIREQkUDQaLqqoqEhMTcTqdJCcnk5CQQFFREc5v93R2\nOp0UFRX5vdBws2MHREbClVfaXcn5xcXBqFEmXIiIiAC0bugJERER5OTkcPToUcaMGcOGDRvO+L7D\n4cBRz5aQmZmZNffdbjdut7vJxYaTVasCu7ei2kMPwcSJcP/9gbUkVkREms/j8eBp5BLARh1C9vOf\n/5wOHTrw/PPP4/F4iI6OpqCggOTkZPbs2XPuxXUIWZN4vXD55bBiBQwZYnc1DXO74a67YPJkuysR\nERF/avYhZMXFxTUrPk6ePMn69etxuVyMHz+eZcuWAbBs2TJuvvlmi0oWgL//3Rw6dtVVdlfim4ce\nggULTCASEZHwVm+Pxa5du0hPT6eqqoqqqiqmTJnCww8/zOHDh5k0aRL79+8nNjaWFStW0KVLl3Mv\nrh6LJrnvPrjwQnjiCbsr8U1VFSQkwG9+Y84SERGR0OTL53qjhkL8UYCcqbwcLroItm41kyODxfPP\nw8qVZgtyEREJTc0eCpGW9/bb0K9fcIUKgDvugH/8Q6eeioiEOwWLAPPqq+ZDOti0b29Whvz613ZX\nIiIidtJQSAA5ehQuuQT27QvMbbwbcugQXHGF6bXo3dvuakRExGoaCgkyf/0rjBgRnKECoHt3uP12\nbfMtIhLO1GMRQEaOhHvvNRtOBasvvoCkJMjNhagou6sRERErqcciiOTnm228b7zR7kqap08fs+T0\nD3+wuxIREbGDgkWAWL7c9FS0b293Jc330EPwzDNQUWF3JSIi0tIULAJEsK4GqUtSEsTEmDkjIiIS\nXhQsAsDHH8ORIzB8uN2VWOfhh2H+fG3zLSISbhQsAsBrr5nVFBEh9G6MGwdffw0ffGB3JSIi0pIa\n/CjLy8sjOTmZhIQEBgwYwKJFiwBzHHpMTAwulwuXy0V2drbfiw1FVVUmWITKMEi1iAh48EFzOJmI\niISPBpebFhYWUlhYSGJiIqWlpQwZMoRVq1axYsUKOnbsyMyZM89/cS03bdCGDTBzplkREmpOnoTY\nWPB4oH9/u6sREZHmsmS5aXR0NImJiQBERUXRv39/Dhw4AKDQYIFQmrR5tg4dzEmtTz1ldyUiItJS\nGjWqn5uby44dO7j22msBWLx4MYMHDyYjI4OSkhK/FBjKTp40J4JOnmx3Jf7zk5/A+vWwebPdlYiI\nSEvweefN0tJS3G43P/3pT7n55pv56quv6NmzJwCzZ8+moKCAF1544cyLOxzMmTOn5rHb7cbtdltX\nfZD73/+F3//efPCGsj//GZ580gz3tGtndzUiIuIrj8eDx+OpeTx37twGRyt8ChanTp1i3LhxjB07\nlunTp5/z/dzcXFJTU9m1a9eZF9cci3rddBPccgukp9tdiX95vebPes01MHu23dWIiEhTWTLHwuv1\nkpGRQXx8/BmhoqCgoOb+ypUrGThwYDNKDT/FxWZS44QJdlfifw4HLFkCCxfCnj12VyMiIv7UYI/F\n5s2buf766xk0aBAOhwOAefPmsXz5cnJycnA4HMTFxbF06VKcTueZF1ePxXn99rdmj4fly+2upOUs\nWmSGRTye0NqzQ0QkXPjyua7TTW3yH/8Bjz8e/IeONUZlJXznO/DjH8O0aXZXIyIijaVgEaD+/W+4\n9lo4cADatLG7mpa1cyekpJhtzKOj7a5GREQaQ8emB6jXXoNbbw2/UAEweDBMnQp1zAEWEZEQoGDR\nwrze0N4UyxdPPgkffQRvvml3JSIiYjUFixb20UfmfJChQ+2uxD6RkfC738G990Jpqd3ViIiIlRQs\nWthvfwtpaWYJZjgbNQrcbtN7ISIioUOTN1vQZ5+ZVRGffQZdu9pdjf2Ki2HAAFi7Fq6+2u5qRESk\nIZq8GWDmzoUHHlCoqNajB8yfDz/6EVRU2F2NiIhYQT0WLWT3btP1//nn0KmT3dUEDq8XRo+GMWPg\noYfsrkZEROqjfSwCyKRJprt/1iy7Kwk8X3wBSUmwbRvExdldjYiInI8lQyF5eXkkJyeTkJDAgAED\nWLRoEQCHDx8mJSWFvn37Mnr0aB2bXo+cHNi0Ce67z+5KAlOfPvDww3DnnVBebnc1IiLSHA32WBQW\nFlJYWEhiYiKlpaUMGTKEVatW8eKLL9KjRw9mzZrFU089xZEjR8jKyjrz4uqxAMzJnsnJ2hSqPpWV\n5qTXLl3gpZe0akZEJBBZ0mMRHR1NYmIiAFFRUfTv358DBw6wevVq0r897zs9PZ1Vq1ZZUHLo2bYN\ntm+Hu++2u5LA1qqVOZBtzx4tQRURCWatG/Pk3NxcduzYQVJSEkVFRTWnmTqdToqKivxSYLCbPRue\neALat7e7ksAXGQlr1sB118Ell5jVIiIiElx8DhalpaVMnDiRhQsX0rFjxzO+53A4ao5UP1tmZmbN\nfbfbjdvtblKhwWjLFvMb+OrVdlcSPHr1grfeguHDISYGxo61uyIRkfDl8XjweDyN+hmfVoWcOnWK\ncePGMXbsWKZ/O1GgX79+eDweoqOjKSgoIDk5mT179px58TCfYzFihDkTZOpUuysJPn/7G4wfD9nZ\nMGSI3dWIiAhYNMfC6/WSkZFBfHx8TagAGD9+PMuWLQNg2bJl3Hzzzc0sN7S8/z7k5Zntu6XxvvMd\n+P3vTbjIzbW7GhER8VWDPRabN2/m+uuvZ9CgQTXDHb/85S8ZOnQokyZNYv/+/cTGxrJixQq6dOly\n5sXDtMfC64Vhw+Cee8L7FFMrLFpkzlf58EPtWCoiYjdtkGWT7GyYORN27TKrHaR5HnzQnAr7zjvQ\nrp3d1YiIhC8FCxt4veZI9Fmz4Pvft7ua0FBVBbfeakLaH/8IETrhRkTEFjqEzAarV5vdIydOtLuS\n0BERAa+8Avn58OijdlcjIiL1UbCwUFWV2dzpZz/Tb9VWa98e3njDBLdvd5UXEZEA1KgNsqR+f/kL\ntG1rVjKI9bp3N3tcjBoFBQXwi18owImIBBrNsbBIZSUMHAhPPw3f/a7d1YS24mKYMMFspvXyy3DB\nBXZXJCISHjTHogW99ppZDjlmjN2VhL4ePeDddyEqCm64Ab780u6KRESkmoKFBf7v/8yx3888o1M5\nW0q7duYU1IkTISkJ/vEPuysSERHQUEiznTplfmueMMGEC2l5f/mLOT32uedAG8CKiPiPL5/rmrzZ\nTE8+CV26mE2cxB4TJ8Kll5pQsXevCXjqORIRsYd6LJrh7bchIwN27ICePe2uRvLzITUVXC743e/M\nCh0REbGOJZM3p06ditPpZODAgTVfy8zMJCYmBpfLhcvlIjs7u/nVBpmCAvjhD83GTQoVgSEmBjZt\ngkOHYPRocysiIi2rwWBx5513nhMcHA4HM2fOZMeOHezYsYPvhtn6yspKc7jYj38Mycl2VyOni4qC\nv/4VrrkGrr4a3nvP7opERMJLg8Fi+PDhdK3jWMlQHuJoyC9/CRUVMHu23ZVIXVq1gvnzYckSuPNO\nmDYNSkrsrkpEJDw0ebnp4sWLGTx4MBkZGZSE0b/amzbBs8+aw7Baa+prQPve9+Cf/zRLUxMSYOVK\nuysSEQl9Pk3ezM3NJTU1lV27dgHw1Vdf0fPbiQWzZ8+moKCAF1544dyLOxzMmTOn5rHb7cbtdltU\ness7dKh2YuD3vmd3NdIYmzaZnotBg2DxYoiOtrsiEZHA5/F48Hg8NY/nzp1rzbHpZwcLX78XSqtC\nvF5zBsiVV8KCBXZXI01RVmYOiHv+eTNUkpamZakiIo3hty29CwoKau6vXLnyjBUjoep//ge++grm\nzbO7Emmq9u3N+/f22+b9/O53ITfX7qpEREJLgz0WkydPZuPGjRQXF+N0Opk7dy4ej4ecnBwcDgdx\ncXEsXboUp9N57sVDpMfio4/M0Mff/w6XXWZ3NWKFU6fg1782vU+PPw733WfmYoiIyPn58rmuDbIa\ncPQoXHUVZGXB979vdzVitU8/hZkzYdcu+OlPzSqSNm3srkpEJDDpdNNmOnkSbr3VbLakUBGarrwS\n3nwT/vQn+POfzeOXXjLLiUVEpPHUY3EepaVmsmZ0NCxbpt9iw8UHH5jzXwoKYM4cEyxbtbK7KhGR\nwKChkCYqKTFzKuLjYelSfbCEG68X3n/fbIB29CjMnQu33AIR6t8TkTCnYNEExcVm6GP4cHjmGX2Y\nhDOv16wgmT3bTPacM8f0Yiloiki4UrBopIICSEkxHx6/+IX2OBDD64U1a8xS1cJCuPtumDoVevWy\nuzIRkZalyZuNsH8/XH89TJ5sPkAUKqSaw2HC5t//Dn/5C3z+uZnkefvtsGWLCR4iImKoxwLzQTFq\nFEyfbppIQ44cMZN6f/tbs//FvfeaoNGxo92ViYj4j4ZCfLB7t5lT8eST5hh0kcaonuj5m9/Ahg3w\ngx+YoZIBA+yuTETEegoWDdixw6z+mD8f7rjD7mok2B04AM89Z84i6dYNbrvNLFft08fuykRErGHJ\nHIupU6fidDrPOA/k8OHDpKSk0LdvX0aPHh2Ux6Zv2WLOinj2WYUKscZFF0Fmppmvs2QJfPklXHcd\nXH212Tp8/367KxQR8b8Gg8Wdd95Jdnb2GV/LysoiJSWFvXv3MnLkSLKysvxWoNXKy83ywVtuMTss\nTpxod0USaiIizHLlZ581vRhPPQV795qt4a+7DhYtMiuQRERCUZOOTe/Xrx8bN27E6XRSWFiI2+1m\nz5495148wIZCPv7YHJV98cXw+99D7952VyTh5NQpePdds3346tUwcCCMGwdjx0JCglYiiUjg8+Vz\nvXVTLlxUVFRzmqnT6aSoqKgpl2kxFRVmHsXTT8OvfgU//KH+EZeW16aNCRFjx0JZmQkZb70FqalQ\nWVn7vZEjtbpERIJXk4LF6RwOB44A/pT+9FNIT4eoKNi+HS65xO6KRKB9e9NbMW6cWVny6acmZCxZ\nAlOmwNChtUEjPl5BWESCR5OCRfUQSHR0NAUFBfSqZwvCzMzMmvtutxu3292Ul2y0qipYvBj++7/N\nWQ93363tuSUwORzQr59pM2aYA/A2bDBB48Ybzf/LbjfccIPZxO3yyxU0RKRleDwePB5Po36mSXMs\nZs2aRffu3XnkkUfIysqipKSkzgmcds2x2LcP7rzTDIG89JL5h1gkGHm9ZuLnxo21rarKBIzqoKEe\nDRFpKZbsYzF58mQ2btxIcXExTqeTn/3sZ9x0001MmjSJ/fv3Exsby4oVK+jSpUuTCrDSiRNmUuYv\nfgGPPGJ++9OBURJKvF4TnD/4oDZoHDtmVqFcfz1cey0kJpqhFhERq4XNBlnFxWZseskSGDbMDH/E\nx/v9ZUUCQl6eCRqbNsHWrbBnj/n/f+jQ2nbllQrZItJ8IR8scnPNSo9XXzX7UTz0kPkHVCScnTgB\nOTkmZFS3r74yG3UNHQrXXAMuF8TGat6RiDROyAaLnTvNstHsbJg2DR54AC680PKXEQkZhw7Btm0m\nZGzbZoLH0aMwaBAMHlzbBgyACy6wu1oRCVQhFSy8XvB4zC6GH39sTiG96y7o3NmSy4uEnUOHzN+l\nnTtr2549ZgO56qCRkAD9+5vzTlo3e3G6iAS7oA8WJ0/C5s3wzjtm6V1FBTz8sDnbo107CwsVEcDs\nDvrpp7VBY/du+OQTc+5Jnz5m7kb//uY2Ph769tXfRZFwEnTBwuuFf/3LBIm334YPPzS/NY0eDSkp\nkJSkMWERO5w4YZa9VgeN6tt//9v0cPTtC1dccWa75BJNGBUJNUERLA4eNFsbv/OOae3awZgxJkwk\nJ0Mdq1hFJECUl8MXX8Bnn53bDh40E0Qvv7w2bFx2GcTFwaWXqqdDJBgFRbBISzOTyKrDRJ8+2uxH\nJBScPGlCx+ef14aNfftML0d+PvTsaUJGXe3CCzWnQyQQBUWwEJHwU1FhjpTft6/udvCgOX344ovN\nkEp1O/1xly76JUSkpSlYiEhQKi83wSMvD/bvN+3s+xUVEBMDF11k2oUX1t6vbtHR6vkQsZKChYiE\nrKNHTfj48ktzW1crLoYePUzvR3WLjj73NjoaOnSw+08kEvj8HixiY2Pp1KkTrVq1ok2bNmzdurXR\nBYiI+EtFBRQWmlZQYFr1/dNvCwvN+SpOp2m9ep17e/r9Tp00DCPhye/BIi4uju3bt9OtW7cmFyAi\nYjevF44cMVufFxU1fFtebnpCevas/7ZHD+je3TStgpFQ4MvnerNHHxUcRCTYORzQrZtp/fo1/Pyy\nMjPMcvDgube7dpnbgwfN7qbVrW3b2pBxdqt+7W7doGvX2tuuXRVIJPg0q8fisssuo3PnzrRq1Yq7\n7rqLH/3oR2deXD0WIiJ4vVBaembQOL0dPmzakSPn3m/b9syg0bWrWRHTpcv573fpYo476NhRmwqK\ntfzeY7FlyxZ69+7NwYMHSUlJoV+/fgwfPvyM52RmZtbcd7vduN3u5rykiEjQcTjMh3zHjmbTMF9V\nB5LqkHHkCJSUmFZ9/4sv6v760aNmx9SOHU3I6Ny5NnCc3jp1qr09u1V/vW1bv/2nkQDn8XjweDyN\n+hnLVoXMnTuXqKgoHnzwwdqLq8dCRMQ2lZXw9dcmZBw9Whs4qlv1977+urbV9TgiwgSUTp1qA1Jd\nj6tbVFT9t1oCHLz82mNx4sQJKisr6dixI8ePH+edd95hzpw5Tb2ciIhYrFWr2uGTpvJ6zZySY8dq\n29df1/24sNDstHrsmOlpKS2tvX/6bZs2JmRccIG5Pb2d/rULLmi4VT8vMtIsGdZqHfs1OVgUFRUx\nYcIEACoqKrj99tsZPXq0ZYWJiIj9HA7zgd2hg1lq21xer9nu/fhx06oDSGlp3Y+PHDEbolU//3zt\nxAn45htTZ3XQiIysvX/616pbhw7nf1z9Z67rfvv2CjD10QZZIiISEqqqTMCobtWBo/r+8eMm1Jw4\nUXt7vnby5JnPPf1+ebkJF9WB4/TW0Nd9uT1fa9vW/kCjnTdFREQsVllphoeqA8fZra7vlZXVfv3s\n+6fffvNN7ffPft6pU2b5cbt2JmhU355+v67bs+/X9diX1r499OqlYCEiIhISqqpqg8fpAeTsr539\nvdO/Xtfjs7/3zTemV+bsr5WVwaFDChYiIiJiEV8+17V1ioiIiFhGwUJEREQso2AhIiIillGwEBER\nEcsoWIiIiIhlFCxERETEMgoWIiIiYplmBYvs7Gz69evHFVdcwVNPPWVVTeInjT36VvxP70lg0fsR\nePSeBJ8mB4vKykruv/9+srOz2b17N8uXL+eTTz6xsjaxmP6CBh69J4FF70fg0XsSfJocLLZu3crl\nl19ObGwsbdq04bbbbuONN96wsjYREREJMk0OFgcOHODiiy+ueRwTE8OBAwcsKUpERESCU+um/qDD\nh7Nb+/Tp49PzpOXMnTvX7hLkLHpPAovej8Cj9yRw9OnTp8HnNDlYXHTRReTl5dU8zsvLIyYm5ozn\nfP755029vIiIiAShJg+FXH311Xz22Wfk5uZSXl7On/70J8aPH29lbSIiIhJkmtxj0bp1a5599lnG\njBlDZWX3bk2xAAADNElEQVQlGRkZ9O/f38raREREJMg4vA0drC4iIiLiI7/svKmNswLL1KlTcTqd\nDBw40O5SBDMfKTk5mYSEBAYMGMCiRYvsLinslZWVkZSURGJiIvHx8Tz22GN2lySY/ZJcLhepqal2\nlyJAbGwsgwYNwuVyMXTo0PM+z/Iei8rKSq688kreffddLrroIq655hqWL1+uYRIbbdq0iaioKNLS\n0ti1a5fd5YS9wsJCCgsLSUxMpLS0lCFDhrBq1Sr9HbHZiRMniIyMpKKigmHDhrFgwQKGDRtmd1lh\n7emnn2b79u0cO3aM1atX211O2IuLi2P79u1069at3udZ3mOhjbMCz/Dhw+natavdZci3oqOjSUxM\nBCAqKor+/fvz5Zdf2lyVREZGAlBeXk5lZWWD/3iKf+Xn57Nu3TqmTZuGRuwDhy/vheXBQhtnifgu\nNzeXHTt2kJSUZHcpYa+qqorExEScTifJycnEx8fbXVJYmzFjBvPnzyciQmdlBgqHw8GoUaO4+uqr\nee655877PMvfMW2IJeKb0tJS/vM//5OFCxcSFRVldzlhLyIigpycHPLz8/nggw90RoWN1q5dS69e\nvXC5XOqtCCBbtmxhx44dvPXWWyxZsoRNmzbV+TzLg4UvG2eJhLtTp04xceJE7rjjDm6++Wa7y5HT\ndO7cmRtvvJGPPvrI7lLC1ocffsjq1auJi4tj8uTJvP/++6SlpdldVtjr3bs3AD179mTChAls3bq1\nzudZHiy0cZZI/bxeLxkZGcTHxzN9+nS7yxGguLiYkpISAE6ePMn69etxuVw2VxW+5s2bR15eHvv2\n7eP1119nxIgRvPzyy3aXFdZOnDjBsWPHADh+/DjvvPPOeVcaWh4sTt84Kz4+nltvvVWz3W02efJk\nrrvuOvbu3cvFF1/Miy++aHdJYW3Lli28+uqrbNiwAZfLhcvlIjs72+6ywlpBQQEjRowgMTGRpKQk\nUlNTGTlypN1lybc0xG6/oqIihg8fXvN3ZNy4cYwePbrO52qDLBEREbGMptuKiIiIZRQsRERExDIK\nFiIiImIZBQsRERGxjIKFiIiIWEbBQkRERCyjYCEiIiKW+X8VoEk4ORYJJwAAAABJRU5ErkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x68802e8>"
       ]
      }
     ],
     "prompt_number": 115
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "As expected, we now see a peak in the spectrum that is centered around 1, which is the frequency we used in the damped oscillator example."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fftpack?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 116
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Note: [More information and worked examples](https://scipy-lectures.github.io/intro/scipy.html#fast-fourier-transforms-scipy-fftpack)"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Optimizations and Fit: `scipy.optimize`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Optimization (finding minima or maxima of a function) is a large field in mathematics, and optimization of complicated functions or in many variables can be rather involved. Here we will only look at a few very simple cases. For a more detailed introduction to optimization with SciPy see: http://scipy-lectures.github.com/advanced/mathematical_optimization/index.html\n",
      "\n",
      "To use the optimization module in scipy first include the `optimize` module:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import optimize as opt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 183
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# min of single variable function\n",
      "def f(x):\n",
      "    return 4*x**3 + (x-2)**2 + x**4"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 185
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax  = plt.subplots()\n",
      "x = linspace(-5, 3, 100)\n",
      "ax.plot(x, f(x));"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x6b51a20>"
       ]
      }
     ],
     "prompt_number": 187
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can use the `fmin_bfgs` function to find the minima of a function:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "x_min = opt.fmin_bfgs(f, -2)\n",
      "x_min "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Optimization terminated successfully.\n",
        "         Current function value: -3.506641\n",
        "         Iterations: 6\n",
        "         Function evaluations: 30\n",
        "         Gradient evaluations: 10\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 190,
       "text": [
        "array([-2.67298163])"
       ]
      }
     ],
     "prompt_number": 190
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.fmin_bfgs(f, 0.5) "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Optimization terminated successfully.\n",
        "         Current function value: 2.804988\n",
        "         Iterations: 3\n",
        "         Function evaluations: 15\n",
        "         Gradient evaluations: 5\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 192,
       "text": [
        "array([ 0.46961745])"
       ]
      }
     ],
     "prompt_number": 192
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can also use the `brent` or `fminbound` functions. They have a bit different syntax and use different algorithms. "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.brent(f)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 194,
       "text": [
        "0.46961743402759754"
       ]
      }
     ],
     "prompt_number": 194
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.fminbound(f, -4, 2)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 197,
       "text": [
        "-2.6729822917520809"
       ]
      }
     ],
     "prompt_number": 197
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To find the root for a function of the form $f(x) = 0$ we can use the `fsolve` function. It requires an initial guess: "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# root finding:\n",
      "omega_c = 3.0\n",
      "def f(omega):\n",
      "    # a transcendental equation: resonance frequencies of a low-Q SQUID terminated microwave resonator\n",
      "    return tan(2*pi*omega) - omega_c/omega"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 198
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax  = plt.subplots(figsize=(10,4))\n",
      "x = linspace(0, 3, 1000)\n",
      "y = f(x)\n",
      "mask = where(abs(y) > 50)\n",
      "x[mask] = y[mask] = NaN # get rid of vertical line when the function flip sign\n",
      "ax.plot(x, y)\n",
      "ax.plot([0, 3], [0, 0], 'k')\n",
      "ax.set_ylim(-5,5);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "-c:5: RuntimeWarning: divide by zero encountered in divide\n",
        "C:\\Anaconda\\lib\\site-packages\\matplotlib\\lines.py:503: RuntimeWarning: invalid value encountered in greater_equal\n",
        "  return np.alltrue(x[1:] - x[0:-1] >= 0)\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nREQUpP8HqIL+LsdqLT4AAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7ede160>"
       ]
      }
     ],
     "prompt_number": 199
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.fsolve(f, 0.1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 200,
       "text": [
        "array([ 0.23743014])"
       ]
      }
     ],
     "prompt_number": 200
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.fsolve(f, 0.6)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 201,
       "text": [
        "array([ 0.71286972])"
       ]
      }
     ],
     "prompt_number": 201
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt.fsolve(f, 1.1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 202,
       "text": [
        "array([ 1.18990285])"
       ]
      }
     ],
     "prompt_number": 202
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 196
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 196
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 196
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "[More information and worked examples](https://scipy-lectures.github.io/intro/scipy.html#optimization-and-fit-scipy-optimize)"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "opt?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 181
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Statistics and Random Numbers: `scipy.stats`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The module `scipy.stats` contains statistical tools and probabilistic descriptions of random processes. Random number generators for various random process can be found in `numpy.random`.\n",
      "\n",
      "For a complete documentation of its features, see http://docs.scipy.org/doc/scipy/reference/stats.html.\n",
      "\n",
      "Note: There is also a very powerful python package for statistical modelling called statsmodels. See http://statsmodels.sourceforge.net for more details."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import stats as stats"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 214
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "a = np.random.normal(size=10000)\n",
      "bins = np.arange(-4,5)\n",
      "bins"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 215,
       "text": [
        "array([-4, -3, -2, -1,  0,  1,  2,  3,  4])"
       ]
      }
     ],
     "prompt_number": 215
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "histogram = np.histogram(a, bins=bins, normed=True)[0]\n",
      "bins = 0.5*(bins[1:] + bins[:-1])\n",
      "bins"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 216,
       "text": [
        "array([-3.5, -2.5, -1.5, -0.5,  0.5,  1.5,  2.5,  3.5])"
       ]
      }
     ],
     "prompt_number": 216
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "b = stats.norm.pdf(bins)\n",
      "plt.plot(bins,histogram)\n",
      "plt.plot(bins,b)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 217,
       "text": [
        "[<matplotlib.lines.Line2D at 0x835bef0>]"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAEACAYAAAC57G0KAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlYlFX/BvB7YMYVV0RFhhxZFESBURTQMFyQ3BFxoNSw\nyEgzX+tXWVlv2mJS2aLoG5lrmoKaYom4IKOG4ChiqLiAgo6jKK5syjDD+f1BYIQOgyxnZvh+rosr\nhnkO3hjcHM+c53kEjDEGQgghJseMdwBCCCENgwqeEEJMFBU8IYSYKCp4QggxUVTwhBBioqjgCSHE\nRNVY8PHx8XBycoKjoyMiIiKeeNyxY8cgFAqxbdu2Wo8lhBBS/wS69sFrtVr06tUL+/fvh42NDQYM\nGIBNmzbB2dm52nF+fn5o1aoVXn75ZUyaNEnvsYQQQhqGzhm8QqGAg4MDJBIJRCIRQkJCEBsbW+24\nZcuWISgoCFZWVrUeSwghpGHoLHiVSgVbW9vKx2KxGCqVqtoxsbGxmDlzJgBAIBDoPZYQQkjD0Vnw\nFWWty9y5c7F48WIIBAIwxlCx4qPPWEIIIQ1HqOtJGxsbKJXKysdKpRJisbjKMampqQgJCQEA3Lp1\nC7t374ZIJNJrLAA4ODjg4sWLdfoiCCGkqbG3t0dWVpbug5gOpaWlzM7OjmVnZ7OSkhLm5ubGMjIy\nnnj89OnT2bZt22o1toYIBuOTTz7hHUEvlLN+GUNOY8jIGOWsb/p0p84ZvFAoRGRkJPz9/aHVahEW\nFgZnZ2dERUUBAMLDw2s9lhBCSOPQWfAAMGrUKIwaNarKx55U7GvWrKlxLCGEkMZBZ7LqydfXl3cE\nvVDO+mUMOY0hI0A5edB5olOjBPh79w0hhBD96dOdNIMnhBATRQVPCCEmigqeEEJMFBU8IYSYKCp4\nQggxUVTwhBBioqjgCSHERFHBE0KIiaKCJ4QQE0UFTwghJooKnhBCTBQVPCGEmCgqeEIIMVFU8IQQ\nYqKo4AkhxERRwRNCiImigieEEBNVY8HHx8fDyckJjo6OiIiIqPZ8bGws3NzcIJVK0b9/fxw4cKDy\nOYlEAldXV0ilUgwcOLB+kxNCCNFJ5y37tFotevXqhf3798PGxgYDBgzApk2b4OzsXHlMUVERWrdu\nDQA4deoUJk6ciKysLABAjx49kJqaio4dOz45AN2yjxBCak2f7hTqelKhUMDBwQESiQQAEBISgtjY\n2CoFX1HuAFBYWIhOnTpV+RxU3qQx3H1wFzeLbvKOUaO2zdvCuo017xikidBZ8CqVCra2tpWPxWIx\njh49Wu24HTt24IMPPsD169exd+/eyo8LBAKMGDEC5ubmCA8Px4wZM+oxOiHltGVauEe5o7l5cwgE\nAt5xdLpWcA0ZszJg28625oMJqSOdBa/vD0tAQAACAgJw+PBhTJs2DefPnwcAJCUlwdraGnl5efDz\n84OTkxN8fHzqnpqQf0hSJqFDiw44+fpJ3lFq9ErsK9iasRVveb/FOwppAnQWvI2NDZRKZeVjpVIJ\nsVj8xON9fHyg0Whw+/ZtWFpawtq6/J+iVlZWmDhxIhQKxWMLfsGCBZXv+/r6wtfXt5ZfBmnKYs7E\noHmWDJMmAd27AxLJo7fu3YF27TgH/AeZiwwLDy6kgie1JpfLIZfLazVG54usGo0GvXr1QkJCArp1\n64aBAwdWe5H14sWLsLOzg0AgwIkTJzB58mRcvHgRxcXF0Gq1aNOmDYqKijBy5Eh88sknGDlyZNUA\n9CIrqQNtmRZdv7aBduVh/LjIEZcvA5cvAzk5j95EoqqF/89fABIJ0L594+Ut1ZbCeok1Ul9LRff2\n3RvvDyYmp84vsgqFQkRGRsLf3x9arRZhYWFwdnZGVFQUACA8PBzbtm3D+vXrIRKJYGFhgc2bNwMA\ncnNzERgYCKD8F8WUKVOqlTshdXXo8iE0K+mGcSMcIZNVf54x4M6dqoV/6RJw4MCjxwJB9Vn/Px93\n6FB+TH0QmYsQ4BSALRlb8M6gd+rnkxLyBDpn8I0SgGbwpA5m/jETO9dLsHHWPDzNyh5jwL17VX8B\n/PtfAFqt7l8Alpa1+wWw7+I+zD8wH4oZitoHJuRv+nQnFTwxWpoyDbp81Q3ma1JwPcMO5uYN8+fc\nu1e19P/9C6CkRPcvACurqr8ANGUaWC+xhuJVBXp06NEwoYnJq/MSDSGGTJ4jR4uS7gh6vuHKHShf\no2/fHnBze/zz+fmPSr/ivwrFo8dFRY9K39UVWLRIiECnQMScicG8Z+c1XHDS5FHBE6MVfSYGmpPB\nCHmPb462bYG+fcvfHqew8FHxv/8+MHw4ENwnGO/ue5cKnjQoKnhilEq1pdh2ejtanj8OLy/eaXSz\nsABcXMrfcnKAtWuB9RuG4Gr+VWTdyYJDRwfeEYmJoqtJEqOUmJOIlg/tMWVs93rb4dIYQkKAuDig\nMF+ISc6TsOXMFt6RiAmjgidGafPpaJSckCEkhHeS2rG0BPz8gJiY8pOeos9E845ETBgVPDE6aq0a\nv53ZAYsrkyGV8k5Te9Only/T+DzjgxtFN3D+1nnekYiJooInRifhUgJaP3TCtPG2RrU8U8HfH8jO\nBrIyzRHkHIQtGbRMQxoGFTwxOptPR6P4mPEtz1QQCoGpU4F168qXaWLOxPCOREwUFTwxKiWaEmzP\n2InOeUFwceGd5umFhgLr1wNeNoNx+8FtnM07yzsSMUFU8MSo7Lu0D20e9MG0ABveUeqkTx/A2hpI\nPGCGyb0n0yyeNAgqeGJUok/HoCBFhuBg3knqruLFVpmLDDEZVPCk/lHBE6PxUPMQO87+DknxJDg6\n8k5TdxV74p0svJBfko/TN0/zjkRMDBU8MRp7svagTZE7pk00jXuaVuyJ37rFDLLe9GIrqX9U8MRo\nbD4dg/wjssde991YVVmmORNDV1Yl9YoKnhiFB6UP8Pu5XXBCILqb0I2QKvbEtysciIeahzh18xTv\nSMSEUMETo7A7azfaFnrgpcAuvKPUq4o98evXC8ovXXCaLl1A6g8VPDEKm9JjcP+IDJMn805S/yr2\nxE9yKt9NQ8s0pL5QwRODV1xajLgLu+HeYiKsTeP11Soq9sTfy+gPbZkWJ3NP8o5ETESNBR8fHw8n\nJyc4OjoiIiKi2vOxsbFwc3ODVCpF//79ceDAAb3HEqKPXRd2oU2BJ16aZMU7SoOZPh1Yt05Aly4g\n9YvpoNFomL29PcvOzmZqtZq5ubmxjIyMKscUFhZWvp+ens7s7e31Hvv3/WB1RSCEBfwaxFoO+pnl\n5fFO0nBu3WKsXTvGDp4/wXp834OVlZXxjkQMnD7dqXMGr1Ao4ODgAIlEApFIhJCQEMTGxlY5pnXr\n1pXvFxYWolOnTnqPJaQmhepC7MnaC68OAfj7W8skVeyJP5voDnMzc6ReT+UdiZgAnQWvUqlga2tb\n+VgsFkOlUlU7bseOHXB2dsaoUaOwdOnSWo0lRJddF3ah7b1BeCnIkneUBle5TEMnPZF6ovOerAI9\nL7YdEBCAgIAAHD58GNOmTcO5c+dqFWLBggWV7/v6+sLX17dW44np2nAyGvePBCPgY95JGp6/P/Dq\nq8D7FsGYkzweESMi9P4ZJKZPLpdDLpfXaozOgrexsYFSqax8rFQqIRaLn3i8j48PNBoN7ty5A7FY\nrPfYfxY8IRUKSgqQcCkBvtar0L497zQNr2JPfHJsX7To1gIKlQKeYk/esYiB+Pfkd+HChTWO0blE\n4+HhgczMTOTk5ECtViM6Ohrjx4+vcszFixcr9+2eOHECAGBpaanXWEJ0+f3C77C464OXJnfgHaXR\nhIYCv6wXIMiZlmlI3emcwQuFQkRGRsLf3x9arRZhYWFwdnZGVFQUACA8PBzbtm3D+vXrIRKJYGFh\ngc2bN+scS4i+fkmLRmGKDOM+452k8VTsiX+mQIbPs0fj65Ffw0xAp6uQpyNgjO9pcwKBgM7cI9Xc\nf3gfXb96Bs9nXMH2ze14x2lUy5cDSUnAX8+6YOW4lRhkO4h3JGKA9OlOmhoQg7Tz/E5Y3PLFNFnT\nKnfg0XXix9vRMg2pGyp4YpB+ORGDYoUMo0bxTtL4KvbEN784GVsytqCMlfGORIwUFTwxOHcf3MVh\n5SGM7TkOLVvyTsPH9OnA3o290bFlRxxRHuEdhxgpKnhicGLPx6L1jeF4Kbgt7yjcVFwnfniXYLqE\nMHlqVPDE4KxPjUHJCRn8/Hgn4adiT/yD1MnYenYrtGVa3pGIEaKCJwbldvFtJF9NQmCfsWjWjHca\nvkJDgV3reqFL6y7488qfvOMQI0QFTwzKjnM70PL6SEwLtuAdhbuKPfH9mgcj+gwt05Dao4InBmXt\n8Rho02WgyxGVmz4dyJNPxraz26Ap0/COQ4wMFTwxGLeKb+HY9RQES0dDqPMc66YjJAQ4HOsA69Zi\nHLp8iHccYmSo4InB+O3sb2hx9XlMC2ld88FNRMWeeLsHdNITqT0qeGIw1ihiYH42GIMH805iWKZP\nB3J2yfDb2d9omYbUChU8MQg3i24i7cZxTBk4Cmb0XVmFvz9wPaMHuraQIDE7kXccYkToR4kYhK0Z\n29Ds8mhMDWmip67qULEn3uomLdOQ2qGCJwZhjSIGLS8FY8AA3kkMU2gocGbLZGw/tx2l2lLecYiR\noIIn3OUW5uJU3km8NMgfdIe6x+vTB7Bt0x2dzR2RkJ3AOw4xElTwhLutGdsgvDQWU0Na8I5i0KZP\nB1pcomUaoj8qeMLdqpRotFfJ4OrKO4lhCwkBsmKDsONcLNRaNe84xAhQwROuVPkqnL19GtN9RtLy\nTA0sLQF/b1t01Dpj38V9vOMQI0AFT7jamrENZpnjMSW4Oe8oRmH6dECbLkNMBi3TkJrVWPDx8fFw\ncnKCo6MjIiIiqj2/ceNGuLm5wdXVFYMHD0Z6enrlcxKJBK6urpBKpRg4cGD9Jicm4efkaHS9LQPd\nj10//v5A0bEg7MjYiRJNCe84xMDpLHitVovZs2cjPj4eGRkZ2LRpE86ePVvlGDs7Oxw6dAjp6en4\n+OOP8dprr1U+JxAIIJfLkZaWBoVC0TBfATFayvtKZN47h1d8R/COYjSEQiA0sBvalbhi78W9vOMQ\nA6ez4BUKBRwcHCCRSCASiRASEoLY2Ngqx3h7e6Ndu/IbI3t6euLq1atVnq/prt+k6Yo+vRWC8wF4\nMbiJX/i9lkJDgfxkGTbTnZ5IDXQWvEqlgq2tbeVjsVgMlUr1xONXrVqF0aNHVz4WCAQYMWIEPDw8\nsHLlynqIS0zJ6pQYPFMgg50d7yTGpU8fQFI8CbFn/8CD0ge84xADpvOirIJabGtITEzE6tWrkZSU\nVPmxpKQkWFtbIy8vD35+fnBycoKPj0+1sQsWLKh839fXF750MXCTd/neZWTfz8Jnw4fxjmKUZrzQ\nFZ9ekWLPxT0IcArgHYc0ArlcDrlcXqsxOgvexsYGSqWy8rFSqYRYLK52XHp6OmbMmIH4+Hh06NCh\n8uPW1tYAACsrK0ycOBEKhaLGgidNw6ZTW8DOTkTIdyLeUYxSSAjwzsRgbHCPoYJvIv49+V24cGGN\nY3Qu0Xh4eCAzMxM5OTlQq9WIjo7G+PHjqxxz5coVBAYGYsOGDXBwcKj8eHFxMQoKCgAARUVF2Lt3\nL/r27Vubr4eYsNUpMXBUy/CY+QLRg6UlMKJbIOIy41BcWsw7DjFQOmfwQqEQkZGR8Pf3h1arRVhY\nGJydnREVFQUACA8Px6effoq7d+9i5syZAACRSASFQoHc3FwEBgYCADQaDaZMmYKRI0c28JdDjEH2\n3Wxcyc/B1yN9eUcxaq9P64zDezywO3M3JvWexDsOMUACxnmbi0AgoJ02Tczn8gh8tiwbV1b8iC5d\neKcxXhoNYDnyJwyemoC4V2hHTVOjT3fSmayk0a05GoM+gmAq9zoSCoGp/QNx4Eo8itRFvOMQA0QF\nTxpV1p0sqApUeP35IbyjmISZoZ0AlRd+P7+LdxRigKjgSaP65UQMys5MwqRAc95RTEKfPkDX2zIs\nl9O1aUh1VPCkUa09FoP+zYPRsSPvJKZj1tCJOJq3D4XqQt5RiIGhgieN5vyt87hReBMzxwzmHcWk\nhL3YEezKYGxO+513FGJgqOBJo1mfugXsTBACJtDyTH2ytATcRTIsT6RlGlIVFTxpNOtSo+HVRoa2\nbXknMT3vjJ2AU4UHkF+SzzsKMSBU8KRRZORl4FbhXcwaN4h3FJM0aUwHCFVD8JOclmnII1TwpFGs\nPbYF7MxkjBtL33INQSgEhnWVISqJTngij9BPG2lwjDH8ciIaz1nK0KoV7zSm62PZeFzUynG76B7v\nKMRAUMGTBncm7wzuFhXhjQlevKOYNG9pO7S7MwyLd+zkHYUYCCp40uBWpcQAZybj+ef1v78AeToT\nHGT49SQt05ByVPCkQTHG8OtfMRhhLUPz5rzTmL4FL47DNdFh5OTe5R2FGAAqeNKg0m+k435hCWZP\nHMA7SpMgsW6Dbg9H4JPNO3hHIQaACp40qJ+OxMDsrAzDh9PyTGOZKg3Gziw66YlQwZMGxBhD9OkY\njHpGBhHdma/RfDBpDO63PYKU9Nu8oxDOqOBJg0nLTUNBYRlmT+rHO0qT0r6VBRzNR+LTmO28oxDO\nqOBJg/nxcAxEF4IxZAgtzzS28MHBOHAjBlot7ySEJyp40iAYY9h6Ngbj7WQwp2uLNbrXh4+GpstR\nbIvP4x2FcFRjwcfHx8PJyQmOjo6IiIio9vzGjRvh5uYGV1dXDB48GOnp6XqPJabr+LVUFBUIMTvI\njXeUJqmVqBXcWo/CN3/8xjsK4YnpoNFomL29PcvOzmZqtZq5ubmxjIyMKsccOXKE3bt3jzHG2O7d\nu5mnp6feY/++4beuCMRIhW58h7UNmM/KyngnabrWHt3GzF8Zxu7e5Z2ENAR9ulPnDF6hUMDBwQES\niQQikQghISGIjY2tcoy3tzfatWsHAPD09MTVq1f1HktME2MM2y/EILBnMAS0/M6NTDoKZjap+HnT\nDd5RCCc6C16lUsHW1rbysVgshkqleuLxq1atwujRo59qLDEdR68q8CC/FWbL+vCO0qS1FLXEIKsx\nWCHfxjsK4USo60lBLaZfiYmJWL16NZKSkmo9dsGCBZXv+/r6wtfXV++xxPAsS4yGxWUZ+vWj6Ttv\nc4bJEHL6O5w/Pwu9evFOQ+pCLpdDLpfXaozOgrexsYFSqax8rFQqIRaLqx2Xnp6OGTNmID4+Hh06\ndKjVWKBqwRPjVsbK8PvFLXixdzwtzxiA0b38YWY9HcvXXcfSRda845A6+Pfkd+HChTWO0blE4+Hh\ngczMTOTk5ECtViM6Ohrjx4+vcsyVK1cQGBiIDRs2wMHBoVZjiek5ciUFD+63w5shLryjEAAthC0w\nsvs4rD++jfbEN0E6C14oFCIyMhL+/v7o3bs3goOD4ezsjKioKERFRQEAPv30U9y9exczZ86EVCrF\nwIEDdY4lpm1pQgw6qGRwoX43GK8NlkHrFI2EBN5JSGMT/L3dhl8AgQCcI5B6UsbK0HaBLcKECfjh\nYyfeccjfSjQl6LjIGn5Zp7BjvQ3vOKSe6NOddCYrqTeHcpJQcqcTZodQuRuS5sLmmNBrAvYot+Ie\n3c2vSaGCJ/Xmh30xsMqTwdGRdxLyb9P6ydB6QAxi6CrCTQoVPKkX2jIt9lzdiqnSybyjkMcYbjcc\n6rbnELVZWfPBxGRQwZN6kXjpMNR3uuKNkJ68o5DHaGbeDJP6BCBTtAXnz/NOQxoLFTypF9/vi4HN\n3WB07847CXmSF/oGw8IzBuvW8U5CGgsVPKkzTZkGCde3IdSDlmcM2VDJUDxseRGrf8uhPfFNBBU8\nqbN9Fw6i9JYtZobY845CdBCZixDUZyJEbltoT3wTQQVP6uz7fTHoXhgMazoT3uAFuwTDzDUGa9fy\nTkIaAxU8qRNNmQYHb/6GVzxpecYYPCd5DsWiy/gj6RLtiW8CqOBJnew+mwhNnh3CgyW8oxA9CM2E\nCOo9Cd1H0574poAKntTJd/ui4VAiQ6dOvJMQfclcZHhgR8s0TQEVPHlqpdpSJN3egRmDaXnGmAzp\nPgSFgmvIvJNJe+JNHBU8eWo7TydAe7MnwoKe4R2F1IK5mTmCegfBKXAL7Yk3cVTw5Kl9vz8aTloZ\n2rfnnYTUlsxFhpudo7F+PWhPvAmjgidPRa1V4+i9WMwcQsszxujZZ55FYdkttHc4R3viTRgVPHkq\n207uQ9kNF4QG0vXFjZGZwAxBzkGQjNlCL7aaMCp48lSWJcTA1UwGCwveScjTkrnIcLFFNOLiQHvi\nTRQVPKm1h5qHOJb/O2YNncQ7CqkDb1tvFJTew8CxZ2hPvImigie1Fn18L9gNV0wZ3413FFIHZgIz\nyFxk6DSElmlMVY0FHx8fDycnJzg6OiIiIqLa8+fOnYO3tzdatGiBJUuWVHlOIpHA1dW1ys24ifGL\nTIxB/+YytGzJOwmpK5mLDCdLY3Apm9GeeBOks+C1Wi1mz56N+Ph4ZGRkYNOmTTh79myVYywtLbFs\n2TK888471cYLBALI5XKkpaVBoVDUb3LCxYPSB0gr2oU3R9DyjCnwtPFEUWkRnn/pNO2JN0E6C16h\nUMDBwQESiQQikQghISGIjY2tcoyVlRU8PDwgEoke+zlquus3MS4bUuIhyO0H2eguvKOQeiAQCCDr\nLUPzfjG0J94E6Sx4lUoFW1vbysdisRgqlUrvTy4QCDBixAh4eHhg5cqVT5+SGIwVh2LgaSFDs2a8\nk5D6InORQZ4Xg67WjPbEmxihricFAkGdPnlSUhKsra2Rl5cHPz8/ODk5wcfHp9pxCxYsqHzf19cX\nvr6+dfpzScMoLi3GqQe7sdl/Ke8opB55dPOAWquG39R0rF3rhpEjeScijyOXyyGXy2s1RmfB29jY\nQKl8dBd2pVIJsVis9ye3/vsOEFZWVpg4cSIUCkWNBU8M1+rDcTDLHYAAPyveUUg9qlimeVgSjbhP\n3HDvHujyEwbo35PfhQsX1jhG5xKNh4cHMjMzkZOTA7VajejoaIwfP/6xx/57rb24uBgFBQUAgKKi\nIuzduxd9+/atMRAxXFF/xuDZ9sEQ6pwWEGMU3CcYv1+KwQg/RnviTYjOH1WhUIjIyEj4+/tDq9Ui\nLCwMzs7OiIqKAgCEh4cjNzcXAwYMQH5+PszMzPDDDz8gIyMDN2/eRGBgIABAo9FgypQpGEn/9jNa\nReoiZKj3IHb0/3hHIQ1A2lUKAPCZnIa13/fDa69xDkTqhYBx3uYiEAhop40RWLInGvO3rEHxT/Ew\no9PjTNKHCR+iVKvFhtAIyOVAr168ExFd9OlO+lElevk5OQbPdZJRuZswmYsMW8/GYMpURnviTQT9\nuJIa5T8swIXS/Xh33ETeUUgDcuvihmbmzTBgwnGsWUMXIDMFVPCkRsv3/4HmN5/F8EEdeEchDahi\nN83x4hhMmAC89x7vRKSuqOBJjdYoojGsiwx1PC2CGAGZiwwxGTFYvJhh926gltuuiYGhgic63X+Y\njyxtIuZNmMA7CmkEfTr3QWtRa5wrPIrly4EZM4AHD3inIk+LCp7o9N3unWid9xye9aAzX5oCgUBQ\nPos/E4Px4wGpFNDjfBpioKjgyROVsTJEpa7ASJsQWp5pQoJdgvHrqV9x98FdLFsGrF4NpKXxTkWe\nBhU8eaL3ti7D7VsCfB8WzDsKaUTOVs4I6h2EuXvmoksX4KuvgFdfBTQa3slIbVHBk8c6pcrE92mf\nIWLQGtiKzXnHIY1s8YjF+PPKn/j9/O8IDQU6dgS+/ZZ3KlJbdCYrqUZbpoXtf59D1ztBOLFiLu84\nhJODOQfx4m8v4tTMU7h3vSMGDgRSUgAHB97JCEBnspKnNPuXpbh9W4C9n83hHYVw9JzkOUxynoT/\nxP8HdnbAhx8Cr70G0HzMeFDBkyqOXbqAn859gahRa9DJkr49mrovh3+JZGUyYs/FYs4coKAAWLWK\ndyqiL1qiIZW0ZVp0/dAHztoQHPqaZu+k3OHLhxG8NRinZp6CKssSI0YAf/0F/H27B8IJLdGQWpke\n9T2KCkSIWzCbdxRiQHy6+0DmIsOc+DlwdS1fpplN3yJGgQqeAAAOZZzDxstf4lfZGli0pm8LUtWi\n4YugUCmw/ex2fPQRcOYM8NtvvFORmtASDYFGq0WneYMxqM1UxH1CUzPyeElXkhC0JQinZp7C2dRO\nCAkpL3q6vR8f+nQnFTzBxG++QsKV3cj7JgHNm9HsnTzZ/+35P6gKVNgctBmzZgGlpcDKlbxTNU20\nBk9qtPvYWcTe+grbQ1dTuZMafT7sc6TlpmFbxjYsXgzExwOJibxTkSehn+gm7KFag8m/Toes02cY\n3r8H7zjECLQUtcTaCWsxe/dslJjnYcUKuuKkIaux4OPj4+Hk5ARHR0dERERUe/7cuXPw9vZGixYt\nsGTJklqNJXyN+/IbNIcFNr4dzjsKMSLett6Y2ncq3oh7A+PGAR4ewIIFvFORx2I6aDQaZm9vz7Kz\ns5larWZubm4sIyOjyjE3b95kx44dY/Pnz2fffPNNrcb+vf6vKwJpIJsPnGaCeZ1Y8tls3lGIESpW\nF7Ney3qx6NPRLDeXsc6dGUtN5Z2qadGnO3XO4BUKBRwcHCCRSCASiRASEoLY2Ngqx1hZWcHDwwMi\nkajWYwkfBUUaTN8+HWGSz+HlJOEdhxihlqKWWBuwFnN2z4HA4ia++goICyt/0ZUYDp0Fr1KpYGtr\nW/lYLBZDpVLp9YnrMpY0LP9Pv0K7Fu3xU/hrvKMQI+Yl9kKoWyhm7ZqFadMYrKzoipOGRqjrSUEd\n7vJQm7EL/rGA5+vrC19f36f+c4luP+04haOC73DyjdQ6/f8lBAAWDl2IflH9EJMRjaioEAwYAAQG\nAo6OvJOZHrlcDnktb5Krs+BtbGygVCorHyuVSojFYr0+cW3GLqBXaBrFzVulmJ0wHf/x/BJ9n3mG\ndxxiAloIW2BtwFqM2zQO6a8Pxfz5XTBjBnDgAGBGe/Tq1b8nvwv1uJeizv8FHh4eyMzMRE5ODtRq\nNaKjozFKmPkWAAATiUlEQVR+/PjHHsv+teG+NmNJ4/BbGAHrtlZYMiWMdxRiQgbaDESYNAwzd83E\nm28yFBfTFScNRk2vwsbFxbGePXsye3t7tmjRIsYYYz/++CP78ccfGWOMXb9+nYnFYta2bVvWvn17\nZmtrywoKCp449mleCSZ1F7H2L2b+fid2/voV3lGICXpY+pC5LHdhG9M3sr/+YqxTJ8ZUKt6pTJs+\n3UmXKmgCcpSlcIwYiPeHvYnPAl/hHYeYqOPXjmPMr2NwMvwkVnxlTRcka2B0LRoCxgDHGQthZnsU\n5/+7i15YJQ3qowMf4dTNU4gO2AGpVIDPPwcmTeKdyjRRwRN8sPQkvsn1Q+Y7aZB01O8FckKeVomm\nBB4rPTBv8DxI8qdCJiu/4mSHDryTmR662FgTdypDja8zQ/HZkK+p3EmjaC5sjnUB6/D2nrdh53YN\nEycC777LO1XTRTN4E6XRAN2nf4IOvVNx6oPfaWmGNKr/Jv4Xablp2DB6J/r2FWDtWmDYMN6pTAst\n0TRhry88gTWlz+PSeydh07Yb7zikiVFr1RiwcgDe9noblldDMXcukJ4OtGrFO5npoCWaJurIUTV+\nvj0dX/stoXInXDQzb4Z1Aevw7r53IR2iwoABdMVJHmgGb2KKi4FnQj+GxOsvHHs7lpZmCFcL5Quh\nuKbA6uF/wNVVgLg4oH9/3qlMAy3RNEHBbx3HTosxuPTeSVi3seYdhzRxpdpSDPx5IOYMnAPzUy/j\n22+BY8eAf118ljwFWqJpYnbtKcFvbDp+GP0tlTsxCCJzEdZOWIt5++dh6ISr6NIF+Nd9gUgDohm8\nibh7F+j+yofoOywDf87eTkszxKB8dvAzJCmT8L/BuzFggABHjgA9e/JOZdxoiaYJ8X/lGA7bjsWl\nd/9CV4uuvOMQUkWpthReq7wwy2MWCg6FYfv28pt10xUnnx4t0TQR6399CHn7UKwY/z2VOzFIFUs1\n7ye8jwkvXUFJCfDzz7xTmT6awRs5lQpwnPk+vMZkIuG1rbQ0QwzaF4e+wMHLB7HEfQ+GDRPg5EnA\nxoZ3KuNESzQmjjHAK+goMlwnIOv//kIXiy68IxGik6ZMA6+fvRDePxzK2BlITwe2bwdoXlJ7tERj\n4n5Y/hDpdtPx08SlVO7EKAjNhFgXsA4fHvgQU2dfxoULwLZtvFOZLprBG6nz5wHpe+9hyIRsxL+y\nhXccQmpl8Z+Lsf/Sfiy034fJkwU4fRro2JF3KuNCSzQmqrQUcBuTDJVPILLeTodVayvekQipFU2Z\nBoNXD8bL7i/j9NrXUVwMrF7NO5VxoSUaE7Vw0QNc7jcdPwcuo3InRkloJsSaCWvw0YGPEP5+NhIS\ngP37eacyPTUWfHx8PJycnODo6IiIiIjHHjNnzhw4OjrCzc0NaWlplR+XSCRwdXWFVCrFwIED6y91\nE3bsGPDtyY8wwkWKyS5BvOMQ8tR6W/XGe4Pfw38SwhC5vAzh4eXXUiL1SNcNWzUaDbO3t2fZ2dlM\nrVYzNzc3lpGRUeWYXbt2sVGjRjHGGEtJSWGenp6Vz0kkEnb79m2dN4WtIQL5h6IixmwH/8naf9aV\n5RXl8Y5DSJ1ptBrmudKTLVcsZy+8wNj//R/vRMZDn+7UOYNXKBRwcHCARCKBSCRCSEgIYmNjqxyz\nc+dOhIaGAgA8PT1x79493Lhx45+/QOr9l1JT9fa8Ytx77mWsmrQcnVp14h2HkDozNzPH2oC1+G/i\nf/HWp5ewYQNw/DjvVKZDZ8GrVCrY2tpWPhaLxVCpVHofIxAIMGLECHh4eGDlypX1mbvJ2bcP2Jg7\nHyP7eCDQOZB3HELqjVMnJ7z/7Pt4989X8NXXZQgLK99IQOpOZ8Hre1bkk2bpf/75J9LS0rB7924s\nX74chw8frn1Cgjt3gCkfHEYzaTSiJizjHYeQeveW11tQa9W433MFunUDvv6adyLTINT1pI2NDZRK\nZeVjpVIJsVis85irV6/C5u9zj7t1K7+bkJWVFSZOnAiFQgEfH59qf86Cf9zqxdfXF76+vrX+QkxZ\n+OwiqEe/jHWB/4NlK0vecQipdxVLNYNWDcJvX41C4FB7TJoE9OrFO5nhkMvlkMvltRuka4G+tLSU\n2dnZsezsbFZSUlLji6zJycmVL7IWFRWx/Px8xhhjhYWFbNCgQWzPnj1P9UJBU7ZpE2MdXpjDQmKm\n8I5CSIP79si3zGe1D/vuey3z8WFMq+WdyHDp0506l2iEQiEiIyPh7++P3r17Izg4GM7OzoiKikJU\nVBQAYPTo0bCzs4ODgwPCw8OxYsUKAEBubi58fHzg7u4OT09PjB07FiNHjnyK31tNl0oFzIw4CKHr\nViwfu5R3HEIa3BzPOShjZWADl6G0FPjpJ96JjBudyWqgysoAv9FFSPN2xbqQ7zGu1zjekQhpFJm3\nM+G9yhvrhyQjdJwjXXHyCehSBUYsMhL4PPVN+I3Lxy+B63jHIaRR/ZDyA7ZkbMGwKwfxV5o5duyg\nK07+G12qwEidPw/MX5kIOG/H0lHf845DSKN70/NNmAnM0Gb4UmRlAVvoenpPhWbwBqa0FPAaUojL\no12xLngZxvQcwzsSIVxk3cmC9ypvREqTMHdaT5w5Q1ec/CdaojFCCxYAq2/MwnD/B1gTsIZ3HEK4\nWnZ0GTad3oR+fx1GUYE51tCPRCVaojEyCgXww84EaOx/x3fPf8c7DiHcvTHwDTQzb4ZuE7/HgQPl\nZ3QT/dEM3kAUFwNuAwpwf0pfrJv8P4xyHMU7EiEG4dLdSxi4ciAWOfyJxe844dQpoHVr3qn4oyUa\nIzJ7NrCn2esY8lwpVk1YxTsOIQZlxbEV+CX9F/RI/BPWXcyxZAnvRPzREo2R2LsXiDm+Dw9s4vCt\n/7e84xBicF73eB0thS3R86VvsXFj+X0RSM1oBs/ZnTtAX498aF7ri/VBP8HfwZ93JEIMUvbdbAxY\nOQDvWR3Ghu+ckZoKiES8U/FDM3gj8MYbQMeQdzDBxZ/KnRAdenTogc+HfY5tmunoJtbgq694JzJ8\nVPAcbdoEJN3Yg/tWe/DNyG94xyHE4IX3D0eb5m3gPusbfPcdcO4c70SGjZZoOLlyBeg36D6Eb/bF\nhsmrMcJuBO9IhBiFy/cuw2OlB8KbybFqsQvGjAGGDweGDgW6duWdrvHQLhoDUlAAJCUBiYmAXA6c\nOQO4fBgGqasIP479kXc8QozKT6k/YeWJlfjZKxmH5EIkJAAHD5ZflGzYsPLCf+45oH173kkbDhU8\nR0VFVQv91Cmgf3/Ad2gZJAPO4rpFHFaeXIH019PRpnkb3nEJMSqMMfhv8IddBzu87P4ypNZSmKMZ\nTpwADhwAEhKA5GTA2bm87IcNAwYPBlq14p28/lDBN6LiYuDIkUeF/tdfgFQKeA29C0vXo8hvl4zj\nuclQqBTo1KoTvG29MddzLvp36887OiFG6VrBNXx28DMcuXoEWXey4N7VHd5i7/I3W29YNuuGlJTy\nsj9wADh5EvDwKC/84cOBAQOMexcOFXwDevCgfIZQUehpaYCrWxn6DM2AhVMybrdKwbHryVDmK+HR\nzaPyG89T7InOrTvzjk+ISSkoKcCxa8eQrExG8tVkpFxNQetmreEl9qr82XOwkEKR3AwJCeWlf+kS\n8Oyzj5Z0XF0BMyPadkIFX48ePgRSUh4Vemoq4Cy9C7shRyGyS8Z182Sk5j6anVd8U/Xt0hdCM523\nviWE1DPGGDLvZFYp/Mw7mZWzfC+xF3q18sb54zaVSzq3b5e/UFtR+I6Ohn0Neir4OigpAY4efVTo\nimNlsPPMgI1XMspsknFZm4xrhVerzM69xF6wam3FOzoh5DEeN8tvJWpVOSGzb+aNvFNSHDxQPssX\nCB6V/bBhgFjM+yuoigq+FtTq8qs5VhR6ysm7sPFMQSdpCh52SsalEgWsWltVKXOanRNivBhjyLqT\nheSryZWlXzHL97TxgsTcG8XnvZEqt0FiImBp+ajwfX2BTp345q+Xgo+Pj8fcuXOh1Wrx6quvYt68\nedWOmTNnDnbv3o1WrVph7dq1kEqleo/lVfBqNXD8eHmhJ8q1OJJ1FlbuyWjjkoz7bZJxT3sVHjY0\nOyekKXnSLN9L7I3uZt5QX/LC+YNSJB9uDju7R4U/ZAhgYdG4WfXqTqaDRqNh9vb2LDs7m6nVaubm\n5sYyMjKqHLNr1y42atQoxhhjKSkpzNPTU++xf/9y0RWh3qjVjCUnM7ZoEWNDR91hLfvGsS4hH7Nn\n5o9grT5ty+y+c2DTfpvGVihWsLTraaxUW1plfGJiYqPkrCvKWb+MIacxZGTMOHOWlZWxC7cusHUn\n17HXf3+duf3PjbX6ohXzWunNQla/zYIXbmHeI6+y1q0ZGzSIsY8/ZiwxkbGHDxs+pz7dqXN9QaFQ\nwMHBARKJBAAQEhKC2NhYODs7Vx6zc+dOhIaGAgA8PT1x79495ObmIjs7u8axDUmjAU6cABIOaLFL\nkYHjN5LRqmcKYJuMB95X4dFtAIZIvOElnqPX7Fwul8PX17dRstcF5axfxpDTGDICxplTIBDA0dIR\njpaOeMntJQDls/zj146XL+20WIcLLV5HB/9WEDbzQlKuN7Z96Y3LR6XwHtC8cktmv36AuXnjfy06\nC16lUsHW1rbysVgsxtGjR2s8RqVS4dq1azWObQh7D97H/KgjSL+bDFGPZJRaKdBxQGdM6OENX3tv\neNvOQZ/OfWjtnBDyVNo0b4OhPYZiaI+hAKqv5d8WrwMbkgllMzfE3PbG8o+8McplMH761rrRs+ps\nOYGee4SYAbxIWuF8aQIe9IvErF7eGN7rP/ASe6FTK86vhhBCTNbjZvmF6kIcUx0rL323dRBbnwPw\nUeOH07V+k5yczPz9/SsfL1q0iC1evLjKMeHh4WzTpk2Vj3v16sVyc3P1GssYY/b29gwAvdEbvdEb\nvdXizd7evm5r8B4eHsjMzEROTg66deuG6OhobNq0qcox48ePR2RkJEJCQpCSkoL27dujS5cusLS0\nrHEsAGRlZemKQAgh5CnpLHihUIjIyEj4+/tDq9UiLCwMzs7OiIqKAgCEh4dj9OjRiIuLg4ODA1q3\nbo01a9boHEsIIaRxcD/RiRBCSMMwqEvrLFmyBGZmZrhz5w7vKI/18ccfw83NDe7u7hg+fDiUSiXv\nSI/17rvvwtnZGW5ubggMDMT9+/d5R6pmy5YtcHFxgbm5OU6cOME7TjXx8fFwcnKCo6MjIiIieMd5\nrFdeeQVdunRB3759eUfRSalUYujQoXBxcUGfPn2wdOlS3pEe6+HDh/D09IS7uzt69+6NDz74gHek\nJ9JqtZBKpRg3bpzuA2tcpW8kV65cYf7+/kwikbDbt2/zjvNY+fn5le8vXbqUhYWFcUzzZHv37mVa\nrZYxxti8efPYvHnzOCeq7uzZs+z8+fPM19eXpaam8o5Thb4n6fF26NAhduLECdanTx/eUXS6fv06\nS0tLY4wxVlBQwHr27GmQf5+MMVZUVMQYY6y0tJR5enqyw4cPc070eEuWLGEvvvgiGzdunM7jDGYG\n//bbb+MrA7+Lbps2j27MUVhYiE68L0bxBH5+fjD7+7qnnp6euHr1KudE1Tk5OaFnz568YzzWP0/w\nE4lElSfpGRofHx906NCBd4wade3aFe7u7gAACwsLODs749q1a5xTPV6rv+8IolarodVq0bFjR86J\nqrt69Sri4uLw6quv1rhF3SAKPjY2FmKxGK6urryj1Gj+/Pl45plnsG7dOrz//vu849Ro9erVGD16\nNO8YRuVJJ++RusvJyUFaWho8PT15R3mssrIyuLu7o0uXLhg6dCh69+7NO1I1b731Fr7++uvKSZwu\njXY6p5+fH3Jzc6t9/IsvvsCXX36JvXv3Vn6spt9KDelJORctWoRx48bhiy++wBdffIHFixfjrbfe\nqtw11NhqygmU/902a9YML774YmPHA6BfRkOk7wl+pHYKCwsRFBSEH374ARaNfWUuPZmZmeHkyZO4\nf/8+/P39De7yCn/88Qc6d+4MqVQKuVxe4/GNVvD79u177MdPnz6N7OxsuLm5ASj/50f//v2hUCjQ\nuXPj3/noSTn/7cUXX+Q6M64p59q1axEXF4eEhIRGSlSdvn+XhsbGxqbKC+hKpRJiQ7sYuJEpLS3F\npEmTMHXqVAQEBPCOU6N27dphzJgxOH78uEEV/JEjR7Bz507ExcXh4cOHyM/Px0svvYT169c/fkCj\nvCJQC4b8IuuFCxcq31+6dCmbOnUqxzRPtnv3bta7d2+Wl5fHO0qNfH192fHjx3nHqKK0tJTZ2dmx\n7OxsVlJSYrAvsjLGWHZ2tsG/yFpWVsamTZvG5s6dyzuKTnl5eezu3buMMcaKi4uZj48P279/P+dU\nTyaXy9nYsWN1HmMQa/D/ZMj/PP7ggw/Qt29fuLu7Qy6XY8mSJbwjPdabb76JwsJC+Pn5QSqVYtas\nWbwjVbN9+3bY2toiJSUFY8aMwahRo3hHqvTPk/R69+6N4OBggzxJ74UXXsCgQYNw4cIF2Nraclsu\nrElSUhI2bNiAxMRESKVSSKVSxMfH845VzfXr1zFs2DC4u7vD09MT48aNw/Dhw3nH0qmmvqQTnQgh\nxEQZ3AyeEEJI/aCCJ4QQE0UFTwghJooKnhBCTBQVPCGEmCgqeEIIMVFU8IQQYqKo4AkhxET9P7t0\nai08xMNdAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x634af28>"
       ]
      }
     ],
     "prompt_number": 217
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# create a (discreet) random variable with poissionian distribution\n",
      "X = stats.poisson(3.5) # photon distribution for a coherent state with n=3.5 photons"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 218
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "n = arange(0,15)\n",
      "\n",
      "fig, axes = plt.subplots(3,1, sharex=True)\n",
      "\n",
      "# plot the probability mass function (PMF)\n",
      "axes[0].step(n, X.pmf(n))\n",
      "\n",
      "# plot the commulative distribution function (CDF)\n",
      "axes[1].step(n, X.cdf(n))\n",
      "\n",
      "# plot histogram of 1000 random realizations of the stochastic variable X\n",
      "axes[2].hist(X.rvs(size=1000));"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAEACAYAAABS29YJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHjVJREFUeJzt3X9M03f+B/BnPbpsEVTwRwXqDlYQqMqPkx86j4UpoJJI\nhhrPHzsJolnYmZ2nue3OywaYnOKW5Y7pLXEOnZ4e6h83IQvWHd66OJSxmzqX4U4koIDSyYApcl+B\n+vn+wdlbaSn9tP300w99PpIm0H4+fb9AePHx3ff7WZUgCAKIiGhcmyB3AUREJD02eyIiP8BmT0Tk\nB9jsiYj8AJs9EZEfYLMnIvIDYzZ7g8GA2NhYREdHY+/evTaPHz9+HAkJCYiPj8eiRYtw9epVy2MR\nERGIj49HUlISUlNTPVs5ERE5TeVonb3ZbEZMTAxqa2sRHh6OlJQUVFZWIi4uznLMxYsXodfrMXny\nZBgMBpSUlKC+vh4AEBkZiS+//BIhISHSfyVERDQqh1f2DQ0NiIqKQkREBNRqNdauXYuqqiqrYxYu\nXIjJkycDANLS0tDe3m71OPdsERHJz2Gz7+jowKxZsyyfa7VadHR0jHp8RUUFcnJyLJ+rVCpkZmYi\nOTkZBw8e9EC5RETkigBHD6pUKqef6JNPPsGhQ4dQV1dnua+urg6hoaG4e/cusrKyEBsbi/T0dNer\nJSIilzhs9uHh4Whra7N83tbWBq1Wa3Pc1atXsWXLFhgMBgQHB1vuDw0NBQBMnz4deXl5aGhosGn2\nUVFRaG5uduuLICLyNzqdDjdu3HD+BMGBwcFB4ZlnnhFaWlqEhw8fCgkJCUJjY6PVMTdv3hR0Op1w\n8eJFq/sfPHgg3Lt3TxAEQejr6xOeffZZ4ezZszZjjFGCzysuLpa7BLewfnkpuX4l1y4Iyq9fbO90\neGUfEBCA/fv3Y+nSpTCbzSgsLERcXBwOHDgAAHjppZewa9cu9PT0oKioCACgVqvR0NCAzs5OrFy5\nEgAwNDSEDRs2IDs726W/YERE5B6HzR4Ali9fjuXLl1vd99JLL1k+fv/99/H+++/bnPfMM8/gypUr\nHiiRiIjcxR20bsrIyJC7BLewfnkpuX4l1w4ov36xHG6q8koBKhXX4hMRiSS2d/LKnojID7DZExH5\nAUmD0MY6l4iIvMTRusyhoSFBp9MJLS0twsDAgN119hcuXBB6e3sFQRCEM2fOCGlpaU6f68paUV8T\nHCwIgHS34GC5v0Ii8kVie6dkQWjOnDse9PRI2eqHn5+IyF2SBaGJPZeIiKQjWRCamHOJiEhakgWh\nOXsuAJSUlFg+zsjI8LvNDkREYzEajTAajS6f73BT1dDQEGJiYnDu3DmEhYUhNTXV5p2qbt26hcWL\nF+PYsWNYsGCBqHMB5W+qUqmG59aV+vxEpExie6dkQWijnUtERN7HuAQ3SX3lHRIi7Yqc4GCgu1u6\n5yciaXj0yn488EazlJLUjZivoxP5h3F/Zc85b8f4/SFSJgahERGRDTZ7IiI/4HYQ2rfffouFCxfi\nySefxNtvv231WEREBOLj45GUlITU1FTPVU1ERKI4fIHWbDZj69atqK2tRXh4OFJSUpCbm2u1hHLq\n1KnYt28fTp8+bXO+SqWC0WhESEiI5ysnIiKnuR2ENn36dCQnJ0OtVtt9DiUvqyQiGi88GoQ2kkql\nQmZmJpKTk3Hw4EHXqyQiIrd4LAjNnrq6OoSGhuLu3bvIyspCbGws0tPT3XpOIiISzyNBaKMJDQ0F\nMDzVk5eXh4aGBrvNnkFoRESOyR6E9lhJSQmCgoKwY8cOAEB/fz/MZjOCgoLw4MEDZGdno7i4GNnZ\n2dYFcFOVrPj9IVImrwehdXZ2IiUlBffu3cOECRNQXl6OxsZGfPfdd1i5ciWA4T8aGzZssGn0RETk\nHYxL8HP8/hApE+MSiIjIxrhPvSTHgoOlTb5khDKRb+A0DkmK338iaXAah4iIbLDZExH5AUlTL8c6\nl4iIvMPhnL3ZbEZMTIxV6uXITVV3797FzZs3cfr0aQQHB1s2VTlzLsA5+/GO338iaXh0zt6d1Etn\nzv1f0dLdpH6PWCIiJZAs9VLMuYIg3Y3L/oiIJEy9FHMug9CIiBxzNwhNstRLMef+uNkTEZGtkRfC\npaWlos53OI2TnJyMpqYmtLa2YmBgACdPnkRubq7dY0e+UCDmXCIikpZkqZeBgYF2zyUiIu8b93EJ\nJC8uvSSSBuMSiIjIBlMvSVJM1STyDZzGIUXjNBH5K07jEBGRDbeD0ADglVdeQXR0NBISEnD58mXL\n/REREYiPj0dSUhJSU1M9VzUREYnicM7ebDZj69atVmFmubm5Vksoa2pqcOPGDTQ1NeHzzz9HUVER\n6uvrAQz/N8NoNCIkJETar4KIiBxyOwituroa+fn5AIC0tDT09vbCZDJZHud8PBGR/NwOQnN0jEql\nQmZmJpKTk3Hw4EFP1k1ERCJ4JAhttKv3zz77DGFhYbh79y6ysrIQGxuL9PR0m+MYhEZE5JjsQWgj\nj2lvb0d4eDgAICwsDMBw5n1eXh4aGhrGbPZERGRL9iC03NxcHD16FABQX1+PKVOmQKPRoL+/H/fv\n3wcAPHjwAB9//DHmzZsnqjgiIvIMt4PQcnJyUFNTg6ioKEycOBGHDx8GAHR2dmLlypUAgKGhIWzY\nsAHZ2dkSfznkb7hDl8g53EFL5AB36JKv4g5aIiKywWZPROQH2OyJiPwAmz0RkR+QNAjNmXOVzp1N\nDr6A9Tv2eLWPVLegIGnrlxJ/dpTFYbN/HIRmMBjQ2NiIyspKXLt2zeqYHwehvffeeygqKnL63PFA\n6T8wrN+x7u7h1ThS3fr6pK1fSvzZURZJgtA6OzudOpeIiLxDsiC027dvj3kukb978knppoiYLE4/\nJmkQmjN0Op3T4/gqsRkVvob1y02a+nt6pN1dDCj/e6/k+nU6najjJQlC02q1GBwcHPNcALhx44ao\ngomISDzJgtCcOZeIiLxDsiC00c4lIiLvkz0IjYiIpMcdtEREfoDNnojID7DZExH5ATZ7IiI/4HKz\n37RpEzQajcP3lR0tII2IiLzL5WZfUFAAg8Ew6uOjBaQREZH3udzs09PTERwcPOrj9gLSTCaTq8MR\nEZEbJJuztxeQ1t7eLtVwRETkgMMdtO4auV/LXuBZVFQUmpubpSyDiGjc0el0orLFJLuytxeQFh4e\nbnNcc3MzBEFQ7K24uFj2Gli/dM8fHCwAkPJWLNlzBwcr+3uv9J8dqW9iL5Ila/ajBaQRedLevdK+\nbSAg7TtVFRdL99zd3fL+25BvcXkaZ926dfj000/R1dWFWbNmobS0FIODgwAcB6QRedL//d9wYyMi\nx1xu9pWVlWMes3//flefXjEyMjLkLsEtSq8fyJC7ALco+fuv5NoB5dcvluyplyqVCjKXQBIKCRl+\nxySpBAdzuoL8k9jeyWZPklKpOM1CJAWxvZPZOEREfoDNnojID7jV7A0GA2JjYxEdHY29e/faPN7V\n1YVly5YhMTERc+fOxQcffODOcERE5CKX5+zNZjNiYmJQW1uL8PBwpKSkoLKy0up9ZktKSvDw4UPs\n2bMHXV1diImJgclkQkDA/xYBcc5eXnwBlUiZvDZn39DQgKioKERERECtVmPt2rWoqqqyOiY0NBT3\n7t0DANy7dw9Tp061avQkv54eaTcNsdET+QaXO6+9oLPPP//c6pgtW7Zg8eLFCAsLw/3793Hq1CnX\nKyUiIpe5fGVvL9RspN27dyMxMRG3b9/GlStX8Ktf/Qr37993dUgiInKRy1f2I4PO2traoNVqrY65\ncOEC/vCHPwAYTmiLjIzEv//9byQnJ1sdV1JSYvk4IyPD73a2ERGNxWg0wmg0uny+yy/QDg0NISYm\nBufOnUNYWBhSU1NtXqDdvn07Jk+ejOLiYphMJsyfPx9Xr15FSEjI/wrgC7Sy4qYnImUS2ztdvrIP\nCAjA/v37sXTpUpjNZhQWFiIuLg4HDhwAMByGtnPnThQUFCAhIQGPHj3Cm2++adXoiYjIOxiX4Od4\nZU+kTF67sifv8MY6eCIa/3hl7+N45U1E9jAIjYiIbLDZExH5AZeb/VghaMDwutCkpCTMnTuXa+eJ\niGTk0py9MyFovb29WLRoEc6ePQutVouuri5MmzbNtgDO2TvEOXsisscrc/bOhKD97W9/w6pVqyy7\nau01eiIi8g6Xmr29ELSOjg6rY5qamtDd3Y3nn38eycnJ+Otf/+pepURE5DKX1tk7E4I2ODiIS5cu\n4dy5c+jv78fChQuxYMECREdHuzIkERG5waVm70wI2qxZszBt2jQ89dRTeOqpp/Dcc8/hq6++stvs\nGYRGROSYLEFozoSgffvtt9i6dSvOnj2Lhw8fIi0tDSdPnoRer7cugC/QOsQXaInIHq/EJTgTghYb\nG4tly5YhPj4eEyZMwJYtW2waPREReQfjEnwcr+yJyB4GoXkZg8qISAl4Ze8mXnkTkRwYhEZERDbY\n7ImI/ICkQWgA8MUXXyAgIAB///vfXR2KiIjc5FKzN5vN2Lp1KwwGAxobG1FZWYlr167ZPe61117D\nsmXLFD0vT0SkdJIFoQHAvn37sHr1akyfPt3tQomIyHWSBaF1dHSgqqoKRUVFAJzL0yEiImm41Oyd\nadzbtm1DWVmZZXkQp3GIiOQjWRDal19+ibVr1wIAurq6cObMGajVauTm5to8H4PQiIgc89kgtB8r\nKCjAihUrsHLlStsCuKmKiEg0nwlCIyIi38G4BDfxyp6I5MC4BCIisjHuUy+ZSklE5AfTOJxmIaLx\niNM4RERkw61mP1YY2vHjx5GQkID4+HgsWrQIV69edWc4IiJykcvTOGazGTExMaitrUV4eDhSUlJs\n1tpfvHgRer0ekydPhsFgQElJCerr660L4DQOEZFoXpvGcSYMbeHChZg8eTIAIC0tDe3t7a4OR0RE\nbnC52TsThvZjFRUVyMnJcXU4IiJyg8tLL8WkWH7yySc4dOgQ6urqXB2OiIjc4HKzdyYMDQCuXr2K\nLVu2wGAwIHiURekMQiMickyWIDTAuTC0W7duYfHixTh27BgWLFhgvwC+QEtEJJpXgtAA58LQdu3a\nhZ6eHssbmKjVajQ0NLg6JBERuYg7aImIFMhrV/aeJOU7FjK7hojIR5o9r7yJiKTFbBwiIj/AZk9E\n5AfY7ImI/ICkqZcA8MorryA6OhoJCQm4fPmyO8P5JHc2OfgC1i8vJdev5NoB5dcvlsvN3mw2Y+vW\nrTAYDGhsbERlZSWuXbtmdUxNTQ1u3LiBpqYmvPfee5b19uOJ0n9gWL+8lFy/kmsHlF+/WJKmXlZX\nVyM/Px/AcOplb28vTCaTexUTEZFokqZe2juGMcdERN4neerlyB1eI8/T6XSiEjR9UWlpqdwluIX1\ny0vJ9Su5dkDZ9et0OlHHS5p6OfKY9vZ2hIeHWx1z48YNV0sgIiInuTyNk5ycjKamJrS2tmJgYAAn\nT55Ebm6u1TG5ubk4evQoAKC+vh5TpkyBRqNxr2IiIhJN0tTLnJwc1NTUICoqChMnTsThw4c9VjgR\nETlP9tRLIiKSHnfQEhH5ATZ7IiI/wGZPROQH2OyJiPyAqGbf1taG559/HnPmzMHcuXPxzjvvAABK\nSkqg1WqRlJSEpKQknDlzxnLOnj17EB0djdjYWHz88ceerZ6IiJwiajVOZ2cnOjs7kZiYiL6+Psyf\nPx+nT5/GqVOnEBQUhO3bt1sd39jYiPXr1+OLL75AR0cHMjMzcf36dUyYwP9QEBF5k6iuO3PmTCQm\nJgIAAgMDERcXZ8nDsfc3o6qqCuvWrYNarUZERASioqLQ0NDggbKJiEgMly+xW1tbcfnyZSxYsAAA\nsG/fPiQkJKCwsBC9vb0AgNu3b1tFKNgLSyMiIum5tIO2r68Pq1evRnl5OQIDA1FUVIQ33ngDAPD6\n669jx44dqKiosHvuyNCzqKgoNDc3u1IGEZHf0ul0orLFRF/ZDw4OYtWqVXjxxRfxwgsvAABmzJgB\nlUoFlUqFzZs3W6ZqnAlCa25uhiAIir0VFxfLXgPrl78Of6xfybWPh/rFXiSLavaCIKCwsBB6vR7b\ntm2z3H/nzh3Lxx9++CHmzZsHYDgI7cSJExgYGEBLSwuampqQmpoqqkAiInKfqGmcuro6HDt2DPHx\n8UhKSgIA7N69G5WVlbhy5QpUKhUiIyMtYWh6vR5r1qyBXq9HQEAA3n33XcVn1xMRKZGoZv/zn/8c\njx49srl/+fLlo56zc+dO7Ny5U3xlCpGRkSF3CW5h/fJScv1Krh1Qfv1iyZ56qVKpIHMJRESKI7Z3\ncncTEZEfYLMnIvIDbPZERH7AI0Fo3d3dyMrKwuzZs5GdnW3ZQQv4ZxDapEkhln0HUt4mTQqR+0sl\nIoXwSBDa4cOHMW3aNLz66qvYu3cvenp6UFZW5lQQ2nh8gXZ4eak3vqbx970jIudI+gLtaEFo1dXV\nyM/PBwDk5+fj9OnTABiERkTkK9wOQktLS4PJZIJGowEAaDQamEwmAAxCIyLyFS4Hoa1atQrl5eUI\nCgqyeuzxfPJo7D1WUlJi+TgjI8PvNjsQEY3FaDTCaDS6fL7oZv84CO2Xv/ylJQhNo9Ggs7MTM2fO\nxJ07dzBjxgwAzgWhAdbNnoiIbI28EC4tLRV1vkeC0HJzc3HkyBEAwJEjRyx/BHwtCM1bq2SIiHyN\nqNU4n332GZ577jnEx8dbmtqePXuQmpqKNWvW4NatW4iIiMCpU6cwZcoUAMNBaYcOHUJAQADKy8ux\ndOlS6wK8uBrHm6tkuBqHiKQktnf6VTYOmz0RjRfMxiEiIhsurcYhXxHgldcIgoKCce9et+TjEJF0\nOI0jzUjjbhxOFxH5Fk7jEBGRDVHNftOmTdBoNJb3mAWG18hrtVokJSUhKSkJZ86csTzmjyFoRES+\nSNQ0zvnz5xEYGIiNGzfi66+/BjC8sD8oKAjbt2+3OtaZEDSA0zhKGYfTOES+RdJpnPT0dAQHB9vc\nb29AhqAREfkOj8zZ79u3DwkJCSgsLLRk2TMEjYjId7i99LKoqAhvvPEGAOD111/Hjh07UFFRYffY\n0ZYJMgiNiMgxrwehjfQ49AwANm/ejBUrVgBwPgQNYBAaEdFYvBqEZs+dO3csH3/44YeWlTq+FoJG\nROTPRF3Zr1u3Dp9++im6urowa9YslJaWwmg04sqVK1CpVIiMjMSBAwcAAHq9HmvWrIFer0dAQADe\nffddJkIqlnd26gLcrUskFZ/YQXv06FHJxwkODv7vFNP4WhI5vsYZHovLPInGpsjUy8DAFyUfp6/v\n2H8/Gk/NcbyNMzwWmz3R2BTZ7L3XsODFsTiOq2Ox2RONjdk4RERkg82eiMgPuB2E1t3djaysLMye\nPRvZ2dmWHbQAg9CIiHyFqGZfUFAAg8FgdV9ZWRmysrJw/fp1LFmyBGVlZQCGg9BOnjyJxsZGGAwG\nvPzyy3j06JHnKiciIqe5HYRWXV2N/Px8AEB+fj5Onz4NgEFoRES+xO05e5PJBI1GAwDQaDQwmUwA\nGIRGRORLPPoCrUqlcrjTkjtoiYjk4XYQmkajQWdnJ2bOnIk7d+5YgtHEBKEBJT/6OOO/NyIieszd\n1EvRm6paW1uxYsUKyztVvfrqq5g6dSpee+01lJWVobe3F2VlZZZ3qmpoaLC8U9WNGzdsru65qYrj\njByLm6qIxiZ2U5VbQWi7du3C7373O6xZswYVFRWIiIjAqVOnADAIjYjIlzAuQbKxOI6rY/HKnmhs\njEsgIiIbbPZERH6AzZ6IyA+4vfSSyLO8865YfEcs8jcee4E2IiICkyZNwk9+8hOo1Wo0NDSgu7sb\nv/jFL3Dz5k3LSp0pU6ZYF8AXaDmOLGPxhWBSNtleoFWpVDAajbh8+bIlA2e0kDQiIvIuj87Zj/wr\nM1pIGhEReZdHr+wzMzORnJyMgwcPAhg9JI2IiLzLYy/Q1tXVITQ0FHfv3kVWVhZiY2OtHh8rJI2I\niKTjsWYfGhoKAJg+fTry8vLQ0NAwakiarZIffZwBBqGR9Ljqh5TF60Fo9vT398NsNiMoKAgPHjxA\ndnY2iouLUVtbazckzaoArsbhOLKMxVU/pGxiV+N4pNm3tLQgLy8PADA0NIQNGzbg97//Pbq7u7Fm\nzRrcunWLSy85jo+NxWZPyiZLs3cHmz3HkWcsNntSNgahERGRDTZ7IiI/wGZPROQH2OyJiPyA5M3e\nYDAgNjYW0dHR2Lt3r9TDERGRHZI2e7PZjK1bt8JgMKCxsRGVlZW4du2alEPKwCh3AW4yyl2Am4xy\nFzCGAMvucalvkyaFePUrc2eDjy9Qev1iSdrsGxoaEBUVhYiICKjVaqxduxZVVVVSDikDo9wFuMko\ndwFuMspdwBiGMLzEc7Rb8RiPO3+7f7/HW18UAOU3S6XXL5akzb6jowOzZs2yfK7VatHR0SHlkER+\nzDv/i/D2/yDIMyR9pypns0cmTVohZRkAgPv3ubmFxrvH/4uQ1v37asvvdmlpqWTjMFfIsyRt9uHh\n4Whra7N83tbWBq1Wa3WMTqdDc/NHUpYxghThV/Z+4L2V8OmJcZz5hfVmYqnYsVxtOL7yb+TJhjl+\nkmXv3++RPKxOyj9WUtPpdKKOlzQuYWhoCDExMTh37hzCwsKQmpqKyspKxMXFSTUkERHZIemVfUBA\nAPbv34+lS5fCbDajsLCQjZ6ISAayB6EREZH0ZN1Bq+QNV21tbXj++ecxZ84czJ07F++8847cJYlm\nNpuRlJSEFSukf4Hc03p7e7F69WrExcVBr9ejvr5e7pJE2bNnD+bMmYN58+Zh/fr1ePjwodwlObRp\n0yZoNBrMmzfPcl93dzeysrIwe/ZsZGdno7e3V8YKHbNX/29/+1vExcUhISEBK1euxA8//CBjhY7Z\nq/+xt99+GxMmTEB3t+MXs2Vr9krfcKVWq/GnP/0J33zzDerr6/GXv/xFUfUDQHl5OfR6vSLfLvLX\nv/41cnJycO3aNVy9elVR04Otra04ePAgLl26hK+//hpmsxknTpyQuyyHCgoKYDAYrO4rKytDVlYW\nrl+/jiVLlti8MZEvsVd/dnY2vvnmG3z11VeYPXs29uzZI1N1Y7NXPzB80fmPf/wDP/3pT8d8Dtma\nvdI3XM2cOROJiYkAgMDAQMTFxeH27dsyV+W89vZ21NTUYPPmzYpbkvrDDz/g/Pnz2LRpE4Dh14Ym\nT54sc1XOmzRpEtRqNfr7+zE0NIT+/n6Eh4fLXZZD6enpCA4Otrqvuroa+fn5AID8/HycPn1ajtKc\nYq/+rKwsTJgw3ALT0tLQ3t4uR2lOsVc/AGzfvh1vvvmmU88hW7MfTxuuWltbcfnyZaSlpclditN+\n85vf4K233rL8sCtJS0sLpk+fjoKCAvzsZz/Dli1b0N/fL3dZTgsJCcGOHTvw9NNPIywsDFOmTEFm\nZqbcZYlmMpmg0WgAABqNBiaTSeaKXHfo0CHk5OTIXYYoVVVV0Gq1iI+Pd+p42X7TlTh1YE9fXx9W\nr16N8vJyBAYGyl2OUz766CPMmDEDSUlJiruqB4aX9F66dAkvv/wyLl26hIkTJ/r0FMJIzc3N+POf\n/4zW1lbcvn0bfX19OH78uNxlueXx7lol+uMf/4gnnngC69evl7sUp/X392P37t1W+wTG+l2Wrdk7\ns+HK1w0ODmLVqlV48cUX8cILL8hdjtMuXLiA6upqREZGYt26dfjnP/+JjRs3yl2W07RaLbRaLVJS\nUgAAq1evxqVLl2Suynn/+te/8Oyzz2Lq1KkICAjAypUrceHCBbnLEk2j0aCzsxMAcOfOHcyYMUPm\nisT74IMPUFNTo7g/ts3NzWhtbUVCQgIiIyPR3t6O+fPn47vvvhv1HNmafXJyMpqamtDa2oqBgQGc\nPHkSubm5cpUjmiAIKCwshF6vx7Zt2+QuR5Tdu3ejra0NLS0tOHHiBBYvXoyjR4/KXZbTZs6ciVmz\nZuH69esAgNraWsyZM0fmqpwXGxuL+vp6/Oc//4EgCKitrYVer5e7LNFyc3Nx5MgRAMCRI0cUdcED\nDK8GfOutt1BVVYUnn3xS7nJEmTdvHkwmE1paWtDS0gKtVotLly45/oMryKimpkaYPXu2oNPphN27\nd8tZimjnz58XVCqVkJCQICQmJgqJiYnCmTNn5C5LNKPRKKxYsULuMkS7cuWKkJycLMTHxwt5eXlC\nb2+v3CWJsnfvXkGv1wtz584VNm7cKAwMDMhdkkNr164VQkNDBbVaLWi1WuHQoUPC999/LyxZskSI\njo4WsrKyhJ6eHrnLHNXI+isqKoSoqCjh6aeftvz+FhUVyV3mqB7X/8QTT1i+/z8WGRkpfP/99w6f\ng5uqiIj8gPKWYhARkWhs9kREfoDNnojID7DZExH5ATZ7IiI/wGZPROQH2OyJiPwAmz0RkR/4f7aH\n2SYMZiGJAAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x8406908>"
       ]
      }
     ],
     "prompt_number": 219
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# create a (continous) random variable with normal distribution\n",
      "Y = stats.norm()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 221
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "x = linspace(-5,5,100)\n",
      "\n",
      "fig, axes = plt.subplots(3,1, sharex=True)\n",
      "\n",
      "# plot the probability distribution function (PDF)\n",
      "axes[0].plot(x, Y.pdf(x))\n",
      "\n",
      "# plot the commulative distributin function (CDF)\n",
      "axes[1].plot(x, Y.cdf(x));\n",
      "\n",
      "# plot histogram of 1000 random realizations of the stochastic variable Y\n",
      "axes[2].hist(Y.rvs(size=1000), bins=50);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x835ba90>"
       ]
      }
     ],
     "prompt_number": 222
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "X.mean(), X.std(), X.var() # poission distribution"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 223,
       "text": [
        "(3.5, 1.8708286933869707, 3.5)"
       ]
      }
     ],
     "prompt_number": 223
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Y.mean(), Y.std(), Y.var() # normal distribution"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 224,
       "text": [
        "(0.0, 1.0, 1.0)"
       ]
      }
     ],
     "prompt_number": 224
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# statistical tests:\n",
      "t_statistic, p_value = stats.ttest_ind(X.rvs(size=1000), X.rvs(size=1000))\n",
      "\n",
      "print \"t-statistic =\", t_statistic\n",
      "print \"p-value =\", p_value"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "t-statistic = -0.216308742862\n",
        "p-value = 0.828769176122\n"
       ]
      }
     ],
     "prompt_number": 225
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Since the p value is very large we cannot reject the hypothesis that the two sets of random data have *different* means. To test if the mean of a single sample of data has mean 0.1 (the true mean is 0.0):"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "stats.ttest_1samp(Y.rvs(size=1000), 0.1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 227,
       "text": [
        "(array(-2.4326794508336436), 0.015162229922928263)"
       ]
      }
     ],
     "prompt_number": 227
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Low p-value means that we can reject the hypothesis that the mean of Y is 0.1."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Y.mean()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 228,
       "text": [
        "0.0"
       ]
      }
     ],
     "prompt_number": 228
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "stats.ttest_1samp(Y.rvs(size=1000), Y.mean())"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 229,
       "text": [
        "(array(-0.3414786959804177), 0.73281505241920053)"
       ]
      }
     ],
     "prompt_number": 229
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "stats?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 193
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "numpy.random?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 194
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Interpolation: `scipy.interpolate`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Interpolation is simple and convenient in scipy: The `interp1d` function, when given arrays describing X and Y data, returns and object that behaves like a function that can be called for an arbitrary value of x (in the range covered by X), and it returns the corresponding interpolated y value:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import interpolate as intp"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 206
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def f(x):\n",
      "    return sin(x)\n",
      "\n",
      "n = arange(0, 10)  \n",
      "x = linspace(0, 9, 100)\n",
      "\n",
      "y_meas = f(n) + 0.1 * np.random.randn(len(n)) # simulate measurement with noise\n",
      "y_real = f(x)\n",
      "\n",
      "linear_interpolation = intp.interp1d(n, y_meas)\n",
      "y_interp1 = linear_interpolation(x)\n",
      "\n",
      "cubic_interpolation = intp.interp1d(n, y_meas, kind='cubic')\n",
      "y_interp2 = cubic_interpolation(x)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 210
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = plt.subplots(figsize=(10,4))\n",
      "ax.plot(n, y_meas, 'bs', label='noisy data')\n",
      "ax.plot(x, y_real, 'k', lw=2, label='true function')\n",
      "ax.plot(x, y_interp1, 'r', label='linear interp')\n",
      "ax.plot(x, y_interp2, 'g', label='cubic interp')\n",
      "ax.legend(loc=3);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x7ef85c0>"
       ]
      }
     ],
     "prompt_number": 211
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "intp?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 214
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Numerical Integration: `scipy.integrate`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Numerical evaluation of a function of the type\n",
      "\n",
      "$\\displaystyle \\int_a^b f(x) dx$\n",
      "\n",
      "is called *numerical quadrature*, or simply *quadature*. SciPy provides a series of functions for different kind of quadrature, for example the `quad`, `dblquad` and `tplquad` for single, double and triple integrals, respectively."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import integrate as intg"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 68
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The `quad` function takes a large number of optional arguments, which can be used to fine-tune the behaviour of the function (try `help(quad)` for details).\n",
      "\n",
      "The basic usage is as follows:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# define a simple function for the integrand\n",
      "def f(x):\n",
      "    return x\n",
      "\n",
      "x_lower = 0 # the lower limit of x\n",
      "x_upper = 1 # the upper limit of x\n",
      "\n",
      "val, abserr = intg.quad(f, x_lower, x_upper)\n",
      "\n",
      "print \"integral value =\", val, \", absolute error =\", abserr "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "integral value = 0.5 , absolute error = 5.55111512313e-15\n"
       ]
      }
     ],
     "prompt_number": 69
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "If we need to pass extra arguments to integrand function we can use the `args` keyword argument:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def integrand(x, n):\n",
      "    \"\"\"\n",
      "    Bessel function of first kind and order n. \n",
      "    \"\"\"\n",
      "    return jn(n, x)\n",
      "\n",
      "\n",
      "x_lower = 0  # the lower limit of x\n",
      "x_upper = 10 # the upper limit of x\n",
      "\n",
      "val, abserr = intg.quad(integrand, x_lower, x_upper, args=(3,))\n",
      "\n",
      "print val, abserr "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "0.736675137081 9.3891268825e-13\n"
       ]
      }
     ],
     "prompt_number": 72
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "For simple functions we can use a lambda function (name-less function) instead of explicitly defining a function for the integrand:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "val, abserr = intg.quad(lambda x: exp(-x ** 2), -Inf, Inf)\n",
      "\n",
      "print \"numerical  =\", val, abserr\n",
      "\n",
      "analytical = sqrt(pi)\n",
      "print \"analytical =\", analytical"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "numerical  = 1.77245385091 1.42026367818e-08\n",
        "analytical = 1.77245385091\n"
       ]
      }
     ],
     "prompt_number": 74
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "As show in the example above, we can also use 'Inf' or '-Inf' as integral limits.\n",
      "\n",
      "Higher-dimensional integration works in the same way:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def integrand(x, y):\n",
      "    return exp(-x**2-y**2)\n",
      "\n",
      "x_lower = 0  \n",
      "x_upper = 10\n",
      "y_lower = 0\n",
      "y_upper = 10\n",
      "\n",
      "val, abserr = intg.dblquad(integrand, x_lower, x_upper, lambda x : y_lower, lambda x: y_upper)\n",
      "\n",
      "print val, abserr "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "0.785398163397 2.13695246107e-13\n"
       ]
      }
     ],
     "prompt_number": 76
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Note how we had to pass lambda functions for the limits for the y integration, since these in general can be functions of x."
     ]
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Example: ODE"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "SciPy provides two different ways to solve ODEs: An API based on the function `odeint`, and object-oriented API based on the class `ode`. Usually `odeint` is easier to get started with, but the `ode` class offers some finer level of control.\n",
      "\n",
      "Here we will use the `odeint` functions. For more information about the class `ode`, try `help(ode)`. It does pretty much the same thing as `odeint`, but in an object-oriented fashion.\n",
      "\n",
      "To use `odeint`, first import it from the `scipy.integrate` module:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy.integrate import odeint, ode"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 80
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Note: the import above just imports those methods, so we don't have to use the `intg.method` because we've imported them directly. From my readng, this is generally discouraged. "
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "A system of ODEs are usually formulated in standard form before it is attacked numerically. The standard form is:\n",
      "\n",
      "$y' = f(y, t)$\n",
      "\n",
      "where \n",
      "\n",
      "$y = [y_1(t), y_2(t), ..., y_n(t)]$ \n",
      "\n",
      "and $f$ is some function that gives the derivatives of the function $y_i(t)$. To solve an ODE we need to know the function $f$ and an initial condition, $y(0)$.\n",
      "\n",
      "Note that higher-order ODEs can always be written in this form by introducing new variables for the intermediate derivatives.\n",
      "\n",
      "Once we have defined the Python function `f` and array `y_0` (that is $f$ and $y(0)$ in the mathematical formulation), we can use the `odeint` function as:\n",
      "\n",
      "    y_t = odeint(f, y_0, t)\n",
      "\n",
      "where `t` is and array with time-coordinates for which to solve the ODE problem. `y_t` is an array with one row for each point in time in `t`, where each column corresponds to a solution `y_i(t)` at that point in time. \n",
      "\n",
      "We will see how we can implement `f` and `y_0` in Python code in the examples below."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's consider a physical example: The double compound pendulum, described in some detail here: http://en.wikipedia.org/wiki/Double_pendulum"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "Image(url='http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<img src=\"http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg\"/>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 82,
       "text": [
        "<IPython.core.display.Image at 0x62bdef0>"
       ]
      }
     ],
     "prompt_number": 82
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The equations of motion of the pendulum are given on the wiki page:\n",
      "\n",
      "${\\dot \\theta_1} = \\frac{6}{m\\ell^2} \\frac{ 2 p_{\\theta_1} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_2}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}$\n",
      "\n",
      "${\\dot \\theta_2} = \\frac{6}{m\\ell^2} \\frac{ 8 p_{\\theta_2} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_1}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}.$\n",
      "\n",
      "${\\dot p_{\\theta_1}} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + 3 \\frac{g}{\\ell} \\sin \\theta_1 \\right ]$\n",
      "\n",
      "${\\dot p_{\\theta_2}} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) +  \\frac{g}{\\ell} \\sin \\theta_2 \\right]$\n",
      "\n",
      "To make the Python code simpler to follow, let's introduce new variable names and the vector notation: $x = [\\theta_1, \\theta_2, p_{\\theta_1}, p_{\\theta_2}]$\n",
      "\n",
      "${\\dot x_1} = \\frac{6}{m\\ell^2} \\frac{ 2 x_3 - 3 \\cos(x_1-x_2) x_4}{16 - 9 \\cos^2(x_1-x_2)}$\n",
      "\n",
      "${\\dot x_2} = \\frac{6}{m\\ell^2} \\frac{ 8 x_4 - 3 \\cos(x_1-x_2) x_3}{16 - 9 \\cos^2(x_1-x_2)}$\n",
      "\n",
      "${\\dot x_3} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + 3 \\frac{g}{\\ell} \\sin x_1 \\right ]$\n",
      "\n",
      "${\\dot x_4} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) +  \\frac{g}{\\ell} \\sin x_2 \\right]$"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "g = 9.82\n",
      "L = 0.5\n",
      "m = 0.1\n",
      "\n",
      "def dx(x, t):\n",
      "    \"\"\"\n",
      "    The right-hand side of the pendulum ODE\n",
      "    \"\"\"\n",
      "    x1, x2, x3, x4 = x[0], x[1], x[2], x[3]\n",
      "    \n",
      "    dx1 = 6.0/(m*L**2) * (2 * x3 - 3 * np.cos(x1-x2) * x4)/(16 - 9 * np.cos(x1-x2)**2)\n",
      "    dx2 = 6.0/(m*L**2) * (8 * x4 - 3 * np.cos(x1-x2) * x3)/(16 - 9 * np.cos(x1-x2)**2)\n",
      "    dx3 = -0.5 * m * L**2 * ( dx1 * dx2 * np.sin(x1-x2) + 3 * (g/L) * np.sin(x1))\n",
      "    dx4 = -0.5 * m * L**2 * (-dx1 * dx2 * np.sin(x1-x2) + (g/L) * np.sin(x2))\n",
      "    \n",
      "    return [dx1, dx2, dx3, dx4]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 91
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# choose an initial state\n",
      "x0 = [pi/4, pi/2, 0, 0]\n",
      "# time coodinate to solve the ODE for: from 0 to 10 seconds\n",
      "t = linspace(0, 10, 250)\n",
      "# solve the ODE problem\n",
      "x = intg.odeint(dx, x0, t)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 92
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# plot the angles as a function of time\n",
      "\n",
      "fig, axes = plt.subplots(1,2, figsize=(12,4))\n",
      "axes[0].plot(t, x[:, 0], 'r', label=\"theta1\")\n",
      "axes[0].plot(t, x[:, 1], 'b', label=\"theta2\")\n",
      "\n",
      "\n",
      "x1 = + L * np.sin(x[:, 0])\n",
      "y1 = - L * np.cos(x[:, 0])\n",
      "\n",
      "x2 = x1 + L * np.sin(x[:, 1])\n",
      "y2 = y1 - L * np.cos(x[:, 1])\n",
      "    \n",
      "axes[1].plot(x1, y1, 'r', label=\"pendulum1\")\n",
      "axes[1].plot(x2, y2, 'b', label=\"pendulum2\")\n",
      "axes[1].set_ylim([-1, 0])\n",
      "axes[1].set_xlim([1, -1]);"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x63976d8>"
       ]
      }
     ],
     "prompt_number": 98
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "A **very** simple animation in python"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# TODO - doesn't work in ipython inline display - fix!\n",
      "from IPython.display import clear_output\n",
      "import time\n",
      "fig, ax = plt.subplots(figsize=(4,4))\n",
      "\n",
      "for t_idx, tt in enumerate(t[:200]):\n",
      "\n",
      "    x1 = + L * np.sin(x[t_idx, 0])\n",
      "    y1 = - L * np.cos(x[t_idx, 0])\n",
      "\n",
      "    x2 = x1 + L * np.sin(x[t_idx, 1])\n",
      "    y2 = y1 - L * np.cos(x[t_idx, 1])\n",
      "    \n",
      "    ax.cla()    \n",
      "    ax.plot([0, x1], [0, y1], 'r.-')\n",
      "    ax.plot([x1, x2], [y1, y2], 'b.-')\n",
      "    ax.set_ylim([-1.5, 0.5])\n",
      "    ax.set_xlim([1, -1])\n",
      "\n",
      "    display(fig)\n",
      "    clear_output()\n",
      "    \n",
      "    time.sleep(0.1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x64488d0>"
       ]
      }
     ],
     "prompt_number": 99
    },
    {
     "cell_type": "heading",
     "level": 3,
     "metadata": {},
     "source": [
      "Example: Damped Harmonic Oscillator"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "ODE problems are important in computational physics, so we will look at one more example: the damped harmonic oscillation. This problem is well described on the wiki page: http://en.wikipedia.org/wiki/Damping\n",
      "\n",
      "The equation of motion for the damped oscillator is:\n",
      "\n",
      "$\\displaystyle \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} + 2\\zeta\\omega_0\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\omega^2_0 x = 0$\n",
      "\n",
      "where $x$ is the position of the oscillator, $\\omega_0$ is the frequency, and $\\zeta$ is the damping ratio. To write this second-order ODE on standard form we introduce $p = \\frac{\\mathrm{d}x}{\\mathrm{d}t}$:\n",
      "\n",
      "$\\displaystyle \\frac{\\mathrm{d}p}{\\mathrm{d}t} = - 2\\zeta\\omega_0 p - \\omega^2_0 x$\n",
      "\n",
      "$\\displaystyle \\frac{\\mathrm{d}x}{\\mathrm{d}t} = p$\n",
      "\n",
      "In the implementation of this example we will add extra arguments to the RHS function for the ODE, rather than using global variables as we did in the previous example. As a consequence of the extra arguments to the RHS, we need to pass an keyword argument `args` to the `odeint` function:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def dy(y, t, zeta, w0):\n",
      "    \"\"\"\n",
      "    The right-hand side of the damped oscillator ODE\n",
      "    \"\"\"\n",
      "    x, p = y[0], y[1]\n",
      "    \n",
      "    dx = p\n",
      "    dp = -2 * zeta * w0 * p - w0**2 * x\n",
      "\n",
      "    return [dx, dp]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 104
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# initial state: \n",
      "y0 = [1.0, 0.0]\n",
      "# time coodinate to solve the ODE for\n",
      "t = linspace(0, 10, 1000)\n",
      "w0 = 2*np.pi*1.0"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 105
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# solve the ODE problem for three different values of the damping ratio\n",
      "\n",
      "y1 = intg.odeint(dy, y0, t, args=(0.0, w0)) # undamped\n",
      "y2 = intg.odeint(dy, y0, t, args=(0.2, w0)) # under damped\n",
      "y3 = intg.odeint(dy, y0, t, args=(1.0, w0)) # critial damping\n",
      "y4 = intg.odeint(dy, y0, t, args=(5.0, w0)) # over damped"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 106
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = plt.subplots()\n",
      "ax.plot(t, y1[:,0], 'k', label=\"undamped\", linewidth=0.25)\n",
      "ax.plot(t, y2[:,0], 'r', label=\"under damped\")\n",
      "ax.plot(t, y3[:,0], 'b', label=r\"critical damping\")\n",
      "ax.plot(t, y4[:,0], 'g', label=\"over damped\")\n",
      "ax.legend();"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x6878e10>"
       ]
      }
     ],
     "prompt_number": 108
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "integ?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Signal Processing: `scipy.signal`"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import signal as sig"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 211
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "sig?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Object `sig` not found.\n"
       ]
      }
     ],
     "prompt_number": 140
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Sparse Matrices: `scipy.sparse`"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Sparse matrices are often useful in numerical simulations dealing with large systems, if the problem can be described in matrix form where the matrices or vectors mostly contains zeros. Scipy has a good support for sparse matrices, with basic linear algebra operations (such as equation solving, eigenvalue calculations, etc).\n",
      "\n",
      "There are many possible strategies for storing sparse matrices in an efficient way. Some of the most common are the so-called coordinate form (COO), list of list (LIL) form,  and compressed-sparse column CSC (and row, CSR). Each format has some advantanges and disadvantages. Most computational algorithms (equation solving, matrix-matrix multiplication, etc) can be efficiently implemented using CSR or CSC formats, but they are not so intuitive and not so easy to initialize. So often a sparse matrix is initially created in COO or LIL format (where we can efficiently add elements to the sparse matrix data), and then converted to CSC or CSR before used in real calcalations.\n",
      "\n",
      "For more information about these sparse formats, see e.g. http://en.wikipedia.org/wiki/Sparse_matrix\n",
      "\n",
      "When we create a sparse matrix we have to choose which format it should be stored in. For example, "
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import sparse as sp"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 142
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# dense matrix\n",
      "M = array([[1,0,0,0], [0,3,0,0], [0,1,1,0], [1,0,0,1]])\n",
      "M"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 145,
       "text": [
        "array([[1, 0, 0, 0],\n",
        "       [0, 3, 0, 0],\n",
        "       [0, 1, 1, 0],\n",
        "       [1, 0, 0, 1]])"
       ]
      }
     ],
     "prompt_number": 145
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# convert from dense to sparse\n",
      "A = sp.csr_matrix(M)\n",
      "A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 148,
       "text": [
        "<4x4 sparse matrix of type '<type 'numpy.int32'>'\n",
        "\twith 6 stored elements in Compressed Sparse Row format>"
       ]
      }
     ],
     "prompt_number": 148
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# convert from sparse to dense\n",
      "A.todense()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 149,
       "text": [
        "matrix([[1, 0, 0, 0],\n",
        "        [0, 3, 0, 0],\n",
        "        [0, 1, 1, 0],\n",
        "        [1, 0, 0, 1]])"
       ]
      }
     ],
     "prompt_number": 149
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "**Note:** A more efficient way to create sparse matrices: create an empty matrix and populate with using matrix indexing (avoids creating a potentially large dense matrix)"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A = sp.lil_matrix((4,4)) # empty 4x4 sparse matrix\n",
      "A[0,0] = 1\n",
      "A[1,1] = 3\n",
      "A[2,2] = A[2,1] = 1\n",
      "A[3,3] = A[3,0] = 1\n",
      "A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 164,
       "text": [
        "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
        "\twith 6 stored elements in LInked List format>"
       ]
      }
     ],
     "prompt_number": 164
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A.todense()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 165,
       "text": [
        "matrix([[ 1.,  0.,  0.,  0.],\n",
        "        [ 0.,  3.,  0.,  0.],\n",
        "        [ 0.,  1.,  1.,  0.],\n",
        "        [ 1.,  0.,  0.,  1.]])"
       ]
      }
     ],
     "prompt_number": 165
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# converting between different sparse matrix formats:\n",
      "A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 166,
       "text": [
        "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
        "\twith 6 stored elements in LInked List format>"
       ]
      }
     ],
     "prompt_number": 166
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A = sp.csr_matrix(A); A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 167,
       "text": [
        "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
        "\twith 6 stored elements in Compressed Sparse Row format>"
       ]
      }
     ],
     "prompt_number": 167
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "A = sp.csc_matrix(A); A"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 168,
       "text": [
        "<4x4 sparse matrix of type '<type 'numpy.float64'>'\n",
        "\twith 6 stored elements in Compressed Sparse Column format>"
       ]
      }
     ],
     "prompt_number": 168
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# we can compute with sparse matrices like with dense matrices:\n",
      "A.todense()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 169,
       "text": [
        "matrix([[ 1.,  0.,  0.,  0.],\n",
        "        [ 0.,  3.,  0.,  0.],\n",
        "        [ 0.,  1.,  1.,  0.],\n",
        "        [ 1.,  0.,  0.,  1.]])"
       ]
      }
     ],
     "prompt_number": 169
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "sp?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 143
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Image Processing: `scipy.ndimage`"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from scipy import ndimage as ndimg"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ndimg?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Object `ndimg` not found.\n"
       ]
      }
     ],
     "prompt_number": 70
    }
   ],
   "metadata": {}
  }
 ]
}