{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Hamiltonian Monte Carlo (HMC)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns\n", "from functools import partial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use of auxiliary variables \n", "\n", "Slice sampling is a simple MCMC algorithm that introduces the idea of auxiliary variables. The motivation for slice sampling is that if we can sample uniformly from the region under the graph of the target distribution, we will have random samples from the target distribution. In the univariate case, the algorithm is as follows\n", "\n", "- start with some $x$ where $p(x) \\ne 0$\n", "- repeat\n", " - sample $y$ (auxiliary variable) uniformly from 0 to $f(x)$\n", " - draw a horizontal line at $y$ within $p(x)$ (this may consist of multiple intervals)\n", " - sample $x$ from the horizontal segments\n", "\n", "The auxiliary $y$ variable allows us to sample $(x, y)$ points that are in the region under the graph of the target distribution. Only the $x$ variable is used for the Monte Carlo samples - the $y$ variables are simply discarded. This works because the joint distribution is constructed so that it factors $p(x, y) = p(y \\mid x) p(x)$ and so projecting leaves just $p(x)$. The slice sampler is a Markov Chain Monte Carlo method since the next $(x, y)$ position depends only on the current position. Like Gibbs sampling, there is no tuning process and all proposals are accepted. For slice sampling, you either need the inverse distribution function or some way to estimate it. Later we will see that Hamiltonian Monte Carlo also uses auxiliary variables to generate a new proposal in an analogous way.\n", "\n", "A toy example illustrates the process - Suppose we want to draw random samples from the posterior distribution $\\mathcal{N}(0, 1)$ using slice sampling\n", "\n", "Start with some value $x$\n", "- sample $y$ from $\\mathcal{U}(0, f(x))$ - this is the horizontal \"slice\" that gives the method its name\n", "- sample the next $x$ from $f^{-1}(y)$ - this is typically done numerically\n", "- repeat\n", "\n", "Will sketch picture in class to show what is going on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple slice sampler example" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.stats as stats" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "dist = stats.norm(5, 3)\n", "w = 0.5\n", "x = dist.rvs()\n", "\n", "niters = 1000\n", "xs = []\n", "while len(xs) < niters:\n", " y = np.random.uniform(0, dist.pdf(x))\n", " lb = x\n", " rb = x\n", " while y < dist.pdf(lb):\n", " lb -= w\n", " while y < dist.pdf(rb):\n", " rb += w\n", " x = np.random.uniform(lb, rb)\n", " if y > dist.pdf(x):\n", " if np.abs(x-lb) < np.abs(x-rb):\n", " lb = x\n", " else:\n", " lb = y\n", " else:\n", " xs.append(x)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(xs, 20)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notes on the slice sampler:\n", "\n", "- the slice may consist of disjoint pieces for multimodal distributions\n", "- the slice can be a rectangular hyperslab for multivariable posterior distributions\n", "- sampling from the slice (i.e. finding the boundaries at level $y$) is non-trivial and may involve iterative rejection steps - see figure below (from Wikimedia) for a typical approach - the blue bars represent disjoint pieces of the true slice through a bimodal distribution and the black lines are the proposal distribution approximating the true slice\n", "\n", "![Slice sampling algorithm from Wikipedia](http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Summary_of_slice_sampling.png/750px-Summary_of_slice_sampling.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hamiltonian Monte Carlo (HMC)\n", "\n", "HMC uses an auxiliary variable corresponding to the momentum of particles in a potential energy well to generate proposal distributions that can make use of gradient information in the posterior distribution. For reversibility to be maintained, the total energy of the particle has to be conserved - hence we are interested in Hamiltonian systems. The main attraction of HMC is that it works much better than other methods when variables of interest are highly correlated. Because we have to solve problems involving momentum, we need to understand how to numerically solve differential equations in a way that is both accurate (i.e. second order) and preserves total energy (necessary for a Hamiltonian system).\n", "\n", "Example adapted from [MCMC: Hamiltonian Monte Carlo (a.k.a. Hybrid Monte Carlo)](https://theclevermachine.wordpress.com/2012/11/18/mcmc-hamiltonian-monte-carlo-a-k-a-hybrid-monte-carlo/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hamiltonian systems\n", "\n", "In a Hamiltonian system, we consider particles with position $x$ and momentum (or velocity if we assume unit mass) $v$. The total energy of the system $H(x, v) = K(v) + U(x)$, where $K$ is the kinetic energy and $U$ is the potential energy, is conserved. Such a system satisfies the following Hamiltonian equations\n", "\n", "$$\n", "\\begin{align}\n", "\\frac{dx}{dt} &= & \\frac{\\delta H}{dv} \\\\\n", "\\frac{dv}{dt} &= & -\\frac{\\delta H}{dx} \n", "\\end{align}\n", "$$\n", "\n", "Since $K$ depends only on $v$ and $U$ depends only on $x$, we have\n", "$$\n", "\\begin{align}\n", "\\frac{dx}{dt} &= & \\frac{\\delta K}{dv} \\\\\n", "\\frac{dv}{dt} &= & -\\frac{\\delta U}{dx}\n", "\\end{align}\n", "$$\n", "\n", "#### Harmonic oscillator\n", "\n", "We will consider solving a classical Hamiltonian system - that of a undamped spring governed by the second order differential equation\n", "\n", "$$\n", "x'' + x = 0\n", "$$\n", "\n", "We convert this to two first order ODEs by using a dummy variable $x' = v$ to get\n", "\n", "$$\n", "\\begin{align}\n", "x' &= v \\\\\n", "v' &= -x\n", "\\end{align}\n", "$$\n", "\n", "From the Hamiltonian equations above, this is equivalent to a system with kinetic energy $K(v) = \\frac{1}{2}v^2$ and potential energy $U(x) = \\frac{1}{2}x^2$.\n", "\n", "Writing in matrix form,\n", "\n", "$$\n", "A = \\pmatrix{ x' \\\\ v' } = \\pmatrix{0 & 1 \\\\ -1 & 0} \\pmatrix{x \\\\ v}\n", "$$\n", "\n", "and in general, for the state vector $x$,\n", "\n", "$$\n", "x' = Ax\n", "$$\n", "\n", "We note that $A$ is anti- or skew-symmetric ($A^T = -A$), and hence has purely imaginary eigenvalues. Solving $|A - \\lambda I = 0$, we see that the eigenvalues and eigenvectors are $i, \\pmatrix{1\\\\i}$ and $-i, \\pmatrix{1\\\\-i}$. Since the eigenvalues are pure imaginary, we see that the solution for the initial conditions $(x,v) = (1, 0)$ is $x(t) = e^{it}$ and the orbit just goes around a circle with a period of $2\\pi$, neither growing nor decaying. Another weay of seeing this is that the Hamiltonian $H(u, v)$ or sum of potential ($U(x)) = \\frac{1}{2}x^2$) and kinetic energy ($K(v) = \\frac{1}{2}v^2$) is constant, i.e. in vector form, $(x^T x) = \\text{constant}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finite difference methods\n", "\n", "We want to find a finite difference approximation to $u' = Au$ that is **accurate** and **preserves total energy**. If total energy is not preserved, the orbit will either spiral in towards zero or outwards away from the unit circle. If the accuracy is poor, the orbit will not be close to its starting value after $t = 2\\pi$. This gives us an easy way to visualize how good our numerical scheme is. We can also compare the numerical scheme to the Taylor series to evaluate its accuracy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Forward Euler\n", "\n", "The simplest finite difference scheme for integrating ODEs is the forward Euler\n", "\n", "$$\n", "\\frac{u_{n+1} - u_n}{\\Delta t} = A u_n\n", "$$\n", "\n", "Rearranging terms, we get\n", "\n", "$$\n", "u_{n+1} = u_n + \\Delta t A u_n = \\left( I + \\Delta t A \\right) u_n\n", "$$\n", "\n", "Since the eigenvalues of $A$ are $\\pm i$, we see that the eigenvalues of the forward Euler matrix are $1 \\pm i$. Since the absolute value of the eigenvalues is greater than 1, we expect **growing** solutions - i.e. the solution will spiral away from the unit circle." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.linalg as la" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def f_euler(A, u, N):\n", " orbit = np.zeros((N,2))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u = u + dt * A @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64\n", "orbit = f_euler(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3600318484671193" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy and conservation of energy\n", "\n", "We can see that forward Euler is not very accurate and also does not preserve energy since the orbit spirals away from the unit circle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The trapezoidal method\n", "\n", "The trapezoidal method uses the following scheme\n", "\n", "$$\n", "\\frac{u_{n+1} - u_n}{\\Delta t} = \\frac{1}{2} ( A u_{n+1} + A u_{n})\n", "$$\n", "\n", "This is an implicit scheme (because $u_{n+1}$ appears on the RHS) whose solution is\n", "\n", "$$\n", "u_{n+1} = \\left(I - \\frac{\\Delta t}{2} A \\right)^{-1} \\left(I + \\frac{\\Delta t}{2} A \\right) u_{n} = B u_n\n", "$$\n", "\n", "By inspection, we see that the eigenvalues are the complex conjugates of\n", "\n", "$$\n", "\\frac{1 + \\frac{\\Delta t}{2} i}{1 - \\frac{\\Delta t}{2} i}\n", "$$\n", "\n", "whose absolute value is 1 - hence, energy is conserved. If we expand the matrix $B$ using the geometric series and compare with the Taylor expansion, we see that the trapezoidal method has local truncation error $O(h^3)$ and hence accuracy $O(h^2)$, where $h$ is the time step." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def trapezoidal(A, u, N):\n", " p = len(u)\n", " orbit = np.zeros((N,p))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u = la.inv(np.eye(p) - dt/2 * A) @ (np.eye(p) + dt/2 * A) @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64\n", "orbit = trapezoidal(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.005039305635733781" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEDCAYAAAAx/aOOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFwNJREFUeJzt3X+wXGd93/H3RxI2qWljGauOYhvbBE+M0wQZNoYUhhBj\nG4V2LDcliU2aiIwZdTqYpqWk2OOZ0DrJjGlmMOnUNGjA2MlQTHCgqITg2LIp/GGDV0X4Z4WEIbUU\ngy4YkyamBut++8eelc652qsr3V3p3rXer5mdPec5z3nO9+yu7ufs2bOrVBWSJA2tWOoCJEnLi8Eg\nSeowGCRJHQaDJKnDYJAkdRgMkqSOqQ2GJDcn2ZvkoQmN99kkTyX59Jz2jyTZkeShZpvPW6oaJelY\nmNpgAG4B1k9wvD8Afn1E+0eA84CfBn4EeOvcDkluSfK6EevewmRrlKSjbmqDoao+DzzZbkvyE82R\n/7YkX0hy3hGMtxX4vyPaP1MN4EvAGePUKEnL3dQGwzw2A2+vqlcA7wTeP6mBm1NIvw58dlJjStJy\ntGqpC5iUJC8A/jHw8STD5hObZb8EXD9itT1V9YbD3MT7gc9X1ReaMd8AvKdZ9iLgNUn+Fnimql65\nuL2QpKX3nAkGBu9+nqqqdXMXVNUngE8sduAk7wbWAP+yNeYdwB3N8luAW6rqc4vdhiQtF8+ZU0lV\n9TfA15P8MkAGXjbuuEneCrwBuLKqZscdT5KWu4kEw0KXZTZ/pP9zkl1JHkjy8tayjUl2NreNR7DN\njwL3Aj+ZZHeSq4BfA65K8hXgYWDDEYz3BeDjwOub8YanmP4IOA24N8n2JL8zZo2StKxlEj+7neS1\nwN8Cf1xV/2jE8jcCbwfeCLwS+MOqemWSU4A+0AMK2Aa8oqq+O3ZRkqRFmcg7hsO4LHMDg9CoqroP\nODnJWganaO6sqiebMLgTr/uXpCV1rD58Ph14vDW/u2mbr/0gSTYBmwBOOumkV5x33mF/RUGSBGzb\ntu3bVbVmoX5Tc1VSVW1m8D0Fer1e9fv9Ja5IkqZLkr86nH7H6qqkPcCZrfkzmrb52iVJS+RYBcMW\n4Deaq5NeBXyvqp5g8D2AS5OsTrIauLRpkyQtkYmcSmouy3wdcGqS3cC7gecBVNUfAZ9hcEXSLuBp\n4DebZU8m+V3g/mao66vK3xaSpCU0kWCoqisXWF7A2+ZZdjNw8yTqkCSN7znzzWdJ0mQYDJKkDoNB\nktRhMEiSOgwGSVKHwSBJ6jAYJEkdBoMkqcNgkCR1GAySpA6DQZLUYTBIkjoMBklSh8EgSeowGCRJ\nHQaDJKnDYJAkdRgMkqSOiQRDkvVJdiTZleSaEctvTLK9uX01yVOtZftay7ZMoh5J0uKN/X8+J1kJ\n3ARcAuwG7k+ypaoeGfapqn/b6v924ILWEN+vqnXj1iFJmoxJvGO4ENhVVY9V1Q+A24ANh+h/JfDR\nCWxXknQUTCIYTgceb83vbtoOkuQs4Bzg7lbz85P0k9yX5PL5NpJkU9OvPzMzM4GyJUmjHOsPn68A\nbq+qfa22s6qqB7wZeF+Snxi1YlVtrqpeVfXWrFlzLGqVpOPSJIJhD3Bma/6Mpm2UK5hzGqmq9jT3\njwGfo/v5gyTpGJtEMNwPnJvknCQnMPjjf9DVRUnOA1YD97baVic5sZk+FXg18MjcdSVJx87YVyVV\n1bNJrgbuAFYCN1fVw0muB/pVNQyJK4Dbqqpaq78U+ECSWQYhdUP7aiZJ0rGX7t/p6dDr9arf7y91\nGZI0VZJsaz7TPSS/+SxJ6jAYJEkdBoMkqcNgkCR1GAySpA6DQZLUYTBIkjoMBklSh8EgSeowGCRJ\nHQaDJKnDYJAkdRgMkqQOg0GS1GEwSJI6DAZJUofBIEnqMBgkSR0TCYYk65PsSLIryTUjlr8lyUyS\n7c3tra1lG5PsbG4bJ1GPJGnxVo07QJKVwE3AJcBu4P4kW6rqkTldP1ZVV89Z9xTg3UAPKGBbs+53\nx61LkrQ4k3jHcCGwq6oeq6ofALcBGw5z3TcAd1bVk00Y3Amsn0BNkqRFmkQwnA483prf3bTN9c+T\nPJDk9iRnHuG6JNmUpJ+kPzMzM4GyJUmjHKsPn/8HcHZV/QyDdwW3HukAVbW5qnpV1VuzZs3EC5Qk\nDUwiGPYAZ7bmz2ja9quq71TVM83sB4FXHO66kqRjaxLBcD9wbpJzkpwAXAFsaXdIsrY1exnwaDN9\nB3BpktVJVgOXNm2SpCUy9lVJVfVskqsZ/EFfCdxcVQ8nuR7oV9UW4F8nuQx4FngSeEuz7pNJfpdB\nuABcX1VPjluTJGnxUlVLXcMR6/V61e/3l7oMSZoqSbZVVW+hfn7zWZLUYTBIkjoMBklSh8EgSeow\nGCRJHQaDJKnDYJAkdRgMkqQOg0GS1GEwSJI6DAZJUofBIEnqMBgkSR0GgySpw2CQJHUYDJKkDoNB\nktRhMEiSOiYSDEnWJ9mRZFeSa0Ysf0eSR5I8kGRrkrNay/Yl2d7ctkyiHknS4q0ad4AkK4GbgEuA\n3cD9SbZU1SOtbl8GelX1dJJ/Bfwn4FebZd+vqnXj1iFJmoxJvGO4ENhVVY9V1Q+A24AN7Q5VdU9V\nPd3M3gecMYHtSpKOgkkEw+nA46353U3bfK4C/qI1//wk/ST3Jbl8vpWSbGr69WdmZsarWJI0r7FP\nJR2JJP8C6AE/32o+q6r2JHkxcHeSB6vqa3PXrarNwGaAXq9Xx6RgSToOTeIdwx7gzNb8GU1bR5KL\ngeuAy6rqmWF7Ve1p7h8DPgdcMIGaJEmLNIlguB84N8k5SU4ArgA6VxcluQD4AINQ2NtqX53kxGb6\nVODVQPtDa0nSMTb2qaSqejbJ1cAdwErg5qp6OMn1QL+qtgB/ALwA+HgSgP9TVZcBLwU+kGSWQUjd\nMOdqJknSMZaq6Ttd3+v1qt/vL3UZkjRVkmyrqt5C/fzmsySpw2CQJHUYDJKkDoNBktRhMEiSOgwG\nSVKHwSBJ6jAYJEkdBoMkqcNgkCR1GAySpA6DQZLUYTBIkjoMBklSh8EgSeowGCRJHQaDJKnDYJAk\ndUwkGJKsT7Ijya4k14xYfmKSjzXLv5jk7Naya5v2HUneMIl6JEmLN3YwJFkJ3AT8InA+cGWS8+d0\nuwr4blW9BLgReE+z7vnAFcBPAeuB9zfjSZKWyKoJjHEhsKuqHgNIchuwAXik1WcD8B+a6duB/5Ik\nTfttVfUM8PUku5rx7p1AXQd5cPf3+M7fPTPv8iQESGBF0txg5YqQZnpFsn85Td8waGuaDswzbBus\n2x5j9Pa7fZpVR/dtbWNu7WF/Ia06Bq3D+tPaRob70qpB0vFrEsFwOvB4a3438Mr5+lTVs0m+B7yw\nab9vzrqnj9pIkk3AJoAXvehFiyr0vXfu4J4dM4ta93h0IOhGBE8YhF0r9IZBtr9/5s21kWE0dzz2\nLzsQdqMya0W6gT43oIfbOxCicwK9tcMH9rEbpsP9PdT4nf0ZsU0OOmDojjF3n9h/gDL/4zioZ3iw\n0g7+gx/PtMdrzR90QNF5nMLK4cHKihz0XHQPNg7UOvf5P2j7zQvloNdWWvvUHnvO43jQgdacsVeE\nZvyDH7n2usO6Djx3Bz8ew+UrVxw4WFzRTI96XlYkrFgxuF+5ov3vov38j34eRmm/VgFOWLmCFSuO\n7sHbJILhmKiqzcBmgF6vV4sZ47p/cj5vf/0P5xkfoKiCAmZni9mC2Spmq9g3W9SgDmZnmz5VnfUG\nUzRjHGibbSaG/ffNji5/OH4V+7c9Xz9qUM+w9qrav+32WPuXt/dtuI3ZOWO0+gwHmrs/w/6zzcxs\nq972PlervtGPdXfM4T7MHY/WNmvE4zFcd7bZ3uzs6H0+sGq7be7+dx+z4X4Ox58teHbfbOfxnfuY\n02objj7Yt+74zOkz9/EZPk8U7JvvddB6/Kupr2ju249n87gMxx28lmt/XbM1+rkajqnl5a53/Dwv\n+YcvOKrbmEQw7AHObM2f0bSN6rM7ySrgR4HvHOa6E3O0H0zpuWZ4oLKvOTg60D76YGN/QB3iwGV4\nsHXgIGJuiB8YY/8BAu2Arc708CBq7vZHhdrwYGM47nCfmuO7ztjD9gO1F/tmD9Q/6sCtfVDXPrg8\n6KBhGNitAB/9+HcPbIrihSedcHhP3hgmEQz3A+cmOYfBH/UrgDfP6bMF2Mjgs4M3AXdXVSXZAvy3\nJO8Ffhw4F/jSBGqSNAH7T3UQnudlIceNsYOh+czgauAOYCVwc1U9nOR6oF9VW4APAX/SfLj8JIPw\noOn3pww+qH4WeFtV7Ru3JknS4mXUedvlrtfrVb/fX+oyJGmqJNlWVb2F+vnNZ0lSh8EgSeowGCRJ\nHQaDJKnDYJAkdRgMkqQOg0GS1GEwSJI6DAZJUofBIEnqMBgkSR0GgySpw2CQJHUYDJKkDoNBktRh\nMEiSOgwGSVKHwSBJ6hgrGJKckuTOJDub+9Uj+qxLcm+Sh5M8kORXW8tuSfL1JNub27px6pEkjW/c\ndwzXAFur6lxgazM/19PAb1TVTwHrgfclObm1/Leral1z2z5mPZKkMY0bDBuAW5vpW4HL53aoqq9W\n1c5m+q+BvcCaMbcrSTpKxg2G06rqiWb6m8Bph+qc5ELgBOBrrebfb04x3ZjkxEOsuylJP0l/ZmZm\nzLIlSfNZMBiS3JXkoRG3De1+VVVAHWKctcCfAL9ZVbNN87XAecDPAqcA75pv/araXFW9quqtWeMb\nDkk6WlYt1KGqLp5vWZJvJVlbVU80f/j3ztPvHwB/DlxXVfe1xh6+23gmyYeBdx5R9ZKkiRv3VNIW\nYGMzvRH41NwOSU4APgn8cVXdPmfZ2uY+DD6feGjMeiRJYxo3GG4ALkmyE7i4mSdJL8kHmz6/ArwW\neMuIy1I/kuRB4EHgVOD3xqxHkjSmDD4amC69Xq/6/f5SlyFJUyXJtqrqLdTPbz5LkjoMBklSh8Eg\nSeowGCRJHQaDJKnDYJAkdRgMkqQOg0GS1GEwSJI6DAZJUofBIEnqMBgkSR0GgySpw2CQJHUYDJKk\nDoNBktRhMEiSOgwGSVLHWMGQ5JQkdybZ2dyvnqffvtb/97yl1X5Oki8m2ZXkY0lOGKceSdL4xn3H\ncA2wtarOBbY286N8v6rWNbfLWu3vAW6sqpcA3wWuGrMeSdKYxg2GDcCtzfStwOWHu2KSABcBty9m\nfUnS0TFuMJxWVU80098ETpun3/OT9JPcl2T4x/+FwFNV9Wwzvxs4fb4NJdnUjNGfmZkZs2xJ0nxW\nLdQhyV3Aj41YdF17pqoqSc0zzFlVtSfJi4G7kzwIfO9ICq2qzcBmgF6vN992JEljWjAYquri+ZYl\n+VaStVX1RJK1wN55xtjT3D+W5HPABcCfAScnWdW8azgD2LOIfZAkTdC4p5K2ABub6Y3Ap+Z2SLI6\nyYnN9KnAq4FHqqqAe4A3HWp9SdKxNW4w3ABckmQncHEzT5Jekg82fV4K9JN8hUEQ3FBVjzTL3gW8\nI8kuBp85fGjMeiRJY8rgwH269Hq96vf7S12GJE2VJNuqqrdQP7/5LEnqMBgkSR0GgySpw2CQJHUY\nDJKkDoNBktRhMEiSOgwGSVKHwSBJ6jAYJEkdBoMkqcNgkCR1GAySpA6DQZLUYTBIkjoMBklSh8Eg\nSeowGCRJHWMFQ5JTktyZZGdzv3pEn19Isr11+39JLm+W3ZLk661l68apR5I0vnHfMVwDbK2qc4Gt\nzXxHVd1TVeuqah1wEfA08JetLr89XF5V28esR5I0pnGDYQNwazN9K3D5Av3fBPxFVT095nYlSUfJ\nuMFwWlU90Ux/Ezhtgf5XAB+d0/b7SR5IcmOSE+dbMcmmJP0k/ZmZmTFKliQdyoLBkOSuJA+NuG1o\n96uqAuoQ46wFfhq4o9V8LXAe8LPAKcC75lu/qjZXVa+qemvWrFmobEnSIq1aqENVXTzfsiTfSrK2\nqp5o/vDvPcRQvwJ8sqp+2Bp7+G7jmSQfBt55mHVLko6ScU8lbQE2NtMbgU8dou+VzDmN1IQJScLg\n84mHxqxHkjSmcYPhBuCSJDuBi5t5kvSSfHDYKcnZwJnA/5yz/keSPAg8CJwK/N6Y9UiSxrTgqaRD\nqarvAK8f0d4H3tqa/wZw+oh+F42zfUnS5PnNZ0lSh8EgSeowGCRJHQaDJKnDYJAkdRgMkqQOg0GS\n1GEwSJI6DAZJUofBIEnqMBgkSR0GgySpw2CQJHUYDJKkDoNBktRhMEiSOgwGSVKHwSBJ6hgrGJL8\ncpKHk8wm6R2i3/okO5LsSnJNq/2cJF9s2j+W5IRx6pEkjW/cdwwPAb8EfH6+DklWAjcBvwicD1yZ\n5Pxm8XuAG6vqJcB3gavGrEeSNKaxgqGqHq2qHQt0uxDYVVWPVdUPgNuADUkCXATc3vS7Fbh8nHok\nSeM7Fp8xnA483prf3bS9EHiqqp6d0z5Skk1J+kn6MzMzR61YSTrerVqoQ5K7gB8bsei6qvrU5Esa\nrao2A5sBer1eHavtStLxZsFgqKqLx9zGHuDM1vwZTdt3gJOTrGreNQzbF7Rt27ZvJ/mrRdZzKvDt\nRa67HEx7/TD9+2D9S2/a92Gp6j/rcDotGAwTcD9wbpJzGPzhvwJ4c1VVknuANzH43GEjcFjvQKpq\nzWKLSdKvqnmvoFrupr1+mP59sP6lN+37sNzrH/dy1X+WZDfwc8CfJ7mjaf/xJJ8BaN4NXA3cATwK\n/GlVPdwM8S7gHUl2MfjM4UPj1CNJGt9Y7xiq6pPAJ0e0/zXwxtb8Z4DPjOj3GIOrliRJy8Tx+M3n\nzUtdwJimvX6Y/n2w/qU37fuwrOtPlRf4SJIOOB7fMUiSDsFgkCR1HFfBMN+P+S1XSW5OsjfJQ622\nU5LcmWRnc796KWs8lCRnJrknySPNjy3+VtM+FfuQ5PlJvpTkK039/7Fpn6off0yyMsmXk3y6mZ+2\n+r+R5MEk25P0m7apeA0BJDk5ye1J/neSR5P83HKv/7gJhgV+zG+5ugVYP6ftGmBrVZ0LbG3ml6tn\ngX9XVecDrwLe1jzm07IPzwAXVdXLgHXA+iSvYvp+/PG3GFwqPjRt9QP8QlWta137Py2vIYA/BD5b\nVecBL2PwXCzv+qvquLgx+K7FHa35a4Frl7quw6j7bOCh1vwOYG0zvRbYsdQ1HsG+fAq4ZBr3Afh7\nwP8CXsngG6urmvbO62q53Rj8osBWBj9Y+Wkg01R/U+M3gFPntE3Fawj4UeDrNBf6TEv9x807Bub/\nMb9pc1pVPdFMfxM4bSmLOVxJzgYuAL7IFO1DcxpmO7AXuBP4Gkfw44/LwPuAfw/MNvNH9OOVy0QB\nf5lkW5JNTdu0vIbOAWaADzen8z6Y5CSWef3HUzA859TgcGPZX2+c5AXAnwH/pqr+pr1sue9DVe2r\nqnUMjrwvBM5b4pIOW5J/Cuytqm1LXcuYXlNVL2dwGvhtSV7bXrjMX0OrgJcD/7WqLgD+jjmnjZZj\n/cdTMMz3Y37T5ltJ1gI093uXuJ5DSvI8BqHwkar6RNM8VfsAUFVPAfcwOPVycpLhrwYs59fRq4HL\nknyDwe+RXcTgfPe01A9AVe1p7vcy+KWFC5me19BuYHdVfbGZv51BUCzr+o+nYNj/Y37NVRhXAFuW\nuKbF2MLgBwfhCH54cCk0/xnTh4BHq+q9rUVTsQ9J1iQ5uZn+EQafjzzKICDe1HRbtvVX1bVVdUZV\nnc3g9X53Vf0aU1I/QJKTkvz94TRwKYP/OXIqXkNV9U3g8SQ/2TS9HniE5V7/Un/IcSxvDH6/6asM\nzhNft9T1HEa9HwWeAH7I4MjjKgbniLcCO4G7gFOWus5D1P8aBm+RHwC2N7c3Tss+AD8DfLmp/yHg\nd5r2FwNfAnYBHwdOXOpaD2NfXgd8etrqb2r9SnN7ePjvdlpeQ02t64B+8zr678Dq5V6/P4khSeo4\nnk4lSZIOg8EgSeowGCRJHQaDJKnDYJAkdRgMkqQOg0GS1PH/Ad8n+2RxJ4JmAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nl/8H5TR/YF+xqqEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The leapfrog method\n", "\n", "The leapfrog method uses a second order difference to update $u_n$. The algorithm simplifies to the following explicit scheme:\n", "\n", "- First take one half-step for v\n", "- Then take a full step for u\n", "- Then take one final half step for v\n", "\n", "It performs as well as the trapezoidal method, with the advantage of being an explicit scheme and cheaper to calculate, so the leapfrog method is used in HMC." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def leapfrog(A, u, N):\n", " orbit = np.zeros((N,2))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### If we don't care about the intermediate steps, it is more efficient to just take 1/2 steps at the beginning and end" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def leapfrog2(A, u, N):\n", " dt = 2*np.pi/N\n", "\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " for i in range(N-1):\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt * A[1] @ u\n", "\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt/2 * A[1] @ u \n", " return u" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "orbit = leapfrog(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0025229913808033464" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### From Hamiltonians to probability distributions\n", "\n", "The physical analogy considers the negative log likelihood of the target distribution $p(x)$ to correspond to a potential energy well, with a collection of particles moving on the surface of the well. The state of each particle is given only by its position and momentum (or velocity if we assume unit mass for each particle). In a Hamiltonian system, the total energy $H(x,, v) = U(x) + K(v)$ is conserved. From statistical mechanics, the probability of each state is related to the total energy of the system\n", "\n", "$$\n", "\\begin{align}\n", "p(x, v) & \\propto e^{-H(x, v)} \\\\\n", "&= e^{-U(x) - K(v)} \\\\\n", "&= e^{-P(x)}e^{-K(v)} \\\\\n", "& \\propto p(x) \\, p(v)\n", "\\end{align}\n", "$$\n", "\n", "Since the joint distribution factorizes $p(x, v) = p(x)\\, p(v)$, we can select an initial random $v$ for a particle, numerically integrate using a finite difference method such as the leapfrog and then use the updated $x^*$ as the new proposal. The acceptance ratio for the new $x^*$ is\n", "\n", "$$\n", "\\frac{ e^{ -U(x^*)-K(v^*) }} { e^{-U(x)-K(v)} } = e^{U(x)-U(x^*)+K(x)-K(x^*)}\n", "$$\n", "\n", "If our finite difference scheme was exact, the acceptance ration would be 1 since energy is conserved with Hamiltonian dynamics. However, as we have seen, the leapfrog method does not conserve energy perfectly and an accept/reject step is still needed." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "#### Example of HMC\n", "\n", "We will explore how HMC works when the target distribution is bivariate normal centered at zero\n", "\n", "$$\n", "x \\sim N(0, \\Sigma)\n", "$$\n", "\n", "In practice of course, the target distribution will be the posterior distribution and depend on both data and distributional parameters.\n", "\n", "The potential energy or negative log likelihood is proportional to\n", "$$\n", "U(x) = \\frac{x^T\\Sigma^{-1} x}{2}\n", "$$\n", "\n", "The kinetic energy is given by\n", "$$\n", "K(v) = \\frac{v^T v}{2}\n", "$$ \n", "\n", "where the initial $v_0$ is chosen at random from the unit normal at each step.\n", "\n", "To find the time updates, we use the Hamiltonian equations and find the first derivatives of total energy with respect to $x$ and $v$\n", "\n", "$$\n", "\\begin{align}\n", "x' &= \\frac{\\delta K}{\\delta v} &= v \\\\\n", "v' &= -\\frac{\\delta U}{\\delta x} &= -\\Sigma^{-1} x \\\\\n", "\\end{align}\n", "$$\n", "\n", "giving us the block matrix\n", "\n", "$$\n", "A = \\pmatrix{0 & 1 \\\\ -\\Sigma^{-1} & 0}\n", "$$\n", "\n", "By using the first derivatives, we are making use of the gradient information on the log posterior to guide the proposal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### This is what the target distribution should look like" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nOYONjQ0zZsxgyJAhDxXoV4MD+XrXt1wPC8HJ3pH578/imV79KsMWKrpmDpw7yuafd1BUrGB4j2d4\na/Cr1DOt6PtNyErhi6PfcTE2CHdbZz4bNZNu3m2RJIlb+el8ffUgfrFXMNIzYGiznoxo1gt3q4p+\n4DxlESdjA/k9MYDY/IpyRzvjenR1bU5rh0b42HjgYGL1j5btSZJET7fWfHn9IImFGbhbVF1crLi8\nYs0ZM4OqE4WuxoWiVJVVzlL9g1qt5rOdX+FkY8/4Z16qdr+0zHTemz8dPT091i9Z+cBQVyqVLFq0\nCD8/P1588UWmTZtWqxuD/z8TXTHCv0J2djZffvklhw8fxsTEhAkTJjBq1Kgan960Wi1nL1/g2707\nCIuOwNbahhnvTGFI/2cx+FO9+MnAC3z107ckZabS1rsFU196i8b1GwIV/ehbT+/jx0tHMdI3YMqA\nsbzQsT96unrklBSw5eoBfok4h76uHqNbD+SVlgOwNDZHlmUCM6I5FHOey2kRaGQtja3q81bLQXRw\naoqbuf19g1wraykqL6WgrJhSdfmd2aNaDfo6uhjq6WOgo4+pvtHtp/pH+0JwNK3YBSpfWVQt2EPS\nY9GVdHA0r7pT1L4rv2FpYk7bBs2q/H7bkd3cTEnk84kLqi2VkJ2bw7tzP6BUWcqmZWtxdbz/LNHs\n7GymT59OaGgo7733HmPGjBF16rWotsoddwE9AFtJkpKBhbIsb62Nawt1W3l5Obt27WLbtm2UlZUx\nevRoxo0bR716D14lUK1Rc/zsSb7du4P4Wwk4Ozgx+90PeK7PgCrbzcmyzKWwADYe/J6IxBgaOruz\nevIiuvi2Q5IkNFoth6+fYsPvu8kvKeT5Nj15p/dIrM3qUaZWsTPwCN8GHqZco2KYby/GtXkOG5N6\naLQaTt26zt6o08TkJWNpaMawxt3p59Eej3pVB/1KVGXEFaSRXJRNiiKHZEUWOaWFFJaXVC7wVRNT\nfSOaWNenqbUbbRw8sTV++FUUgzNj0dfRo4m1e5Xfq7UajkVfpIt7C+oZ3dmWLiLlJhdjrjOhz0gM\n7pp0FJ4QzTe/7mZgp17VluhVFCuYNH8aOXm5fLlkJY0aeN63PUlJSUycOJHc3Fw+++wzevbs+dDv\nRXg4tVUVM7I2riP8f7ly5QqffvopSUlJdOvWjalTp9Y4/qJUKjnkd4QdB/aQlpmOp3sDFk+fR59u\n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\n+Q6ZELfjyFQO/QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigma = np.array([[1,0.8],[0.8,1]])\n", "mu = np.zeros(2)\n", "ys = np.random.multivariate_normal(mu, sigma, 1000)\n", "sns.kdeplot(ys[:,0], ys[:,1])\n", "plt.axis([-3.5,3.5,-3.5,3.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### This is the HMC posterior" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def E(A, u0, v0, u, v):\n", " \"\"\"Total energy.\"\"\"\n", " return (u0 @ tau @ u0 + v0 @ v0) - (u @ tau@u + v @ v)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def leapfrog(A, u, v, h, N):\n", " \"\"\"Leapfrog finite difference scheme.\"\"\"\n", " v = v - h/2 * A @ u\n", " for i in range(N-1):\n", " u = u + h * v\n", " v = v - h * A @ u\n", "\n", " u = u + h * v\n", " v = v - h/2 * A @ u\n", "\n", " return u, v" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "niter = 100\n", "h = 0.01\n", "N = 100\n", "\n", "tau = la.inv(sigma)\n", "\n", "orbit = np.zeros((niter+1, 2))\n", "u = np.array([-3,3])\n", "orbit[0] = u\n", "for k in range(niter):\n", " v0 = np.random.normal(0,1,2)\n", " u, v = leapfrog(tau, u, v0, h, N)\n", "\n", " # accept-reject\n", " u0 = orbit[k]\n", " a = np.exp(E(A, u0, v0, u, v))\n", " r = np.random.rand()\n", "\n", " if r < a:\n", " orbit[k+1] = u\n", " else:\n", " orbit[k+1] = u0" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n7WPp0qUsX76cffv2YTKZGDhwIKNHj2bgwIFqtK6inIRK7OcIKSXLli1jxowZuFwuRowYwZ133kly\ncs2TEH8LUkpSU1NZuXIl33zzDWlpaQgh6NGjByNGjGDIkCHExcXVd5iKclZQif0c43K5mDNnDh9/\n/DFer5fhw4dz/fXX07Vr1998FnlpaSnr169n9erVrFmzhuzs7IpkPnToUC655JJaHySiKEolldjP\nUYWFhcyZM4dPPvkEt9tNcnIyV111FUOGDKF582OPzjsdAoEAu3fvZsOGDaxdu5bNmzcTDAaJiIig\nb9++DBw4kEGDBqmVuaLUkUrs57jS0lKWLVvGwoUL2bp1KwAtWrSgf//+dO/enXbt2pGUlHTKNW2f\nz0d6ejqpqans2bOHlJQUtm/fjs8XGuvbvn17BgwYwIABA+jWrRuWE2xsUhTl1KnErlTIyMhg9erV\nrFu3jg0bNuD1egGwWCw0adKEZs2aER8fT1xcHBaLBZPJhKZpuN1uSkpKKCoqIjs7m0OHDpFXdkoV\ngNVqpW3btnTr1o3u3bvTrVs34uPjTxSGoih1pBK7clyBQID9+/eTmppKamoqmZmZHD58mNzcXAoK\nCtB1veK2JpMJh8OBw+EgMTGRpk2b0qxZM5o3b0779u1/1YpfUZRf75w881SpmcVioV27drRr1+64\n/y6lJBgMEgwGsVqt6hBoRTkLqcSuVCOEwGw2q5W4opzF1HEziqIoDYxK7IqiKA2MSuyKoigNjErs\niqIoDYxK7IqiKA2MSuyKoigNjErsiqIoDYxK7IqiKA2MSuyKoigNjErsiqIoDYxK7IqiKA2MSuyK\noigNTJ0SuxBimhBiqxBisxBiqRCi6ekKTFEURfl16rpif15K2VVK2R34Anj8NMSkKIqi1EGdEruU\nsqjKhxHAb39qh6IoilJNnYduCyGeBm4BXMCQk9zuLuAugKSkpLo+rKIoinICNR6NJ4RYDjQ+zj9N\nllJ+XuV2jwB2KeWUmh5UHY2nKIpy6k7b0XhSymG1fMwPgCVAjYldURRFOXPq2hVT9eDM0cCuuoWj\nKIqi1FVda+zThRAdAANIB+6ue0iKoihKXdQpsUsprz1dgSiKoiinh9p5qiiK0sCoxK4oitLAqMSu\nKIrSwKjEriiK0sCoxK4oitLAqMSuKIrSwKjEriiK0sCoxK4oitLAqMSuKIrSwKjEriiK0sDUOLb3\njDyoELmEZsucKfFA3hm8/zNNxV9/zubYQcVf3850/C2llAk13aheEvuZJoTYUJuZxb9XKv76czbH\nDir++vZ7iV+VYhRFURoYldgVRVEamIaa2N+q7wDqSMVff87m2EHFX99+F/E3yBq7oijKuayhrtgV\nRVHOWQ02sQshpgkhtgohNgshlgohmtZ3TLUlhHheCLGrLP4FQojo+o7pVAghxgkhdgghDCFEvXcI\n1JYQYqQQYrcQYo8Q4uH6judUCCHeFULkCCG213csv4YQooUQYqUQIqXstXN/fcdUW0IIuxDiJyHE\nlrLYn6z3mBpqKUYI4ZRSFpX9/T6gs5TyrDiTVQgxAlghpdSFEM8BSCkn1XNYtSaE6EToHNw3gX9I\nKTfUc0g1EkKYgF+A4cBBYD1wo5QypV4DqyUhxEVACfC+lPL8+o7nVAkhmgBNpJSbhBAOYCNw9dnw\n/AshBBAhpSwRQliAH4D7pZTr6iumBrtiL0/qZSKAs+YdTEq5VEqpl324Dmhen/GcKinlTinl7vqO\n4xT1BfZIKdOklH7gY2B0PcdUa1LK74Aj9R3HryWlzJRSbir7ezGwE2hWv1HVjgwpKfvQUvanXvNN\ng03sAEKIp4UQGcBNwOP1Hc+vdDvwZX0HcQ5oBmRU+fggZ0liaWiEEK2AHsCP9RtJ7QkhTEKIzUAO\nsExKWa+xn9WJXQixXAix/Th/RgNIKSdLKVsAHwB/rd9oq6sp9rLbTAZ0QvH/rtQmfkU5VUKISGA+\nMOGo37p/16SUQSlld0K/XfcVQtRrOcxcnw9eV1LKYbW86QfAEmDKGQznlNQUuxDiNuAKYKj8HV4I\nOYXn/mxxCGhR5ePmZZ9TfiNl9en5wAdSyk/rO55fQ0pZKIRYCYwE6u1C9lm9Yj8ZIUS7Kh+OBnbV\nVyynSggxEpgIXCWldNd3POeI9UA7IUSyEMIK3AAsrOeYzhllFyDfAXZKKV+q73hOhRAiobxzTQgR\nRugCfL3mm4bcFTMf6ECoOyMduFtKeVaswIQQewAbkF/2qXVnS0cPgBDiGuBVIAEoBDZLKS+t36hq\nJoS4HHgZMAHvSimfrueQak0I8RFwMaHpgtnAFCnlO/Ua1CkQQlwIfA9sI/T/LMCjUsol9RdV7Qgh\nugLvEXrdaMAnUsqp9RpTQ03siqIo56oGW4pRFEU5V6nEriiK0sCoxK4oitLAqMSuKIrSwKjEriiK\n0sCoxK4oitLAqMSuKIrSwKjEriiK0sD8PzK2cOLGQRzVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(orbit[:, 0], orbit[:, 1])\n", "plt.plot(orbit[:,0], orbit[:,1], alpha=0.2)\n", "plt.scatter(orbit[:1,0], orbit[:1,1], c='red', s=30)\n", "plt.scatter(orbit[1:,0], orbit[1:,1], c=np.arange(niter)[::-1], cmap='Reds')\n", "plt.axis([-3.5,3.5,-3.5,3.5])\n", "pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }