{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This page lists projects which might be suitable for undergraduate research.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "# Table of Contents\n", "

1  From Symbols to Numbers
1.1  Use Cases
1.1.1  Lagrangian Dynamics
1.1.2  Neutron Stars
1.2  Existing Tools
2  Numerical Differentiation
2.1  Richardson Extrapolation
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# From Symbols to Numbers" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Often we have a set of equations that need to be implemented numerically. To quickly get code working, while ensuring that no mistakes are made, it is often convenient to start with the symbolic expressions and then generate code that performs the numerical computation. This is especially useful when working with minimizers or solvers that can utilize derivative information.\n", "\n", "However, when nested deeply, or highly differentiated, even relatively simple expression can become unweildy in their final form. The goal of this project is to provide an efficient and effective set of tools for getting from symbolic expressions to the robust code required to evaluate them numerically." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use Cases" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lagrangian Dynamics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the problem of setting up the Euler-Lagrange equations for a triple pendulum. This generates pretty nasty expressions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Neutron Stars" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a use case, we have a project for modelling the physics of neutron stars. Here the star is described by a nuclear equation-of-state (EoS) defined by the function $\\mathcal{E}(n_n, n_p)$ which is the energy-density (energy per unit volume) of homogeneous nuclear matter as a function of neutron $n_n$ and proton $n_p$ densities. This expression on its own is rather large as it results from inverting a system of 5 linear equations, but then must be inserted into a further set of equations defining the so-called compressible liquid drop model (CLDM) for nuclei which approximates the construction of a nuclear lattice in the crust of the neutron star by minimizing the total energy including electromagnetic interaction and surface effects. Inserting $\\mathcal{E}(n_n, n_p)$ into these equations and taking derivatives as required to define the minimization conditions produces huge expressions that take hours to even simplify.\n", "\n", "We practically solved this problem by treating $\\mathcal{E}(n_n, n_p)$ as a numerical black box, and decoupling the form of these expressions from the CLDM model. This is not ideal, however, as it required defining an appropriate interface for calling $\\mathcal{E}(n_n, n_p)$ which was additional programming work." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Existing Tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most of our code is in python, so we would like to start there. I am aware of the following tools which might be useful:\n", "\n", "* [SymPy](http://www.sympy.org/): This is the \"standard\" symbolic manipulation package for python. It has quite a few tools, and works reasonably well. Here are some notes, including serious limitations:\n", " * **Simplification:** Once large expressions are generated, the simplification tools are very slow. In particular, the default approach `expr.simplify()` tries many different strategies, then measures the outcomes. Some of these strategies are extremely expensive, so this can literally take hours. Unfortunately, no record is kept about which strategies worked and which did not, so one cannot easily issolate the best approach. One small community project might be to look at the `sympy` code and at least keep track of which simplification strategy worked the best so the user can call that directly in the future.\n", " * **Numerical Computation:** Once an expression is found, fairly efficient numerical implementations can be produced using [``sympy.lambdify``](http://docs.sympy.org/latest/modules/utilities/lambdify.html). Performance characteristics of various numerical approaches are [discussed here](http://docs.sympy.org/latest/modules/numeric-computation.html).\n", " * **Caching:** Once work is done simplifying and generating numerical functions, it would be great to cache these to disk so they can be reused without future expensive computations. Unfortunately, general expressions and lambdified expressions in particular have no good way to be archived. Expressions can often be converted to strings, but these take some time to process when loading, which can be a performance issue. Caching the lamdified functions is thus preferred from a performance standpoint, but runs into many issues:\n", " * [How to serialize sympy lambdified function?](http://stackoverflow.com/questions/31314517/how-to-serialize-sympy-lambdified-function)\n", " * [Cannot pickle lambdas from SymPy](https://github.com/uqfoundation/dill/issues/104)\n", " * [Python - write symbolic expression (sympy) to txt file](http://stackoverflow.com/questions/17517651/python-write-symbolic-expression-sympy-to-txt-file)\n", " * [Cannot pickle sympy.UndefinedFunction](https://github.com/cloudpipe/cloudpickle/issues/65)\n", " \n", " Many of these issues have been partially resolved using appropriate settings of advanced pickling libraries such as [dill](https://pypi.python.org/pypi/dill) or [cloudpickle](https://github.com/cloudpipe/cloudpickle), but they demonstrate that this approach can be brittle. Another issue is that pickles can \"go sour\" meaning that if you upgrade your code, or even the underlying python interpreter, the pickles might not be able to be loaded.\n", " \n", " My preferred approach is to use human-readable (and writable) representations and have had reasonable success using [`sympy.printing.lambdarepr.NumPyPrinter`](http://docs.sympy.org/latest/modules/printing.html?highlight=lambdarepr#module-sympy.printing.lambdarepr) to print an importable module with the following structure:\n", "\n", " ```python\n", "from __future__ import division\n", "import math\n", "import numpy\n", "import uncertainties.core\n", "import uncertainties.unumpy\n", "import sympy\n", " # Comment to keep nice formatting in \n", " # notebook... (not sure why needed)\n", "class Mixin(object):\n", " _names = {names}\n", "\n", " @staticmethod\n", " def {name}(*v):\n", " MutableDenseMatrix = numpy.array\n", "\n", " if any([isinstance(_v, sympy.Expr) for _v in v]):\n", " np = sympy\n", " MutableDenseMatrix = sympy.MutableDenseMatrix\n", " elif any([isinstance(_v, uncertainties.core.AffineScalarFunc) for _v in v]):\n", " np = uncertainties.unumpy\n", " elif any([isinstance(_v, numpy.ndarray) for _v in v]):\n", " np = numpy\n", " else:\n", " np = math\n", "\n", " exp, log, pi = np.exp, np.log, numpy.pi\n", " {args} = v\n", " return {expr}\n", "```\n", " \n", " This provides a human friendly form of importable code with minimal performance hits. It also allows the functions to be called symbolically, with numpy, or with numbers. However, it is a bit of a hack and requires careful attention to where these \"cache\" files are stored.\n", " \n", "* [Theano](http://deeplearning.net/software/theano/): This project is designed to produce optimized code for symbolic expressions using the CPU, multiple threads, and GPU accelleration if possible. It works, supports CSE, and is quite fast, but unfortunately, the expression manipulation is all done internally and the results are not easily extracted. It is also a somewhat large package and can be difficult to install (as opposed to sympy which is pure python). I also find Theano to be less intuitive to use than SymPy.\n", "\n", " In 2013 people looked at translation between SymPy and Theano. Here are some discussions about using both SymPy and Theano. This does not seem to be currently an active topic:\n", " \n", " * [Theano + Sympy for system of ODEs](https://groups.google.com/forum/#!topic/sympy/VtaxCRNO4sE/discussion)\n", " * [theano_sympy](https://github.com/nouiz/theano_sympy) github project.\n", " * [Matthew Rocklin's blog]](http://matthewrocklin.com/blog/) about [Sympy and Theano](http://matthewrocklin.com/blog/tags.html#SymPy-ref) (2013)\n", " * [Code Generation](http://matthewrocklin.com/blog/work/2013/03/19/SymPy-Theano-part-1)\n", " * [Scalar Simplification](http://matthewrocklin.com/blog/work/2013/03/28/SymPy-Theano-part-2)\n", " * [Matrix Expressions](http://matthewrocklin.com/blog/work/2013/04/05/SymPy-Theano-part-3)\n", " * [Using SymPy within Theano](http://matthewrocklin.com/blog/work/2013/08/14/SymPy-Theano-part-4)\n", " \n", "The crux of this project thus seems to be about combining an efficient symbolic computation path for specifying non-linear equations with a CSE aware simplification process for computing derivatives etc. and finally generating somewhat optimized numerical code. (Using [Numba](http://numba.pydata.org) would be great too.)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Numerical Differentiation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In many applications, one needs to compute derivatives numerically. In principle this is a straightforward application of the formula:\n", "\n", "$$\n", " f'(x) = \\frac{f(x + h) - f(x - h)}{2h} + h^2\\frac{f'''(x)}{6} + \\order(h^4).\n", "$$\n", "\n", "However, in practice, one must trade truncation errors (minimized by making $h$ as small as possible) with roundoff errors amplified in the subtraction. To be explicit, assume that $f(x)$ can be computed to a relative precision of $\\epsilon$. The roundoff error in this expression is thus of the order:\n", "\n", "$$\n", " \\text{roundoff error (relative)} \\sim \\frac{\\epsilon}{\\sqrt{2}h}.\n", "$$\n", "\n", "Balancing these we obtain an optional value of:\n", "\n", "$$\n", " h_c \\approx \\sqrt[3]{\\frac{6\\epsilon f(x)}{\\sqrt{2}f'''(x)}} \\approx 1.6x\\sqrt[3]{\\epsilon}\n", "$$\n", "\n", "assuming that $f'''(x)/f(x) \\sim x^{-3}$. Even with this optimal step size, the relative error will be of order $\\epsilon^{2/3}/2x$ which for double precision reduces the precision from 16 digits to 10. Here we demonstrate these fomulae these for the function $\\sin'(x) = \\cos(x)$ at $x=1$:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n", "Max rel. err. in denom: 0.00256821005781\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nwON/j5SUFDZs2ECnTp08voYQ3vbDD6aA65tvQoWyKTlPtsxnksT4kbFjzU7XrnjpJZPsTJmS2ZaQ\nYBIXa7JyWhG7AAAgAElEQVTTvLkZv3QcdspJg4oNCLBkZlE5fboVIi927NhBx44d2bp1K8899xxj\nxoxh//79dOrUid9++y3jOOt8knvvvZcrV67w2muvcdtttzF16lQeffRRAO6+++6MOWtTpkzh008/\n5ZNPPqFy+vIJx3kp1u/vu+8+LBYLr7/+Om3btmXixIlMnjyZLl26ULNmTSZNmsQ111zD008/zU8/\n/WQX/2+//caGDRvo378/06ZNY9iwYaxYsYLOnTuTnJzs0b/J77//TmBgIM2bN/fofCG87fJlePxx\n6NjRzMvk3XdNJVd3lsz6kFQ98yNly5ovV1SsCD162E/w3bgRevXKfN68uakAvHu3GVryxOgVo0lK\nSeLtHm97dgEhsvHCCy+QkpLCzz//TO30egQPPPAAkZGRjBo1ipUOs9fr16/PggULABg2bBjlypVj\nxowZPP300zRt2pRWrVrx2Wef0bt3b5fnvrRr147p082uJUOGDKFOnTqMGjWK119/naeffhqAfv36\nUa1aNT788ENuvPHGjHNvv/12+vTpY3e9O+64g7Zt2/LVV19x//33u/1vsmbNGv71r38xadIkALZv\n387AgQPp2lW2ChEF4803TWHWr78GdfiQ2fFx4EAICSno0ABJYgq1jh1h/nyzg+jVq2Z5tbWIHpjh\nKTBDSp4mMbUr1CY5xbNPlSJ/paZe4tKlXT69R1BQIwICgvJ8nbS0NH744QfuuuuujAQGoEqVKgwY\nMIAPPviACxcuUDY9q1dK8fjjj9td48knn2T69OksWrSIJh78gCuleOSRRzKeWywW2rRpw8GDBxk8\neHBGe/ny5YmMjGTv3r1255cqVSrj+5SUFM6dO0e9evWoUKECCQkJHicxhw4dYvDgwYSFhfH9998z\natQoNrpb8VIIL9i3z8yBiY42K2Pp/xSULg2vvFLQoWWQJKYQ69jRrNvfsCFzHo3tFk8VKpiNJDdv\nBg9+nwIwtM3QPMcp8selS7uIj/ftsoHWreMpV871fcSyc/z4cS5dukRD6wQuG40bNyYtLY2///6b\nxo0bZ7Q3aNDA7rj69etjsVjYv3+/x3E49tiUL1+e0qVLU7FixSztp06dsmtLTk5m4sSJzJ49m4MH\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%pylab inline --no-import-all\n", "\n", "x = 1.0\n", "f = np.sin\n", "df = np.cos\n", "dddf = lambda x: -np.cos(x)\n", "\n", "eps = np.finfo(float).eps\n", "\n", "hs = 10**np.linspace(-14, -1, 200)\n", "\n", "# This is a numerical trick which helps a bit: There is some roundoff\n", "# error in the computation of x+h and x-h. Here we set the denominator to\n", "# be exactly the difference between these points, which might differ slightly\n", "# from 2*hs\n", "denom = (x+hs) - (x-hs)\n", "print(\"Max rel. err. in denom: {}\".format(abs((2*hs - denom)/denom).max()))\n", "\n", "df_numeric = (f(x+hs) - f(x-hs))/denom\n", "\n", "err = abs((df_numeric - df(x))/df(x))\n", "\n", "h_c = 1.6 * (eps / abs(dddf(x)/f(x)))**(1./3.)\n", "err_c = eps**(2./3.)/abs(dddf(x)/f(x))/2.0\n", "\n", "roundoff_err = abs(eps/np.sqrt(2)/hs)\n", "truncation_err = hs**2 * abs(dddf(x)/f(x))/6\n", "plt.loglog(hs, err, '-')\n", "plt.loglog(hs, roundoff_err, ':', label='rounding')\n", "plt.loglog(hs, truncation_err, '--', label='truncation')\n", "plt.ylim(err_c/10, 0.1)\n", "plt.axhline(err_c, ls='-', c='y', label=r'optimal $h_c$')\n", "plt.axvline(h_c, ls='-', c='y')\n", "plt.legend(loc='best')\n", "plt.xlabel(r'$h$')\n", "plt.ylabel(r'relative error')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "For many functions, the accuracy $\\epsilon$ is far less than machine precision (for example, $f(x)$ might involve running a solver where a low tolerance is required for reasonable performance). A further complication is that the behavior of the function may not be known in advance, making the choice of optimal $h$ tricky because of the factor. Thus, although fast, in general this approach is not ideal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Richardson Extrapolation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One might wonder if higher accuracy can be obtained when the function can be computed to high (machine) precision. The answer is yes and lies in applying the technique of [Richardson Extrapolation](https://en.wikipedia.org/wiki/Richardson_extrapolation) - sometimes called \"The deferred approach to the limit\". The idea is to compute the finite difference formalism for a series of $h > h_c$ where the function is smooth, and then fit the error with a low-order polynomial, extrapolating the result to $h=0$ before roundoff errors spoil the results. Here we use an implementation of this to demonstrate that we can achieve fairly high relative precision (almost machine precision) and compare the actual error with the estimate of the error made while computing the Richardson Extrapolation:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(5.5511151231257827e-15, 7.8825834748386114e-15)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from mmfutils.math.differentiate import differentiate\n", "err = [0]\n", "abs(differentiate(f, x=1, h0=0.1, err=err)/df(x) - 1), err[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, this approach fails spectacularly when the function evaluation is noisy." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nByNmZmbWV38CODU/EUj0HawAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f_(x):\n", " global scale\n", " return f(x)*(1 + np.random.normal(scale=scale))\n", "\n", "err = [0]\n", "errs = []\n", "errs_est = []\n", "\n", "np.random.seed(1)\n", "scales = 10**(np.linspace(-16, -1, 100))\n", "for scale in scales:\n", " errs.append(abs(differentiate(f_, x=1, h0=0.1, err=err)/df(x) - 1))\n", " errs_est.append(err[0])\n", "\n", "plt.loglog(scales, errs)\n", "plt.loglog(scales, errs_est)\n", "plt.loglog(scales, scales, '--')\n", "plt.ylabel('Error in derivative (rel)')\n", "plt.xlabel('Std of added Gaussian noise (rel)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An interesting point is that the function needs to be computed to about two orders of magnitude more accuracy than the desired accuracy of the derivative (see [Roy:2005] and [Eca:2009]).\n", "\n", "[Roy:2005]: http://dx.doi.org/10.1016/j.jcp.2004.10.036 (Christopher J. Roy, \"Review of code and solution verification procedures for computational simulation\", J. Comp. Phys. 205(1), 131 - 156 (2005) )\n", "\n", "[Eca:2009]: http://dx.doi.org/10.1016/j.compfluid.2009.01.003 (L. Eça and M. Hoekstra, \"Evaluation of numerical error estimation based on grid refinement studies with the method of the manufactured solutions\", Computers \\& Fluids 38(8), 1580--1591 (2009) )\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 2 (Ubuntu, plain)", "language": "python", "name": "python2-ubuntu" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" }, "nikola": { "date": "2017-02-23 16:23:47 UTC-08:00", "description": "", "link": "", "slug": "undergraduate-research-projects", "tags": "", "title": "Undergraduate Research Projects", "type": "text" }, "toc": { "colors": { "hover_highlight": "#DAA520", "running_highlight": "#FF0000", "selected_highlight": "#FFD700" }, "moveMenuLeft": true, "nav_menu": { "height": "102px", "width": "252px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 4, "toc_cell": true, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }