{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using Auxiliary Variables in MCMC proposals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Slice sampling\n", "\n", "Slice sampling is a simple MCMC algorithm that introudces 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 disribution 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": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.stats as stats" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "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": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nTkSuQmCC\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": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.linalg as la" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "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": 6, "metadata": { "collapsed": false }, "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": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.3600318484671193" ] }, "execution_count": 7, "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": 8, "metadata": { "collapsed": false }, "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": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAARwAAAEJCAYAAABG75jIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHPNJREFUeJzt3X+sXHWd//HnbYWS0itu6bW0ey8/Npg30JIAUpEuUEWx\nujQk+pUNrhD1q9DkK5Lqgn+IsKHiRrfuIhqF/XHjshQIP+I3ypqVDfKjwYVaQEy1+mYx9BetbZeK\nLaVAoXf/mDN17rkzZ87MfM6PmfN6JM30fubMzPuee+Y9n/P+fD5nhiYmJhARycO0ogMQkepQwhGR\n3CjhiEhulHBEJDdKOCKSGyUcEcnNW7J4UjO7FZjm7lckbHMP8FFgAhiKmh909w9kEZOIFC94D8fM\nVgItE02DhcAXgXnAMdG/i0PHIyLlEayHY2YnAOPAAmBTm20PB04E1rn7zlAxiEi5hezhLAY2A6cC\nG9tsexIwHfh1wNcXkZIL1sNx9zuAOwDMrN3mC4EDwEoz+xCwH7gXuNHdXwsVk4iUSyZF4xQWRLcb\ngG9T6xXdBIwCnyooJhHJ2FAWizfN7GHgv9uMUr3N3V9q+PkvgbuAOe7+++BBiUjhiurh0JhsIuuj\n2zGgZcKZmJiYGBoaanW3iGSn5zdeIQnHzO4GDnP3jzQ0LwJeA55LeuzQ0BC7du3NMryOjYwMK6YU\nyhgTlDOussbUq1wSjpkdBswGdrv7AeA+4C4z+zzwA+AMYBWwyt1fySMmEclfVksb4oWhxcA24GwA\nd78X+GT0bz21ZHOTu/9NRvGISAlkUjTO2EQZu5qKqb0yxgTljKukMfVcw9HiTRHJjRKOiORGCUdE\ncqOEIyK5UcIRkdwo4YhIbpRwRCQ3SjgikhslHBHJTWGrxUXq1m7YwY8e38i2/3mF+XNmcuHZx3PW\nKXOLDksyoIQjmWpMJsceM8zSRWOTksnaDTv4xx/+6tDPW3ftO/RzfDslpf6nhCNda5cE4slk4/Y9\nU5LJjx7f2PS5f/T4pkPbpE1KUn5KONJUp8mkWRJIk0y2/U/zq5Fsf3Ffw/btnydt3FIsFY1linoy\n2bprHwcnJg4lk7UbdhzaJikJ1KVJJvPnzGy6zbyjj+zoedLGLcVSwpEp8kwmF559fNNtLjz7uI6e\npxbfxqbbNcYNtcR0/fhaPvP1h7l+fC1rfr616eMkPCWcCoq/4eI9gDyTyVmnzGX5RQsYHZnF9GlD\njI7MYvlFCyadBqV5nrRxN+sFrVr9lHpBOVENp2LS1F7mz5nJ1l37pjw2nkwan+eP7ZOTCdR6GNtf\n3MfY3KmjVPXtkuos8eeZd/SRXHj2cVMekybuTupBEp4STsWkecN1k0xaJYHGZNLLVezaJaW0caet\nB0k2lHAqJs0brptkUgZp4k7TC9JIV3aUcAbQ2g07eGDdk2z+3d4pb5g0bzgoXzJJq13c7XpBmvOT\nLRWNB0z9DbNx+56mQ8NpC7CDqlmR+ppL35lq7pD0Tj2cAdOuRpP2dGmQxXtBjbUl1XiypYQzYNLW\naKqUYDqR9pRTdZ7uKOH0oaSDPe0bRppLM9KlOk/3VMPpM+2m71e9RtOrNBMRVefpXiY9HDO7FZjm\n7lckbHMm8E3gdGArcKO7355FPIMkbY3mgXVb2LJjbyVrNL1qd8qpOk/3giccM1sJXAH8S8I2c4Af\nA6uB/wt8ABg3s+3u/mDomAZJ2hrNsiUnlu6rYgeFTlu7FyzhmNkJwDiwAGjXt7wceMndV0Q/P2tm\nZwBXA0o4CXSwFy9tnUdF5alC9nAWA5uBS4C722x7DrAm1vYI8J2A8fS1VgdsmoNdstVuaoGKyq0F\nSzjufgdwB4CZtdt8FHg61rYNmGlms919d6i4+lG6i1tVdx5NGSTVebRAtLWihsVnAq/G2l6Lbo/I\nOZbSSVMYrvqBW2YqKrdW1LD4fmBGrK3+c+X/Kjpg+1vaC4ZVUVE9nC3AvFjbfOBld/9DuwePjAxn\nElQvQsZ07DHDbNy+Z0r72Nzhjl5n0PdTSCHj+tjSk1i1+qkm7db3f79eFZVwHgM+GWs7H/hpmgeX\nbbi3l+u8NLN00VjTwvDSRWOpXyd0TCGUMSYIH9fJo0ex/KIFU+psJ48exa5de1ONYJVxX4VIgLkk\nHDM7DJgN7Hb3A9SGz68xs1uAm4ELqI1uLc0jnrJodeCpMNz/WtXZqj6ClVXCmYj9vBh4CHgvsMbd\nd5rZB4FvURut2gRc5u6PZhRP6bQ78FQYHkxVH8HKJOG4+/mxnx8Fpsfafga8O4vX7wdVP/CqquoD\nAlq8WZCqH3hVVfURLCWcglT9wKuqqq/mV8IpSNUPvKpKc/mLQaYLcOUgaRhUI1HVkzQgcOhYefEV\n5h89eIs+lXAylmY0SgSqMWSuU6qM6epwklYVjhUlnIxpNErSqsKxooSTMY1GSVpVOFaUcDKm0ShJ\nqwrHiorGGdNolKRVhWNFCSegpMWYg3TQSHbqx0p8tfigXCNZCSeQKgxpSjEG6dhSDSeQKgxpSjEG\n6dhSwgmkCkOaUoxBOraUcAKpwpCmFGOQji0lnECqMKQpxRikY0tF40CqMKQpxRikY0sJpwfNVvau\n/PS7ig5LBtCgTK1QwunSIA1VSv/qt/k5quF0aZCGKqU/1T/0tu7ax8GJiUMfems37Cg6tJaUcLo0\nSEOV0p/68UNPCadLgzRUKf2pHz/0lHC6NEhDldKf+vFDTwmnS1W/GLYUrx8/9DRK1YNWK3tF8tCP\n83OUcDrQb0OQMvj6bX5OsIRjZtOArwKfAIaBHwOfdfedLba/B/gote8hH4qaH3T3D4SKKaSkeTfL\nlgwXFZZIXwnZw7kBuAy4FNgN3ALcB5zXYvuFwBeBf2toey1gPEElDUEuW3JirrGItFL2XniQhGNm\nhwFXAVe6+0NR2yXA82b2bnd/Irb94cCJwLpWPaCy6cchSKmWfpj9HmqU6jRgFvBovcHdNwEbgXOb\nbH8SMB34daDXz1w/DkFKtfTDRMBQCWc0un0h1r4NGGuy/ULgALDSzDaZ2W/M7CtmNiNQPMH14xCk\nVEs/9MJD1XBmAgfd/c1Y+2vAEU22XxDdbgC+DZwK3EQtcX0qUExB9eMQpFTL/Dkz2bpranIpUy98\naGJioucnMbOPAPcCh7n7wYb2x6jVaT7f5DFvc/eXGn7+S+AuYI67/z7h5XoPWGQArfn5VlatfmpK\n+zWXvpPzTh9t8oiODbXfJFmoHs6W6HYek0+r5jP1NAuAxmQTWR/djgFJCSe3SXZpK/5lnPinmNIr\nY1zdxHTy6FEsv2jBlF74yaNHBfn9RkZ6n/4RKuH8AngZWALcCWBmxwPHA2viG5vZ3dR6Qx9paF5E\n7RTsuUAx9aQfKv4icWWfCBgk4bj762b2XeAbZvYisAv4DvCwu/8sGjafDex29wPU5ufcZWafB34A\nnAGsAla5e/PKV86SKv5l/oOKNCrbvJyQE/++HD3f7cBhwH8AV0b3LQYeAt4LrHH3e6MRqWuAG4Gd\nwE3u/rWA8fSkHyr+IknK2EsPlnCiEapron/x+x6lNu+msW01sDrU64fWDxV/kSRl7KXr8hQtaN6N\n9Lsy9tK1WrwFzbuRflfGXroSToKyV/xFklx49vGTajh/bC+ul66EIzKgythLV8JpomxDiSLdKlsv\nXQknpoxDiSKDQqNUMf2wxF+kX6mHE1PGoUSREMpQKlDCiSnjUKJIr8pSKtApVYwm/MkgKkupQD2c\nmDIOJYr0qiylAiWcJso2lCjSq7KUCpRwGpShqCaShbLMOlbCiZSlqCaShbKUCpRwImVcyi8SUhlK\nBRqlipSlqCYyyNTDiZSlqCaStSJrlerhRDT/RqqgXqvcumsfBycmDtUq127Ykcvrq4cTKUtRTSRL\nRdcqlXAalKGoJpKlomuVOqUSqZD5c2Y2bc+rVqkeTgNN/JNBV/QEQCWciCb+SRUUXatUwokUXUwT\nyUuRtUrVcCJFF9NEqiBYD8fMpgFfBT4BDAM/Bj7r7jtbbH8m8E3gdGArcKO73x4qnk5p4p9I9kL2\ncG4ALgMuBc4FRoH7mm1oZnOoJaQnqSWcbwPjZvb+gPF0RBP/pGrWbtjB9eNr+czXH+b68bW5TP4L\n0sMxs8OAq4Ar3f2hqO0S4Hkze7e7PxF7yOXAS+6+Ivr5WTM7A7gaeDBETJ0qupgmkqeiBklCnVKd\nBswCHq03uPsmM9tIrbcTTzjnAGtibY8A3wkUT1c08U+qoqhBklAJZzS6fSHWvg0Ya7H90022nWlm\ns919d6C4OqJ5OFIVRQ2ShEo4M4GD7v5mrP014IgW27/aZFtabJ85zcORKilqkCRUwtkPTDOzae5+\nsKF9BtAsZe6P7iO2LS22n2RkZLirIJM8sO7JFu1bWLbkxLaPzyKmXimm9MoYV5YxfWzpSaxa/VST\ndsv0dUMlnC3R7Twmn1bNZ+ppVn37ebG2+cDL7v6Hdi+2a9febmJMtPl3zZ9zy469bV9vZGQ4k5h6\noZjSK2NcWcd08uhRLL9owZRBkpNHj2r5uiESUaiE8wvgZWAJcCeAmR0PHM/U4jDAY8AnY23nAz8N\nFE/HNA9HqqaIQZIgCcfdXzez7wLfMLMXgV3URpwedvefRcPms4Hd7n4AGAeuMbNbgJuBC4BLgKUh\n4ulG0YvaRKog5FqqL0fPdztwGPAfwJXRfYuBh4D3AmvcfaeZfRD4FrXRqk3AZe7+6JRnzYnm4Yhk\nb2hiYqLoGDo1UbXz7W4opvTKFNehqRkvvsL8o8s1NWNkZHio1+fQavEYzcWRolRhaoZWizco+gLT\nUm1Js38HhRJOgyr8waW8qnCJFCWcBlX4g0t5FX294Two4TSowh9cyqsKl0hRwmlQhT+4lNdZp8xl\n+UULGB2ZxfRpQ4yOzGL5RQsGpmAMGqWaRHNxpEiNI6THHjPM0kVjA3fsKeHE6Jo4UoT4kPjG7XsG\nbkgcdEolUgpVGSFVD6cJTf6TvFVlhFQJJ6YKsz2lfKpytQKdUsVUpWsr5VKVEVL1cGKq0rWVcomP\nkI7NHcxRKvVwYjT5T4rwx7rhPuYdPZOL3/eOgUs2oIQzRVW6tlIezRYNr1r91EAuGtYpVYwm/0ne\nivqOqCIo4TShyX+SpyrVDZVw2tCcHMlaVYbEQTWcRLogl+ShSnVD9XASVOncWorTrG74saXGyaNH\nFRxZeEo4Cap0bi3FiJ+yf2bZKZx1ytxSXdg9JJ1SJdCcHMlSFU/ZlXASVOncWvJXxWU0OqVKoDk5\nkqUqnrIr4bTROCenfr79z/dv0BC59KxKw+F1QRKOmY1Q+y7xC4DXge8BX3L3gwmP2QnMaWiaAK5z\n978NEVNoSZetWLZkuKiwpI9V8fvsQ/Vwvg+8CZwLjAK3AQeA65ptbGZvp5ZszgGea7irtGX5pPPt\nZUtOzDUWGQxVPGXvOeGY2dnAYuAEd98M/NLMrgG+ZWYr3f1Ak4ctpJaQ1rr7m73GkIcqnm9LNqo8\nez3EKNU5wKYo2dQ9ArwVOK3FYxYCv+2XZAMaIpcwqjgU3ihEwhkFXoi1bYtux1o8ZiHwppndb2bb\nzexJM7s0QCyZ0RC5hFDFofBGbU+pzOw44HlqRd2h2N2vAquj20Pc/Q0zmwCOaPG0C4DZwLXAl4C/\nAL5nZtPd/baOfoOcVPF8W8Kr+ql5mhrOC8BJLe47CFwFzGhsNLO3UEtOrfbie4DD3b1+//oosX2B\nWsE50chIMaNCy5YMtywQFxVTEsWUXl5xHXvMMBu375nSPjZ3eEoMZd1XvWibcNz9DeDZVveb2Rbg\nQ7Hm+dFt/FSr/pwHqBWNG60HLmkXD1CaNSaHin8vvsL8o8tV/CvjWpwyxgT5xrV00VjTofCli8Ym\nxVDGfRUiAYao4TwG/JmZ/WlD2/nAHuCZ+MZmNt3MNpvZithdi4Cpf4mSmlT8O1i94p90pwrfH56k\n52Fxd3/czJ4A7jazzwHHAF8H/j7qHWFmRwKz3H2Hu79pZvcD15rZb4ENwIeBj1Or5fQFXbpC0mo2\nDL7y0+8qOqxChJr492HgFmANtcl7/+TuX2m4/2rgemB69PMKYDdwMzAP+A1wsbv/JFA8mat68U/S\n0RcrThYk4bj7TuD/JNx/A3BDw8/1WchNZyL3gyqug5HOqSc8mS5P0SXNy5E01BOeTKvFu6R5OZKG\nesKTKeH0oH7pisYhzCqvk5GpqrgiPIkSTkAqEApM/dB53ztH8c0vqSeMEk5QKhBKsw+drbv2VWqu\nTRIVjQNSgVCqvjizHSWcgHQJC9GHTjIlnIA0VC760EmmGk5ArYbKAa4fX6uRqwrQqFQyJZzAGr/l\nATRyNeiaTYNYftECzc9qQQknYxq5GlytPkyWX7Sgsosz21ENJ2MqIg4ujUh1TgknYyoiDi59mHRO\nCSdjGrkaXPow6ZxqOBlLWuSpdVf9Jf73smP/pOnCTH2YtKaEk4P4yBVo9KrftFqyoHVSnVHCKYhG\nr/pLq7+Xb35JI1IdUA2nICo49hf9vcJQwimICo79RX+vMHRKVZCkKfAqJher2f7XkoUw1MMpSKvv\nJwIq/WX3RZv0fWMN+x+o9PdJhaIeToGajV5dP7626bYqJucjqZi/8tPv0t+gR+rhlIyKk8XS/s+W\nejgl0+4q/6rvhNPsu+H1LQvZUg+nZJKWQrSqL6i+07lW3w1vx/5J0+1VHA4jaMIxsxlm9oyZ/VWK\nbT9uZr8xs1fM7HEzOzNkLP0q6cvutTo5nKSJfCoOZyfYKZWZzQLuAU5Nse37gXHgs8BjwF8D/2lm\n73D3F0PF1K+aFZNB9YWQkvZlq/0vvQuScKIEcivw+5QPuRq4093Ho8cvB84HLge+FiKmQdRJfefY\nY4ZZumis8m+cVjUv1WqKEeqUahnwr8BiYChpQzMbAv4ceKTe5u4TwBrg3EDxDKRO6jsbt++pfH0n\nqealy4YUI0gPx91X1P9vZu02fxtwJPBCrH0boDpOgqRLXWj+zlTt5tTU/6+V3vlpm3DM7DjgeWCC\nqb2XV929+SKT1urbvxprfw04osPnqpxe6juDOqTe6vdqt0+afTe8ZCtND+cF4KQW9x3s4jX3R7cz\nYu0zAFU/u5SmvjOI199J+r1UpymftgnH3d8Ang31gu6+28z2AfNid81n6mlWUyMjw6HCCabomD62\n9CRWrX6qSbsxMjLMA+uebPq4B9ZtYdmSE1nz863c+5P/ZvOOvRw7d5iL3/cOzjt9NHic3eynpNiS\nfq92+6TXuLJWxph6VdRM4/8ClgB3wKFC8nnAP6Z5cNm6v2Xokp88etSk70Mam1sbpTp59Ch27drL\n5t81j2/Ljr38+6PPTeolbNy+h1Wrn2LPnleD9n662U/xHkw8tqTfK75P6nWa+j7pJa6slTWmXuWS\ncMzsSGCWu9eHTP4B+KGZPQM8RG0ezlupzc2RLjXWd+IHbNLpRZqrD2Zd/2n1/O1ia3fapDk15ZJF\nwplo0nY1cD0wHcDdHzCzK4DrgFXA08AF7r47g3iE5Ovv/PP9G5o+pl5cTVP/aZeQ1m7YwQPrnmTz\n7/ZOuT/p+dsVfnWdmv4SPOG4+/QmbTcAN8TabgNuC/360lzSkPqPHt+Y2Eto18tol5Da3Z/0/Gl6\nMK1+LykfrRavkFanF+16Ce16Ge0SUrv7k57/M8tOaduD0WlT/1DCkba9hHa9jHYJqd39Sc+vHsxg\nUcIRILmX0K4H1C4htbu/3fOrBzM4dD0caSvpkhnQ/uuM293f7vllcKiHI6kk9TLanfbUbx9Yt4Ut\nO/Y2PS1SL6YalHAkiHYJ46xT5rJsyYmlm8wm+dIplYjkRglHRHKjhCMiuVHCEZHcKOGISG6UcEQk\nN0o4IpIbJRwRyY0SjojkRglHRHKjhCMiuVHCEZHcKOGISG6UcEQkN0o4IpIbJRwRyY0SjojkRglH\nRHKjhCMiuQl6TWMzmwGsBf7O3e9ss+1OYE5D0wRwnbv/bciYRKQ8giUcM5sF3AOcmmLbt1NLNucA\nzzXcpStsiwywIAnHzN4P3Ar8PuVDFgIHgLXu/maIGESk/ELVcJYB/wosBoZSbL8Q+K2SjUi1BOnh\nuPuK+v/NLM1DFgJvmtn9wJnAC8A33X11iHhEpJzaJhwzOw54nlpRN957edXdZ3bxuguA2cC1wJeA\nvwC+Z2bT3f22Lp5PRPpAmh7OC8BJLe472OXrvgc43N3r33C/PkpsXwCUcEQGVNuE4+5vAM+GfFF3\nP0CtaNxoPXBJiocPjYwMhwwnCMWUThljgnLGVcaYepX7xD8zm25mm81sReyuRcCv8o5HRPITdOJf\nK2Z2JDDL3Xe4e71YfK2Z/RbYAHwY+Di1Wo6IDKgsEs5Ek7argeuB6dHPK4DdwM3APOA3wMXu/pMM\n4hGRkhiamGiWH0REwtPiTRHJjRKOiOQml6Jxr8q4Cr3DmD4OXAccC/wC+Jy7PxkwlhHgO8AFwOvA\n94AvuXvLeVJZ7CczmwZ8FfgEMAz8GPisu+9ssf2ZwDeB04GtwI3ufnu3rx8opnuAjzJ5ouuD7v6B\nkHE1vN6twDR3vyJhm8z3UxcxdbWfSt/DiVah/386X4V+TPRvHnBTgTG9HxgHVlE7YNYD/2lmRwcM\n6fvA24Fzqb2xPgXckBBTVvvpBuAy4NIollHgvhYxzKH25n+S2n75NjAe7a+QUscUWQh8kdr+qO+b\niwPHBICZrQRavqmjbfLaT6ljinS1n0rdwynjKvQuYroauNPdx6PHLwfOBy4HvhYgnrOpLZo9wd03\nA780s2uAb5nZymiSZVzw/WRmhwFXAVe6+0NR2yXA82b2bnd/IvaQy4GXGtbhPWtmZ1DbXw8WEZOZ\nHQ6cCKxr1QMKFNcJ1D6EFgCb2mye+X7qNKZe9lPZezhlXIWeOiYzGwL+HHik3ubuE8Aaap+2IZwD\nbIqSTd0jwFuB01o8Jov9dBowC3i03uDum4CNNP9dz6G2Hxo9Qm1/FRXTSdSmbvw6YAzNLAY2U+sh\nb2yzbR77qdOYut5Ppe7hlHEVeocxvQ04Moqj0bYovhBGWzw/wBiwrsljsthPo9Fts1jGWmz/dJNt\nZ5rZbHff3UMs3cZU7/mtNLMPAfuBe6nVTF4LEA8A7n4HcAekOoby2E+dxtT1fios4ZRxFXoGMdW3\nfzXW/hpwRJonaBcTsDr+/O7+hplNJLxGFqv1ZwIHm/SaWv2uM+NxR9vSYvs8YloQ3W6gVis5lVpd\na5RaXawIeeynTnW9n4rs4ZRxFXromPZHtzNi7TOAfaTTLqar4s9vZm+hlpxavcZ7CL9afz8wzcym\nxUbHWv2u++NxN/ycdt8EjcndrzWzVe7+UtT0KzM7CNxlZl9w97R1u5Dy2E8d6WU/FZZwSrgKPXhM\n7r7bzPZRq+Q3ms/Ubn5XMZnZFuBDTZ6fVq/R635qYUt0Oy/2uq1+1y003y8vu/sfeoijl5hoeBPV\nrY9ux0g/UBBSHvupY93up7IXjVMr8Sr0/wKW1H+ICsnn0VDI7NFjwJ+Z2Z82tJ0P7AGeiW+c4X76\nBfAyk3/X44HjmVr0rMd9XqztfOCnPcTQU0xmdreZfT/WvIjaKcxz8e1zksd+6kgv+6nUReN2yrgK\nvTGmqOkfgB+a2TPAQ8BfUxtBGg/xeu7+uJk9AdxtZp+jNh/i68DfR72jXPaTu79uZt8FvmFmLwK7\nqE1GfNjdfxYNUc8Gdkc9rHHgGjO7hdoi3guo9bCWdhtDgJjuo3Za8HngB8AZ1OZPrXL3V0LFlaSI\n/dRFTF3vp37q4bRahb6t4ecV1ObI3Az8ktqbKMtV6G1jcvcHqE2k+gLwFLV6zAWhRhciHwZ2UPvU\nHgf+yd2/0iomsttPX6Y20nE78BNqxe76ZLDFUQxnA0TzNz5IbTLb08D/Ay5z91A9v25iuhf4ZPRv\nPbU30U3u/jeBY2oUP4aK2k+dxNT1ftJqcRHJTT/1cESkzynhiEhulHBEJDdKOCKSGyUcEcmNEo6I\n5EYJR0Ryo4QjIrlRwhGR3PwvELeDNqWe9LIAAAAASUVORK5CYII=\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": 10, "metadata": { "collapsed": false }, "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": 11, "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": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.005039305635733781" ] }, "execution_count": 12, "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": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYEAAAEQCAYAAABWY8jCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGGFJREFUeJzt3X2UXHWd5/F3JQFCICIPjQRhkB3Xr8qDkqMjZEAReRAf\nz7q6suMikR3wAXdhRkHOhBnHCIwLsijMCHoMM7uADOIRZM6sLIIC4jogy46LoF+WVQSNB+IEmAAh\nBFL7x73VqS6609XVXenb+3u/zimq63d/t+73Vlfnc3/3iVa73UaSVKZ5s12AJGn2GAKSVDBDQJIK\nZghIUsEMAUkqmCEgSQVbMNsFTCYiLgXmZebJQ3r/3wX+EYjMXN3T/nngUKAN3AJ8IjMfHnA5ZwJv\nycyjpl20JM2QRo8EImIlMJR//Ov3fwVwI7Cop31R3d4CDgeOBnYD/ltEbDPAck4GzqYKE0lqjEaO\nBCJiX2AVsB/wyyEt41RgJXA/8LKeyUcDewEHZuZTdf8PAg8BbwBu73mvTcDhmXlbT/uuwFfq97t/\n5tdCkqanqSOBZVT/4B4APNg7MSJOioifRcTTEfHj+h/oqXon8IfAJ8eZdgfwtk4A1Dpb8TtPYRmv\npgra19bvKUmN0siRQGZeCVwJEBFjpkXER4FPAx+l2pd/CPCXEdHOzMunsIwj6/d70zjTfgP8pqf5\nTOBJ4PtTWMb3O/1710OSmqCRITCJPwE+k5nX1q9/EREvA1YAl0fECcBfTzDvDZn5tqkusA6ejwEf\nz8zH67afAPt0v3dEPE81Yjg2M38w1eVI0tY2p0IgInYDXgp8PiLO65o0H5gfEQuAbwI/nOAtnhxg\nmSuAzwLnZOYlXZOOBToHiR8ATgTurF//eqrLkaTZ0FcIRMRLgS8AR1AdR7gB+ON6t8l4/V9X9z8I\n+BVw9lR21WzBs/Xzx4Fbeydm5nPAuvoxLRHRAi4BTgJOz8wLepb1cFdfgNWZ+fPpLleStqZ+Dwz/\nPbAT8CbgjcAS4PrxOtZb6zcAd1GFwMXAqog4crrFZuY/U21l75uZP+88qM6+OX2679/jr6i27pf3\nBsA4PPVT0pw06UggIl4C3AecmZkP1W3/Gbg2InbKzCd6ZjkJeDwzT6tf3x8RS6nOwrlpBmo+G7gg\nIh4GbgYOBi4APjeN92x1v4iItwMfAf4cuLH+DDoez8wN3f0zc/40li1Js2bSEMjMR4A/6LyOiL2A\nDwN3jhMAUF1he1tP2y1UW9aDGLOVnZlfjohtqULlIqqRwWcy87zxZh5kGVTr26Y6C+nTPdOOB742\njWVJUmO0pvJ/FouIa4F3A2uBN2fmPeP0+TFwfWb+aVfbkcB/B0Yyc+20q5YkzYipXix2FvB7VFfM\n3hQRS8bpswh4pqets/tk4RSXJ0kaoimFQGbem5l3Af+W6rTME8bpth7Yrqet8/opJEmN0c+B4d2p\ndv1c3WnLzPUR8X+pztnv9TDV2UPd9gSenOAYwqh2u91utVpb6iJJeqGB/+Hs5zqBfYCrIuL/ZObd\nABGxExCMf2Xu7cDynrYjgEmvoG21WqxZM+1T/GfNyMhi659Fc7n+uVw7WP9sGxlZPPC8/YTAXVRn\n+3w1Ij4MPEd1OuYjwH+tb628C7A2MzdS3f3z9Ii4BPgicBRwHHDMwFVKkoZi0mMCmdkG3kN1s7a/\nA74HPEZ16+Snqe74uZrqRm5k5qPAW6kuFLub6p47x2fmC67wlSTNrr5uG1Gf1nniBNNupTpI3N12\nJ9VFXJKkBmvq/09AkrQVGAKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBXMEJCkghkCklQw\nQ0CSCmYISFLBDAFJKpghIEkFMwQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSqYISBJBTME\nJKlghoAkFcwQkKSCGQKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBXMEJCkgi3op1NE7A6c\nDxwFbA/cAXwiM++doP/XgfcCbaBVN9+UmUdPu2JJ0oyZdCQQES3gOuDlwDuBQ4AngJsjYucJZtsf\nOANYAuxRP943EwVLkmZOPyOB1wBvAF6VmfcDRMTxwFrg7cAV3Z0jYluqwPhRZj46s+VKkmZSP8cE\nHgLe0QmA2qb6ebyRwCuB+cBPp1mbJGnIJh0JZOZa4Ns9zacCC4Ebx5llf2AjsDIijgXWA9cAZ2fm\nhumVK0maSX0dGO4WEe8CzgUuyMwcp8t+9fN9wMXAAcCFwF7AhwasU5I0BK12u91354hYDnwF+Fpm\nLt9Cvxdn5uNdr/8NcBWwW2Y+toVF9F+MJKmjNXmX8fU9EoiIFcBngYsy87Qt9e0OgNo99fPewJZC\ngDVr1vVbUuOMjCy2/lk0l+ufy7WD9c+2kZHFA8/b18ViEXEGsBI4a7IAiIirI+KbPc2vBzYADwxU\npSRpKCYdCUTEgcA5wGXAqoh4SdfkdVQHgXcB1mbmRuAbwFUR8UfAt4ClVBeanZ+ZT89w/ZKkaehn\nJPD+ut+JwOqex2nAsvrnQwAy8xpgef24hyoALszMT89s6ZKk6ernFNEVwIpJus3vmecKei4ikyQ1\njzeQk6SCGQKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBXMEJCkghkCklQwQ0CSCmYISFLB\nDAFJKpghIEkFMwQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSqYISBJBTMEJKlghoAkFcwQ\nkKSCGQKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBVsQT+dImJ34HzgKGB74A7gE5l57wT9\nXwd8ATgI+BVwdmZePiMVS5JmzKQjgYhoAdcBLwfeCRwCPAHcHBE7j9N/N+AG4C6qELgYWBURR85g\n3ZKkGdDPSOA1wBuAV2Xm/QARcTywFng7cEVP/5OAxzPztPr1/RGxFPgkcNOMVC1JmhH9HBN4CHhH\nJwBqm+rnF4wEgEOB23rabgF+f8rVSZKGatIQyMy1mfntnuZTgYXAjePMshfw65621cCiiNhloCol\nSUMx5bODIuJdwLnABZmZ43RZBDzT07ahfl441eVJkoanr7ODOiJiOfAV4GuZ+akJuq0Htutp67x+\nakvv/+7Tr4c2tFrV6+q5Nfpz52Wr1aJF9TxvtG+ra57uPt39Wi9YZqf/vFar+rmebzyt3mX1TJ+/\nYB6bnt80pr6J3qxT29haW13rOYU6uhbTWea87hrGWdZ4b77ddgt4dsNzowvprXF0ttHltTZPn6DW\nqm+npqphXmtznROuI13TW5vbur8brc0TaAE77LAd69c/OzqtNWFRYz+H1ubGMes87jxd7935PU2w\n2qPvPTpfz3eye9qLXvQ4T657ZpJ1Hvud6Px9zGsx+nfR+Yxb47zPaD1ddY/3O978t1D93L2anQp6\n53n6uTaPPfbUC9Z18/q0Ni97nA9r83K6au/t1v3d7v1sO+s8wQI608b8bQqYQghExArgs8BFXQd9\nx/MwsKSnbU/gycx8YovL+J3qEEO73aYNVP+BNm3a7fplPa29aXP7pnb13Jmh3a7fo13/TJtNm9rj\nLrN6rzbPt9u0N7WZoBu0Ny+vs4zxOnWWval+nnCZnUntzjLHzitp+LrDfMxGyrzJN8KgxU47bsvn\nTjmUXXfafitUOxz9XidwBrASOCszz52k++3A8p62I4AfTLac8/7DYaxZs66fkhppZGTx0OvvDsju\nUKqmjZ3eHY7dwTNROO2664789p+erN+bzYE7ZhldQbs5pcevlbHv06kJ2GJIdpbfPX209vHWuZ7h\nxS9exNrHnhqzETBRXaPrNmaZ7c3rPt583RsXbOH9u0J99HNot8edf1O9dbPDjgtZt259z8ZPV509\nv4PN3wG6NiQ6GxGbf0e979O9fmN/l2Nr3tRT75jPoPdzasN2Cxewfv3G0XXtbHR1f1e3+D0Z/VzG\n/16MmTbmuz221knfv2s5o58JsGDBfJ7d+NzohuOmCd5rdF3qn3fYfhv++Yn1bHr2ufH7byUjI4sH\nnnfSEIiIA4FzgMuozvd/SdfkdcBGYBdgbWZuBFYBp0fEJcAXqS4wOw44ZuAqNWrs7pyZHdLutON2\nPLv+2Rl9z61pZGQxa3bYZrbLGMjW2IAYJuufu/o5MPz+ut+JVGf5dD9OA5bVPx8CkJmPAm+lulDs\nbuBjwPGZeetMFy9Jmp5JRwKZuQJYMUm3+T3z3AkcPI26JElbgTeQk6SCGQKSVDBDQJIKZghIUsEM\nAUkqmCEgSQUzBCSpYIaAJBXMEJCkghkCklQwQ0CSCmYISFLBDAFJKpghIEkFMwQkqWCGgCQVzBCQ\npIIZApJUMENAkgpmCEhSwQwBSSqYISBJBTMEJKlghoAkFcwQkKSCGQKSVDBDQJIKZghIUsEMAUkq\nmCEgSQUzBCSpYIaAJBXMEJCkgi2Y6gwRcSkwLzNP3kKfrwPvBdpAq26+KTOPHqhKSdJQTGkkEBEr\ngQn/8e+yP3AGsATYo368b8rVSZKGqq+RQETsC6wC9gN+OUnfbYGXAz/KzEenXaEkaWj6HQksAx4C\nDgAenKTvK4H5wE8HL0uStDX0NRLIzCuBKwEiYrLu+wMbgZURcSywHrgGODszNwxeqiRppk35wHAf\n9quf7wMupho9XAjsBXxoCMuTJA1oxk8RzcwVwB6ZeVFm3puZfwucCnwwInae6eVJkgY3jJEAmfl4\nT9M99fPewGNbmndkZPEwStpqrH92zeX653LtYP1z1YyHQERcDWyTme/pan49sAF4YLL516xZN9Ml\nbTUjI4utfxbN5frncu1g/bNtOgE27RCIiG2AXYC1mbkR+AZwVUT8EfAtYClwPnB+Zj493eVJkmbO\nIMcE2j2vlwGrgUMAMvMaYHn9uIcqAC7MzE8PXKUkaSimPBLIzCN6Xt9KdV1Ad9sVwBXTK02SNGze\nQE6SCmYISFLBDAFJKpghIEkFMwQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSqYISBJBTME\nJKlghoAkFcwQkKSCGQKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBXMEJCkghkCklQwQ0CS\nCmYISFLBDAFJKpghIEkFMwQkqWCGgCQVzBCQpIIZApJUMENAkgq2YKozRMSlwLzMPHkLfV4HfAE4\nCPgVcHZmXj5wlZKkoZjSSCAiVgIT/uNf99kNuAG4iyoELgZWRcSRgxYpSRqOvkYCEbEvsArYD/jl\nJN1PAh7PzNPq1/dHxFLgk8BNgxYqSZp5/Y4ElgEPAQcAD07S91Dgtp62W4Dfn0phkqTh6ysEMvPK\nzFyemY/20X0v4Nc9bauBRRGxy1QLlCQNzzDODloEPNPTtqF+XjiE5UmSBjTls4P6sB7Yrqet8/qp\nyWYeGVk84wVtTdY/u+Zy/XO5drD+uWoYIfAwsKSnbU/gycx8YrKZ16xZN4SSto6RkcXWP4vmcv1z\nuXaw/tk2nQAbxu6g24E39rQdAfxgCMuSJE3DtEcCEbENsAuwNjM3Up1KenpEXAJ8ETgKOA44ZrrL\nkiTNrEFGAu2e18uozv45BKA+g+itVBeK3Q18DDg+M2+dRp2SpCGY8kggM4/oeX0rML+n7U7g4OmV\nJkkaNm8gJ0kFMwQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSqYISBJBTMEJKlghoAkFcwQ\nkKSCGQKSVDBDQJIKZghIUsEMAUkqmCEgSQUzBCSpYIaAJBXMEJCkghkCklQwQ0CSCmYISFLBDAFJ\nKpghIEkFMwQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSrYgn46RcQ84BzgBGAxcANwSmY+\nOkH/rwPvBdpAq26+KTOPnnbFkqQZ0+9I4DPA8cC/Aw4D9gK+sYX++wNnAEuAPerH+wYvU5I0DJOO\nBCJiG+A/Ah/PzO/WbccBv4iIgzPzH3r6bwu8HPjRRCMFSVIz9DMSeC2wI3BrpyEzfwk8SDUq6PVK\nYD7w0xmoT5I0RP0cE9irfv51T/tqYO9x+u8PbARWRsSxwHrgGuDszNwwaKGSpJnXTwgsAjZl5vM9\n7RuAheP0369+vg+4GDgAuJAqTD40YJ2SpCHoZ3fQemBefYZQt+2Ap3o7Z+YKYI/MvCgz783MvwVO\nBT4YETtPu2JJ0ozpZyTwcP28hLG7hPbkhbuIAMjMx3ua7qmf9wYe28KyWiMji/soqbmsf3bN5frn\ncu1g/XNVPyOBHwNPAm/qNETEy4CXAbf1do6IqyPimz3Nr6faffTAoIVKkmZeq91uT9opIv6C6kKx\nDwFrgL8Cns7Mt9SnkO4CrM3MjRHxPuAq4HTgW8DSuv+lmfnp4ayGJGkQ/V4sdhZwJXA5cDPwCzZf\n/LWM6kyhQwAy8xpgef24BzgfuNAAkKTm6WskIEn6/5M3kJOkghkCklSwvu4iOmxTvUtpU0TEpcC8\nzDy5q+1o4D8BAdwPnJmZN8xSiS8QEbtTHac5CtgeuAP4RGbeW09vev0vBb4AHEG1EXMD8MeZ+Zt6\neqPr74iIg4HvA2/JzNvqtkbXHhGvAu5l7N2B28Bhmfk/ml4/QET8IdVJK3tTXdB6emZ+r57W2Poj\n4k3A9xj72Xd8NzOPHLT+powEpnqX0lkXESuBk3vaXk11RtTVVPdcuh64rv7jmXUR0QKuo7rB3zup\nDuY/AdwcETs3vf7a3wM7UZ2y/Eaq61euh+Z//h0RsYjqJIt5XW1zofYDqM4O3KPrsQS4Yy7UHxEn\nAH8JnEt1e5tbgesj4nfmQP0/YPPn3fnsPwg8D3yurnOg+mf9wHB9iulvqe5Senndtg/VGUjLeu9S\nOtsiYl9gFdXtMZ4GvtMZCdQjg1dk5hFd/b8L3J+ZH5mNertFxGuB/wm8KjPvr9u2BdYCHwEOpdn1\nv4TqFiRnZuZDddu7gGupTlM+D/iXTa2/IyK+TBXEhwNvzszb6rZG115v+ByWmW8eZ1qjv/sAEfEL\n4G8y8zP16xbV38N5VL+LRtffLSJeBPwM+OvMXDGd708TRgJTvUvpbFsGPES1VfRgz7TDgFt62m6h\nOevxEPCOTgDUNtXPO9Pw+jPzkcz8g64A2IsqvO7MzCeoQuyWntluoSH1A0TE24BjqW7P3j2sb3zt\nVFvPE90duNHfnYgIYB/g6522zGxn5tL61jaNrn8cfwY8A3y2fj3w96cJxwSmepfSWZWZV1JdM0H1\nvRpjLxq8Hpm5Fvh2T/OpVDcCvBE4mwbX3y0irgXeTTWK6WyZNvrzj4jdgK9SHfvqvbVKo2uv7Q8s\njIgfUt0x4CfAn2Tmj2h+/a+g2p++c0TcTLUuP6MaVf6Q5tc/KiJGgFOAD2fmM3XzwPU3YSQw1buU\nNtkiqnTu1tj1qHelnAtckJnJ3Kr/LOD3qPaVfici9qT59V8KXJeZ3+lq6+yPbXTtEbEQ+BdUJ258\nkuqY0mrgloh4JQ2vH3gR1cjrb4CvAMdQhdjNc6T+bh8DHqHeGK0NXH8TRgKjdynNzE1d7ePepbTh\n1lPV3a2R6xERy6n+GL6WmZ+qm+dM/V1nMx1HtZvrBKpjNI2svz4o+VrgwLqp1fPc6M8+M5+JiBcD\nGzJzI4x+h5ZS/aPU2M++trF+Pjszr65/PiUiDgU+SvPr7/YB4LKeDeeBvz9NGAl036W024R3KW2w\nh5kD6xERK4DLgC9l5vKuSY2uPyJ2j4j3d7dl5nrg51R1Nrn+E6iG7I9ExDqqXREA346IS6iCrKm1\nA5CZT3YCoH7dpjrNcm+a/dlDVUebauu/28+AfWl+/cDoWWS/S3UWULeB629CCEzpLqUNdztd61F7\nMw1aj4g4A1gJnJWZp/VMbnr9+wBXRcTSTkNE7ER1XvR9VLuGmlr/B4BXA6+pH8fU7f8e+FOaXTsR\nsTQinoiIg7ra5lGNbn5C9d05vGe2xtQP3E21tf/6nvZXU93duOn1dxwG/Kbefdtt4L/dWd8dlJnP\nRsSXgM9HxD+x+S6l38vMO2e3uim7GLgrIv6c6k6qH6Dab92IU8wi4kCqi/IuA1bVp1x2rKPh9QN3\nUX2pvxoRHwaeAz5HtX/0v1BdfNXI+jsXs3VEROd/tbo6M38bEU3/7H9Mddr2lyPi41S7GT4F7Ap8\nkeq89cbWn5nrI+JC4JyIeJTq5panUB3n+BLVvvPG1t/lIF44moFp/O02YSQAW75LaZONucgiM38C\n/CvgXwP/C3gH1SmZvak9W95P9Ts/keqgXvfjtKbXX+9+eA/wj8DfUV1B+RhweGY+3fT6xzH6/Wl6\n7fX+52OBpLoQ6R+A3YE3ZuZvm14/QGb+GfVdjYH/DbwBOCozH5gL9deWUJ0RN8Z06p/1i8UkSbOn\nKSMBSdIsMAQkqWCGgCQVzBCQpIIZApJUMENAkgpmCEhSwQwBSSqYISBJBft/xbFNpAuaZpsAAAAA\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\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": 15, "metadata": { "collapsed": false }, "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": 16, "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": 17, "metadata": { "collapsed": false }, "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": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "orbit = leapfrog(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Accuracy" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.0025229913808033464" ] }, "execution_count": 19, "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": 20, "metadata": { "collapsed": false }, "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": 21, "metadata": { "collapsed": false }, "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": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\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)\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": 23, "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": 24, "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": 25, "metadata": { "collapsed": false }, "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": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(orbit)\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.5.1" } }, "nbformat": 4, "nbformat_minor": 0 }