{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Common engineering numeric problems\n", "This notebook aims to collect a very brief summary of simple ways to solve common engineering problems in Python\n", "\n", "For a far more comprehensive discussion of chemical engineering problems solved in Python, see the [Kitchin Group pycse file](http://kitchingroup.cheme.cmu.edu/pycse/pycse.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Table lookup/interpolation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1d: numpy.interp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Problem: find P where T=130.\n", "\n", "\n", "\n", "\n", "\n", "\n", "
TP
100200
200500
3001000
" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAASCAYAAAD2Uea5AAAABHNCSVQICAgIfAhkiAAAAoFJREFU\nSInt1j2IVkcUBuBn13VNiG6iEcQiBFl/Ioi6RlFSiKAkFmICYiGoWCWkEGwCKlhY+NMYxULE0l3Y\nxkIjFmshwYiNogYTCIKIP/gLRk1E3KhrcebD2fHuej/BJvjCZb459533nvPNmXOG/xFaivkC/IAn\n+DA923Cx4O3EEfyFp5iE5ejGjYw3DTtwFQMYj59w5y18bUqrC7/gg8y2D48wu+AOFM9zbCk4H4vA\nVme2zfgD7U0G0rTW7uTYysy2LNn2FtyrOIDD2IVZFXrbcBdtmW0c/sOPNYN4a621eIivM9sqEczO\ngvtrDQcu4WiF/SJO1FjftFZr9uKg2M7jmW2OSKHeJj8+BlNwreLdTXz5LrTaKggNdGId1uP34l07\nNolD+CJxN4p/ED5P46MK3cfowChRPN6E2lpVwXyHxfgGP2N/BWcCenA9zVfjN3F2bqcPQP8QDsAn\n6lW12lqtFYTDYjdmiPNzCp8WnKleBUKk4RhRYYjUJM5biZFpHDGE8yVqa1UF00A/tuIrr+/O84r5\nPXyb5veG0f0ojf8Mw8lRWysP5gvMLMjn0rgCo9PvkyKlSowQ6UekzwDGDuHAA/WDqa3VCKYD55Pz\nnRm5sQMtXqVFl0ipEuNF/yFy+Tw+q+BNxoUaQTRQW6sRTL+obFfwd0aensazogdBH5YUol2iovRk\ntmOYb/CVqTM5dahYP0VcnYZCM1pgOzYUC7rxL+ZmtnnJPirNW0SPOp3ZYKJIgTWZbQ/+NPgKslCU\n975hgqmllZfmzaKv9OKZyP/7onFeynhnxFWmR1xIO0Qn/t7gvnELi8RVZI5IzXFYanCZvSMO+eVh\ngqmr9R7v8a7xEo03o1EmuRsfAAAAAElFTkSuQmCC\n", "text/latex": [ "$$350.0$$" ], "text/plain": [ "350.0" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy\n", "\n", "T = [100, 200, 300]\n", "P = [200, 500, 1000]\n", "\n", "numpy.interp(150, T, P)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2d: scipy.interpolate.interp2d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Problem: Find the viscosity from this table for $T=230$ and $P=800$\n", "\n", "\n", "\n", "\n", "\n", "\n", "
T\\P2005001000
100542
200332
300221
" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.interpolate\n", "\n", "T = [100, 200, 300]\n", "P = [200, 500, 1000]\n", "\n", "visc = [[5, 4, 2],\n", " [3, 3, 2],\n", " [2, 2, 1]]" ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 2.1])" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "interpolator = scipy.interpolate.interp2d(T, P, visc)\n", "interpolator(230, 800)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Plotting\n", "\n", "Plotting is normally handled by the matplotlib library. The pyplot interface aims for rough Matlab equivalence" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The notebook allows for inline graphics" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(T, P)\n", "plt.xlabel('T')\n", "plt.ylabel('P')" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.contour(T, P, visc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Algebra (manipulation of equations)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The sympy library supplies the ability to manipulate equations." ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sympy\n", "sympy.init_printing() # This will make the expressions be printed in a more pretty way" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = sympy.Symbol('x')" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAM4AAAAXCAYAAABDLnAjAAAABHNCSVQICAgIfAhkiAAABIdJREFU\neJzt2nuIVVUUx/HPmNPTrOil2WOayDKLSilFM6TsgdU/gZIRFRUYGP3RhCVGDwjCKCECIehxLSp6\n0IuC/oqxwMqKKIqJstKUogcVRA+ztD/WucyZ651p7jnneu8dzhcu5+zz2Gf97jp777XXPpSUlDTM\nHgXVswrb8E1B9bWSeZiLWbgJv2JTKw0qgFlYjAuxEpuTX0kLmYfvMb/FdhTFT7gq2V+E3zGhdebk\nZgLuSZUX4w9MaY05Y4NxOe+fiFMxUIAt7cJ8PJ8q74mu1phSCL24Bccl5dexjxhVS1pEH/ZCv9aP\nODdjRcF1Po3bC65zNEzFU3gEa3A/9s9YV5cI1aqNfzp24vScNuahGb5qBvvi46IrvQQnJ/v9sjec\n7gJsOUaEVHcWUBecidvwqPjzspBV10lirjgnKU/C14rT9oRoiFloR1+NRB57z8B7opPZhayh2hE4\nCJ9kvD/NGvnj7ZWyv+D12IC7k+1bss1xsugajxexGuuTY93J83/JYEMt1+A70eNnoR19NRJZ7J2G\n17AM/w53UdaGc0Fi0K3Jbyoux0UZ6uqWr2e4FG/kuD/NbJHoODYp92OGyEY1ShZdVybPrqSObcGh\neCCDDWkWJtvlIrzuyVBHO/lqNGSxd0C8x1fjs+EuGp/RoMdqyteLmLw/Y31ZmSBeiOvEfCQv/+BT\nfJuUe7EdHxVQ92hYgo0iBV4kZ2Oy6EknGewgNhX8nJEo2lctpbbhzMQVIq7rESKX4kAxwtyBL1PX\nH4kbhTP6xJ/zalMtHsoKQ1Ot9WhE0/tiXnMDduAsXIwvCra7Hl3J8zaIF/188X/24C58WHP9aHX1\nCp/UJhcOKF7CiBTtq7bheDxoMPtSwedikjpXvEh9TXhuRbaw4TRDMzM77TrhbJWm6rN6Grj+EKFh\nQIzgVebjN5ENq1L6anRUZLM3fX/d5ECaNdgvVX4O7yb7R+E+HJzDiOGoaFzcOKwVayxV6jmjVZpo\nXNfhQsNfYp0lzVZDR/LSV6OjokkNJx2qrRJpwipzDE5St8ieiamyViyW1nK0SP/+XefctfigzvGl\niW317knTbE0Up+vnZLsRf9ac24rzxKR+m9JXtRRpby6miZa2oOiK61DRWK8wSQzptdTrxdLsTk1k\n6+1+wJt1jq8Ttk+uc6701fBU7IYRJ825opWuTx3rxVc5jCiKBTgRL6WOVVOOl4l4+nG8UHNfO2uq\n8o6I9WupjjQ/1jnXzrrGsq8QMfW9OCUpvyxWTauMEzFoM6jI1ytI7q/txVqpiWy6logPMNNznC6R\nnn42KZe+Gj0VTRpxqgugC0UMOV30EL2ih6uyUnyq0a5012zpTE3PiDWjZalji8Ra0vKk3Im60nSS\nr/ZOtrt86VAN1daJ1jUz+c0WLfwhMWS+grebbWUGJore6YSk3IdzxESzEzXtEKvWq0VWabsYcWYb\nXKzsRF10jq8OE410isElgM3i87KH8eRusuN/qcg//LcjFWNPV0VnaaroLHsbYoZivrptN8airk7T\n1Gn2lpSUlJSUlJSU5Oc/raY9jcYfy0EAAAAASUVORK5CYII=\n", "text/latex": [ "$$x^{4} + 4 x^{3} + 6 x^{2} + 4 x + 1$$" ], "text/plain": [ " 4 3 2 \n", "x + 4⋅x + 6⋅x + 4⋅x + 1" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "equation = sympy.expand((x + 1)**4)\n", "equation" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": true }, "outputs": [], "source": [ "y = sympy.Symbol('y')" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$4 y + \\left(y + 1\\right)^{4} + 4 \\left(y + 1\\right)^{3} + 6 \\left(y + 1\\right)^{2} + 5$$" ], "text/plain": [ " 4 3 2 \n", "4⋅y + (y + 1) + 4⋅(y + 1) + 6⋅(y + 1) + 5" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "equation.subs(x, y + 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Systems of linear equations\n", "Systems of linear equations can be solved directly without iteration. In both cases we reason via matrix algebra.\n", "\n", "$$\\begin{align}\n", "2a + 3b + 4c &= 5 \\\\\n", "2b + c &= 1 \\\\\n", "a + b + c &= 1 \\\\\n", "\\end{align}$$\n", "\n", "## Analytic solution\n", "### sympy.solve" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a, b, c = sympy.symbols('a, b, c')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We state the equations in the form $f(a, b, c) = 0$." ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAL4AAAAWCAYAAAB+OyYeAAAABHNCSVQICAgIfAhkiAAAA/JJREFU\neJzt21loHVUcx/FPk9S6IVWsCjY1TYtarYQ+KFI1sSoiCIoiUhcE9c0ncXkIghZR0EpbtFIfRL0v\nooIiWEXUilYfFNtSN1DQUne0irW0Ki5JfDhzZXIzc3NvMpOZ3swXwmTO8p//78w/Z84WKioq/ucY\nPICNOLJgX7LkcHxctBMYxHbswTM52C+LzjxppvFErMNwVK5lPsHq6flVOs7ENowV7UjEYfgXt2Zs\nt2w686BVjcN4uVWjCyOD3VP3q1Qswyuo4X3lCYiVgi8rMrJXVp1Z0q7GJULn0hJ9LRg8WKkpj7Zh\n7EVXDrZryqMzL2om19iXViaPRq9ojSG8i9GiHZmNTCXwL8DzWIvHcb3wAtM4GT9gwxSe1an04Bx8\nK0zC1uENnJ5S/mBuwzOE3vkRPIh7cWhCucI19kvvhW7GL8InhDB7/h07m9gbjOxtyci/6VBTjiHA\nWYIfmzE3SrsNn2FOQvl227CmHDqvFoJ5ILofwn5cnlA2D42LojItdfA34Z2E9AH8I/Twcb7D+kls\nLtHmslJO1JQjIO7Er8a3yZWCb2m9fjttWFO8zhX4CzfE0i7DDmEBJYmsNXbha1zYmNET+/0o3IIT\ncEWCkftxAM/F0k4Sev23J3Fg1yT5jQwIwpJ6vyR24sY2n1Ek9fH9H7G03uh6REqddtuwaNbiJzwd\nS3sp+kkja42jQlvfheXYJHTe4wJ/TnQ/18SAm49L8EK9YsT5kfGkL8R0+Eh2y3xlZKXQkcQ5GyP4\nYubdyZwFQi/7mKCpSEaEpflusbiOj3324T58iBcbKi+NKr7XkD4Ulf8Ni7P1t2NZgKOFDZg63bhI\nmODuLcKpjOkXgmx7wX50YauwO74ef8czGtkirDjE2Rddv4mlzRP+qrdG97c3cWARDmnd38I4RfKK\nQ5YcEMamP8bSrhKOidzTpF6WbZi3zj3RdX9C3mJcmlIv6zhZGD1vwoQ5KfDHTBzqfCn07P3RfTce\nFc7x7MKxwmQtiXOx28SvSBHUX3bSBGoVPjd+TJoHf+J1YReSMEfaiDvwQUqddtuwaJ27BY2DDenn\n4W7Jc8IsNdapx3dLE/2+lIJLhXMPG4QXtQzX4k08ieNT7J0qTHI2tfLwHDgOr+FTQdcYfsZbuC5W\n7rQo/asZ8KkXzwptuVlY7WhGK21YNp3z8RSewEN4WFgxTFtazFJjnT5trG61VbgDWVO0AzPEmqId\nmAH6tHFkYaRJ3mxgXtEOzBCzQWe3lM3YpOD+XjiWfE2eHpWUVcIGS6czW3SuxqtJGUmBPyqsMy8X\nxmad9I8ozejBxcI5pE5mNujsFeZPo5I3YysqKioqKioqOpn/AGLQ3xdFvRP4AAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\left \\{ a : -1, \\quad b : 1, \\quad c : 1\\right \\}$$" ], "text/plain": [ "{a: -1, b: 1, c: 1}" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.solve([2*a + 3*b + 4*c - 5,\n", " 2*b - c - 1,\n", " a + b + c - 1], [a, b, c])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### scipy.linalg.solve" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": true }, "outputs": [], "source": [ "A = numpy.matrix([[2, 3, 4],\n", " [0, 2, -1],\n", " [1, 1, 1]])\n", "c = numpy.matrix([5, 1, 1]).T # .T for transpose" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Direct calculation via inverse:" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "matrix([[-1.],\n", " [ 1.],\n", " [ 1.]])" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.I*c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For larger matrices, it can be faster to use a dedicated solver:" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-1.],\n", " [ 1.],\n", " [ 1.]])" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.linalg.solve(A, c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Laplace transforms\n", "## sympy.laplace_transform" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": true }, "outputs": [], "source": [ "t, s = sympy.symbols('t, s')" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(1/(s**2 + 1), 0, True)" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.laplace_transform(sympy.sin(t), t, s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## sympy.inverse_laplace_transform" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADcAAAAVCAYAAADiv3Z7AAAABHNCSVQICAgIfAhkiAAAAsNJREFU\nWIXt1l2IlkUUB/Cf7toqFoaLC7qISmhqJhIo+EkiRAqSgpWCQa6BF1EWgnUjVF4l6EVBaNGNWAkF\n0kUggoEfGBFFShBdJJqhGS6JBn5kHxdnHnacfXbfXdvVm/3Dy/uc/5yZOefMmXOGIfwvTMP8e7Hx\n8Luwx2uYdRf2uSc4i0m9jE/GHryNz/BAjc4EjGywTxs23IF9d4QVeBfn8DoW1ehMxncYn+QteKfQ\nGYOXC+4hnNc9aKt72GdQ8AJ29zB2H75FR8Y9jV8KvTdxf8G9guu6n+YwfFAJzf00Fl4SkesJX+OT\n9L0EX/Sgt1mc2L6MG4OJGIG/MA4t+LOYuzjtc73g/8WlZN/PvTkxEDgt7sJwtGb8yGTE9kJ/ZzKw\nJcnrsbJm3Ys1cys8hY3UV8s5eF9c8F3Yq/6SN0IrbuJ3PIdR2djaNL6/mLMQV3EjyQtwKn0/i4Pi\nxNqwNMkvFmucx/Q6g57HSbRn3FYRjf6iSaRnB54oxj7HtWRc9TuMv3Es0zuA0cXcTcL5UeoxVXbv\nKswXeb4w4+aJO9PW0JW+owmX8XHBrxAp+VbGHdK9LuzH8V7Wny0y7raJb+APrBIltQk/Yh2u9Mf6\nBmgXheOrgl+e/j/NuM6k25lxj+PDXtYfiws5MQK3RDMdbMwVJ7Qs45pFkTha6G7Ho5n8SJpbpnmO\nV6XnXlVQWsVJDXr5FEGE3zJuuUj9bYXul25/ly5N808k+UHROnLMwDd0OXdJpF5d3xuPNX23vSGq\nJn0r47aIInCk0D0m7lCFxfheV9/bXKwzBT9UXOVclZJPii5fYS52iEo2UOgUka/KdYfoa+UTq7Lr\nOB5LchPOZLZd03W/huEZ2Ysod6RZ9LZ28R5swU/C6Tw6A4GZImi/il64VffXRo6N+AgP4z1RjC6K\npv9P0mkVreTyANs6hCEMoY/4D9Aghrn3HoXtAAAAAElFTkSuQmCC\n", "text/latex": [ "$$e^{- t} \\theta\\left(t\\right)$$" ], "text/plain": [ " -t \n", "ℯ ⋅Heaviside(t)" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.inverse_laplace_transform(1/(s + 1), s, t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Systems of nonlinear equations\n", "## Analytic solution (sometimes):\n", "### sympy.solve" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF0AAAAWCAYAAACi7pBsAAAABHNCSVQICAgIfAhkiAAAAgNJREFU\naIHt2LtrFFEUx/GP7opiI0GNoCBiUNFGRFIoImxrYWuhFnZCQEStxEJQsNQ/wQdWNjZCAgEHUUFE\nfGAhiiJIGl9gKaKxuFkI48yd2eyYZLLzre7ce849v3N29s7MoWHBGcddjKXmN+NYjs9qvPqfohYR\nebm2cG1mPc0poabjeZsmGXNrcAsrMtZG8RTTca1LgqJct+NmxD/pDpaXCHYZV/Fr1txO3BP+Eb9L\n7FFnyub6Fh9wvNcASep6KyYLfK4bjDud4lzXCcdPK2Mt6Q6K7vQx4WhpKMdXTKETMyoq+iE8rErR\ngPAIh2MGsaJvwjDeV6loAHiBvTGDWNG34HOVagaEb9gWM2hH1jbgR6Vy5o/dwkNvWUn75zhRUezv\nwmt2LrGit/GnIiHzzUvsWaDYbfyMGcSOly8YqlTOYDCk4FiOFX0KaysQsQOrKtinLqzHp5hBrOjv\nhC+wjQVBugXN6jt08Aa3C/aoC7Fcu4ziSS+bJqnrGziSYTeMCbwWvtCmhePoPo7Osts1M/+xFxGL\njLK5dnmAfRnzSV6A9MJ+3Old5z9crGCPOjCCZzlrSXdQ9EX6WOgujvQpZmWf/nXhDM4XGZXpMp7D\nJeXfedN05P/6S4mDQid2olfHSaHZfjo1fwAn5yCkjStz8KsbLVyQ3V08K9S0qFvb0NDQ0C9/AcB6\nVgA8Ho4eAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\left [ \\left ( 1, \\quad -1\\right )\\right ]$$" ], "text/plain": [ "[(1, -1)]" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.solve([a**2 + b,\n", " a/b + 1], [a, b])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numeric solution (often)\n", "### scipy.optimize.fsolve" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.optimize" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def eqs(x):\n", " a, b = x\n", " return [a**2 + b,\n", " a/b + 1]" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1., -1.])" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.optimize.fsolve(eqs, [2, -1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Systems of ODEs (IVP)\n", "## scipy.integrate.odeint" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sys(x, t):\n", " a, b = x\n", " return [-2*a, -a - 2*b]" ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "collapsed": true }, "outputs": [], "source": [ "times = numpy.linspace(0, 5)" ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": true }, "outputs": [], "source": [ "scipy.integrate.odeint?" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false }, "outputs": [], "source": [ "solution = scipy.integrate.odeint(sys, [1, 1], times)" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(times, solution)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical integration (aka quadrature)\n", "## Given a function\n", "### scipy.integrate.quad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's say we're trying to integrate the surface under the curve $f(x) = \\sin(x)/x$ between 0.5 and 1" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def f(x):\n", " return numpy.sin(x)/x" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = numpy.linspace(0.01, 10)" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, f(x))" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.45297565232411635\n" ] } ], "source": [ "integral, error = scipy.integrate.quad(f, 0.5, 1)\n", "print(integral)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Given smooth data\n", "### Trapezoidal rule: scipy.signal.trapz" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xdata = numpy.linspace(0.5, 1)\n", "ydata = f(xdata)" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAI0AAAASCAYAAABmbl0zAAAABHNCSVQICAgIfAhkiAAABK1JREFU\naIHt2VmoVlUUB/CfOWWamWmKGM4YvaQVVoi9FEQ9lNmLD5fqIZDKoshoNhukiZIiMjRoMMIoxGiA\nEkoMMiQaKKKECJtIrazsOmRXe1jn6PF4zv32uX4PPXx/+Dh37/2/a+3/Ontchw46aIh+pfJ0PIgt\nOIBRuAVb2+BrEQZm9ot4CK/ja+zFJFyCVfixwJuF2zAE47EJi/FTyd5k3IM96MFQ3IpfCpyL8Aw+\nx+7M7/5C+yY83VBHu3kpOprYS41fqj1wgnhJXYW6O/AlBrUw3AoT0I0lFW0HSr8e3F3inIF3MSIr\nD8MGbMPEAm8SfsW8Ql2XGBwDCnU3V/jNf/txYR90tJOXqiPVXmr8Uu0dxNLMSLFTI7EP1/RiOAUr\nxAupcr4la1+Lx3B6BectTC3Vzcxsri7UrcXvOKZQN0TM1qsKdctxiphBRe5sPNFHHe3kpepItZca\nv1R7B7EZb1TUf4H3ejHcCvMwvxfn6xNs/I3vcXKpfoeYkcRquE8su2V8gzcL5acqOMPwtng5VWil\no128JjpS/abEL9lePpKPx7TMcBk/48waw60wDBfrfTSn4DuMEft6EXsdeskjxSq5p+L//xR7eo6F\nFZxHxB6/u6ItVUc7eE10pPpNiV+yvXwrmpA9/6rgdGM4BmdOmuB2rQ+CgzLeKHGemCIObJsLnHPE\nwC4eAseJQKzPytuxC8dW+BiH0ULvvxXts8UE+vgodLSL1xcdrfymxC+1fwcHzfDs+U8Fpzt7jtDs\nFjVDLIvftuCNwUv4ISt34QNxtslFdhf6kWOhGGR3ZuUevCJuXv3EsgpjRYCIWbytog9P4vKj1NEu\nXlMdKX5T4pfav4M4W/0evDprG1fRVodj8ILDb1119vtXlHeJF1mHydiJB0r1o8UKtSArD8g4n2T+\nT6qwdT6+qvGTqqPdvFQdTeJcRF38kuzlZ5rtvTjI98GdLTpSxAI8r3rlKqOnorwdl9bwB+NlrMRd\npbbtYgKMxeNC7Eoxo/aIG0kZ1+KjGl+pOtrNS9XRJM45eotfkr18e9oqRtSJFZyh+EP6oBmL08S1\nthU2iCV4Tqm+vzjjVOFZkXNYXNO+A/eW6sbgQ4eW+hwDRU6m6pqdqqPdvBytdDS1l6Mufsn28kHT\njU9F7qKMqfisQacuwKki15BjYPacL/bMF7FG5Aqq9s5RIn9TxhKxbN9fqLsis1eH0SIDurSibZaY\nFFXXzlQdx7WZtyZRR5M451iiPn59sec+kVIuflqYIkb1dSUB09TnM6owUfVe+5ojV5Q86VTOCndl\nfSxjReHvG8UBcXyhbpHIdFfdRq7MfKUmLydKOzMcLa+pjhS/KfFLslfM/i7HDZnxVVnd9eKQuLLA\nO09c09apT7eXMbD0zPEwluFqcZ3vh5uwUeRNij6X4R1x0yr2v7jlDBOH6Pw6OlN8O7tMdd4jT3al\nngnqdLSb11RHK3up8Uu1dxhmiJTzMrH3rXHkljVdnIHqPugVMRzviwThASF4I+YWOHPwqlj61oql\nszybflP/rai41A7Bo3hOrGLrcG4v/ZsrzmtntUFHO3lNdbSylxq/pjo66KCDDjro4P+C/wDMTrOi\nKFe29QAAAABJRU5ErkJggg==\n", "text/latex": [ "$$0.452974449424$$" ], "text/plain": [ "0.452974449424" ] }, "execution_count": 172, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.integrate.trapz(ydata, xdata) # note it's _not_ x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simpson's rule: scipy.signal.simps" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAI0AAAASCAYAAABmbl0zAAAABHNCSVQICAgIfAhkiAAABcZJREFU\naIHt2WuMnkUVB/Df1pZSaQuUll5S0nIpDV4i1SimxUajUdHEEEIQkkWJmlBE5SKNclELoSom1rsY\nSIyK0UYByzWgUQsm0hBBEVBoFGypN1BREdpaaPlw5t2d99l59p1ng4kf9p882XfOOTPnnDkzZ87M\nMolJdMRQo70cn8I27MNcrMVfXwBdF2BaGj/Hp3EDHsJuHI534BrsyOReg49iBhbjbnwcf2yMdwQ+\ngV14DgfgI/hLJnMCvob7sDPp3Zvx78ZXO9oHR2NdNubO1H5qAn4sxoUiDtPx4mTL/Q252pjV+lGr\nFxyYOg9ntIvwAPYrdeiAJXhaTGAT+xrfc/hYQ+aV+CEOSu2ZuBOPY2kmdzj+hpMy2rBYHFMz2ocL\nenvfXrylo33wEmzHytRegEcbPtf6cQg2YWHDt4exLKN1iVmNH7V6R7A+GZ9P7hzswVmlDh1wVTJ0\nXYG3LfE34bN4RUHmFhzVoK1IY27MaJvwD0zJaDNE1jkjo12Jw0Tmy2VX4QsTsG+qmNhzM9pheALn\nTMCPtfhgQc9FuCJrd4lZjR+1ekewFTcV6PfjJ6UOlTgJp2pfNJsrxviP2MWHNuhPisxC7Kw9It03\n8TBuztpfLsjMxK1ikXW17z34r9EM0oYaP4hF/YNC//OxIWt3idnmAbZV6+3tslki/WwvdPgTXlWh\nsISZeJv+XTQRPIr5oj7JsdtokOeIHber0P9fopbo4QMFmc+I2mLnBOw7Db/DPwfI1fgBv8KJ+A4O\nTrTp4hj6Rmr/L2JWo3ckrS1Jf/9dGOhpzE6dd3c04kJjC98m9ktyc0U9caQoFLdmMq8Vk5QXs4tE\nADan9hN4BvsXdCzCPOHvswX+KrGBfjEB+4ZwvMhwq/FmsVmW4lL8sqMfRIDeJxbjG8Sx8VZcjF8n\nma4xq5nnGr0jWCmOj0sLBlyTePMLvPFwbDKyh7bj6ffi/O9hWFT+CwaM/0lRzK3MaF8XaT6/FS4Q\nk7TP2GOhh3v0F6Jd7Jubxv4t1mRyrxe3ppeO60XZD2Jx3Wa0cL1Zfwy6xqx2ngfpHcFx2oO6MfEW\nlTq2YAq+qb+Cbxv/RYX2M/jiOOMfIQJyeYM+T+ycM1N7apK5N+k/pDDWG/GbcXQNsm9+GnuXsfXQ\nDv21VBNtfhBZ4Gq8HY8kHX/GyxO/a8xq53mQ3j7j2wy4KfFmFXhtOEuktxxt45ewLX0lTMcW/QVh\njoPFO80GEYwl4tjZaey7FFwnMlQX5PZNE749UJDbIo6H6QXeeH6cJ25aPRyAz4mMeV+ivRAxa85z\njd4+5l5jr5tEFf7kAOU5FuBLBXrJwTvxs4LsDuWClki9l3WwBx7Djwv0aeJGs76lX619jyfZJu4Q\nfi8s8Nr8GBLz/bICb00a7xjdYlbjR63ePtyD6wsdtuOnBXobhvEj8R7Q+25JSh9K7d7j21OiYm9i\nl7gmN7HO2Aepdw2wZ17SvabAW5V457X0rbXvRlHTNLElyU5t0Ndp9+NQo6+xTQyJm+CK1K6NWY0f\nXfSO4DLxlJ2n8CPTQGc3ZJcZe36Ph6XKmeZaUUjm6D12NSd1WHlnXpX9Plfs+sUZ7QKxo0q3qncn\nXW2Pl7X2nSbqg3xOhsQV/HuN/oP8GBK3q+MLMrOEL73A1sasxo8uekewUDh5ekb7PB7UX9CuFmnx\n9sLgbViWDGweA68WabpnzBC+hZ83DFwtrtTfbnwb8d1M7hL8weiNYIW4ITRvJj2sTXa9t4Vfa98U\n3CUWaA+nJJuXTsCPd4p5z/vOxvdxckarjVmtH1V6m4XhsSKwW8XqmiOewR/LZJaLM/I6vN/4mC3+\nSbY8ObhbvFtcIY4peB0+JArV2eI1c73+muHvyZYSLje6W2aI3Tc32X+geLC7q6XvieJt4k3KbzS1\n9kn2bRC1xh4xt5eIq25XP4gFdr6Ys33itvMVY192a2LWxY9avZOYxCQmMYlJ/D/heZaL8o4yEAo4\nAAAAAElFTkSuQmCC\n", "text/latex": [ "$$0.452975628058$$" ], "text/plain": [ "0.452975628058" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.integrate.simps(ydata, xdata)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical derivatives\n", "## Given smooth data\n", "### central difference estimate: numpy.gradient" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = numpy.linspace(0, 2*numpy.pi)" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": true }, "outputs": [], "source": [ "y = numpy.sin(x)" ] }, { "cell_type": "code", "execution_count": 176, "metadata": { "collapsed": false }, "outputs": [], "source": [ "derivative_estimate = numpy.gradient(y, x[1])" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y, x, derivative_estimate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Given noisy data\n", "### Savitzky-Golay scipy.signal.savgol_filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's fine for smooth data, but what if you have some noise added?" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y_noise = y + numpy.random.randn(len(y))*0.1" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nvohITPw/Ofy4TzQJSn8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y_noise)" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": false }, "outputs": [], "source": [ "derivative_estimate = numpy.gradient(y_noise, x[1])" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 181, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y_noise, x, derivative_estimate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's clearly not great." ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.signal" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false }, "outputs": [], "source": [ "smooth_derivative_estimate = scipy.signal.savgol_filter(y, 5, 2, deriv=1, delta=x[1])" ] }, { "cell_type": "code", "execution_count": 184, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 184, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y_noise, x, smooth_derivative_estimate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That's more like it!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimisation\n", "## Nonlinear\n", "### scipy.optimize.minimize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's minimise $\\sin(x)/x$ " ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/alchemyst/anaconda3/lib/python3.5/site-packages/ipykernel/__main__.py:2: RuntimeWarning: invalid value encountered in true_divide\n", " from ipykernel import kernelapp as app\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEACAYAAACwB81wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHkBJREFUeJzt3XmYlOWV9/HvQYK4MqgjGkAicVoFcRcNYCgVFdAIvo6y\nCcoMkZgwaowGJDq0okbQXCoxxt2IG8QtYQhRiFCJEgWMG0KzGBUBDSgq4hJp4Lx/3IV22u6mu6u6\n7qp6fp/rqouu5u56jgKnTp3nXszdERGR0tcsdgAiIpIfSvgiIgmhhC8ikhBK+CIiCaGELyKSEEr4\nIiIJkZOEb2Z3m9kaM3u1jjGTzGy5mb1sZofm4roiIlJ/uarw7wVOru03zawP8G13/w9gJHBbjq4r\nIiL1lJOE7+7PAh/WMaQfMDkzdh7Qysza5OLaIiJSP/nq4bcFVlZ5vjrzPRERyRPdtBURSYjmebrO\naqB9leftMt/7GjPT5j4iIg3k7ratMbms8C3zqMk0YBiAmR0DfOTua2p7IXev8bFli7N8ufPAA84F\nFzhHHeXstpszYoQze7azaVPNP5evx7hx46JeX/ErfsWfzPjrKycVvpk9BKSA3c3sbWAc0CLkbr/D\n3WeYWV8zex34FBjeuOvAfvuFx5Ah4XsrV8LUqXDxxfDeezBwIAweDIcdFsaLiEiQk4Tv7oPrMWZU\nLq5VXfv2cMkl4bF4MTz8MJx5JrRuDZdfDqedBs10p0JEpLRu2nbqBOPHw/Ll8LOfwVVXhUr/kUdg\ny5amv34qlWr6izQhxR+X4o+r2OOvD2tI/ycfzMxzFZM7zJgREv+GDeFNYMAAaJ6vW9UiInlgZng9\nbtqWdMLfyh1mzQrV/4cfwm23QY8eOb2EiEg0Svg1cIdHH4WLLoI+fWDCBNh99ya5lIhI3tQ34ZdU\nD39bzMIN3cWLYYcdoHNnmDw5vBGIiJS6RFX41b3wAowcCbvuGto8+++fl8uKiOSUKvx6OPJImDcP\n+vcPPf177lG1LyKlK9EVflWLF8NZZ8Ghh8Kvfw277JL3EEREGkUVfgN16gTz50PLlqHyf+WV2BGJ\niOSWEn4VO+4Id90F//u/0KtX6OsX2AcgEZFGU0unFsuWhRbPgQfC3XeHNwMRkUKklk6Wysrg+efD\nqtzjjoM1te7tKSJSHJTw69CyZZin37s3fOc7UFEROyIRkcZTS6ee7rsPfvpTmDIlVPwiIoVCLZ0c\nO+eckOwHDAjJX0Sk2KjCb6CKCjjlFBg6FMrLdciKiMSnzdOa0Jo1Iel37w433aSkLyJxqaXThNq0\ngT/9KSzUOv/8/ByuIiKSLSX8Rvq3f4OZM2HRIhgxAjZvjh2RiEjdlPCzsMsu8OSTsGIFDBsGmzbF\njkhEpHZK+FnaaSeYPh3WrYPBg6GyMnZEIiI1U8LPgR12gN/9Dj7/PBywsnFj7IhERL5OCT9HWraE\nxx4Lm60NHaqevogUnpwkfDPrbWZLzGyZmY2u4fd3NbNpZvaymS00s3Nzcd1C06IFTJ0K778fZu8U\n+OxSEUmYrOfhm1kzYBlwAvAOsAAY6O5Lqoy5DNjV3S8zsz2ApUAbd//abc5imIe/LRs2hO2VU6lw\nULqISFPK5zz8rsByd1/h7pXAFKBftTEObD1DahdgXU3JvlTssgvMmBFu5irhi0ihaJ6D12gLrKzy\nfBXhTaCqW4BpZvYOsDMwIAfXLWi77x7m6R97bJizP3Jk7IhEJOlykfDr42TgJXc/3sy+Dcwys4Pd\n/ZOaBpeXl3/5dSqVIpVK5SXIXGvbFmbNgu9+F1q1goEDY0ckIqUgnU6TTqcb/HO56OEfA5S7e+/M\n8zGAu/uEKmOmAz9397mZ508Do939hRper+h7+NUtXBh6+vffDyedFDsaESk1+ezhLwD2M7MOZtYC\nGAhMqzZmBdArE1gboAx4IwfXLgpdusCjj8LZZ8Nrr8WORkSSKuuE7+6bgVHATGARMMXdK8xspJmd\nlxl2NdDNzF4FZgE/dfcPsr12MTn22LCz5qmnwrvvxo5GRJJI2yPn2fjxMG0apNNhWwYRkWxpP/wC\n5Q7Dh8NHH4WVudttFzsiESl22g+/QJnBHXfA+vVw6aWxoxGRJFHCj6BFC3j88bA461e/ih2NiCRF\nvubhSzWtW4eE3707dOwIffrEjkhESp16+JHNnQunnw7PPgtlZbGjEZFipB5+kejeHa6+Gvr3h48/\njh2NiJQyVfgF4gc/gH/8I/T2m+ltWEQaQBV+kZk0KeyjP3587EhEpFQp4ReIFi3C9gt33QW//33s\naESkFKmlU2AWLIBTTgkrcTt1ih2NiBQDtXSK1FFHwcSJ4SbuRx/FjkZESokq/AJ14YXwxhuhvaOb\nuCJSF1X4Re6GG2DdulDti4jkgir8ArZyZWjxTJkSDkQXEamJKvwS0L49TJ4MQ4ZoD30RyZ4SfoE7\n6ST4/vdh0CDYtCl2NCJSzJTwi8AVV4R5+ldcETsSESlmSvhFYLvt4MEHw2P69NjRiEix0k3bIvLX\nv4adNZ9/HvbdN3Y0IlIodNO2BHXrBqNHw4ABsHFj7GhEpNiowi8y7nDaaXDAAXD99bGjEZFCoEPM\nS9j778Nhh4WzcXVSlogo4Ze4P/8ZBg6EF1+EvfeOHY2IxJTXHr6Z9TazJWa2zMxG1zImZWYvmdlr\nZjYnF9dNsp49w6EpZ58NmzfHjkZEikHWFb6ZNQOWAScA7wALgIHuvqTKmFbAX4GT3H21me3h7u/X\n8nqq8Otp82Y4/ng4+WQYOzZ2NCISSz4r/K7Acndf4e6VwBSgX7Uxg4HH3H01QG3JXhpm6/z8SZPC\nYegiInXJRcJvC6ys8nxV5ntVlQG7mdkcM1tgZkNzcF0B2rWDO++EwYPhww9jRyMihax5Hq9zOHA8\nsBPwnJk95+6v1zS4vLz8y69TqRQpbRVZp+99D55+GkaMCMck2jY/2IlIMUun06TT6Qb/XC56+McA\n5e7eO/N8DODuPqHKmNFAS3e/MvP8LuCP7v5YDa+nHn4jfPEFHH00jBoVEr+IJEc+e/gLgP3MrIOZ\ntQAGAtOqjfk90MPMtjOzHYGjgYocXFsytt8eHnoILrsMli2LHY2IFKKsE767bwZGATOBRcAUd68w\ns5Fmdl5mzBLgKeBV4HngDndfnO215V916gRXXhn6+dp6QUSq08KrErN164UuXeDaa2NHIyL5oJW2\nCbZ2bdh64cEHdTSiSBJot8wE23NPuPtuGDZMUzVF5Cuq8EvYhReGs3CnTtVUTZFSpgpfmDABKirC\nQegiIqrwS9zChWG/nXnzoGPH2NGISFNQhS9AmK0zdmzo52tXTZFkU8JPgAsvDAuzJkzY9lgRKV1q\n6STEypVwxBHw5JNw+OGxoxGRXFJLR/5F+/Zw883hwJTPP48djYjEoAo/YQYNCvP0b745diQikita\naSs1+vBDOOSQsDDrxBNjRyMiuaCWjtSodWu4914YPhw++CB2NCKST6rwE+rHP4bVq7UKV6QUqMKX\nOl17LSxaFPbQF5FkUIWfYC++CL17h1/btYsdjYg0lip82abDD4cLLgj9/C1bYkcjIk1NCT/hxoyB\nDRvg1ltjRyIiTU0tHWHZMujWDebOhf33jx2NiDSUWjpSb2VlcNVVMHQoVFbGjkZEmooSvgBw/vlh\njv7Pfx47EhFpKmrpyJdWrw5n4c6YAUceGTsaEakvtXSkwdq2DXvsDB2qDdZESpEqfPmagQNh773h\nxhtjRyIi9ZHXCt/MepvZEjNbZmaj6xh3lJlVmtn/y8V1pWn86lfwyCMwe3bsSEQkl7JO+GbWDLgF\nOBnoDAwyswNqGXcd8FS215SmtfvucOedYUHW+vWxoxGRXMlFhd8VWO7uK9y9EpgC9Kth3P8AjwJr\nc3BNaWJ9+kDfvuF4RBEpDblI+G2BlVWer8p870tm9k2gv7v/GtDejEXi+uvh2WfhiSdiRyIiudA8\nT9e5Caja268z6ZeXl3/5dSqVIpVKNUlQUredd4bJk+GMM6B793BSlojEl06nSafTDf65rGfpmNkx\nQLm79848HwO4u0+oMuaNrV8CewCfAue5+7QaXk+zdArM2LGweHGo9LV3vkjhydsRh2a2HbAUOAF4\nF5gPDHL3ilrG3wv8n7s/XsvvK+EXmI0boWtXuOgiOPfc2NGISHV5m5bp7puBUcBMYBEwxd0rzGyk\nmZ1X049ke03JrxYt4P774dJL4a23YkcjIo2lhVdSb9dfD3/4Q5if30xrtEUKhrZWkJy7+OJwUIpW\n4IoUJ1X40iBvvhn6+bNnQ5cusaMREVCFL01k331h4sSwwdoXX8SORkQaQhW+NJg7nH46HHAAXHdd\n7GhEJG/TMnNNCb84rF0Lhx4Kv/0t9OgROxqRZFNLR5rUnnvC7bfDsGHhEHQRKXyq8CUrI0aEX++6\nK24cIkmmCl/y4sYbYc4cmPa1TTJEpNCowpeszZ0L//mf8NJLsNdesaMRSR5V+JI33bvDf/93eOi9\nWqRwKeFLTowbF2bu3HZb7EhEpDZq6UjOLFsWqv1nnglz9EUkP9TSkbwrK4Orr4YhQ8KWyiJSWFTh\nS065w2mnhX12rr02djQiyaCVthLN2rVwyCFhFe6xx8aORqT0qaUj0ey5J9x5Z9hgbf362NGIyFaq\n8KXJ/PCH8PHH8MADsSMRKW2q8CW6G26AF19UwhcpFKrwpUm98gr06gXPPw/f/nbsaERKkyp8KQiH\nHAKXXw6DB0NlZexoRJJNFb40OXc49dSwf/4118SORqT0aFqmFJS1a+Gww0I//7jjYkcjUlrU0pGC\nsueecO+94cCUdetiRyOSTDlJ+GbW28yWmNkyMxtdw+8PNrNXMo9nzaxLLq4rxeWkk2DAgHBoij7E\nieRf1gnfzJoBtwAnA52BQWZWfeusN4DvuvshwNXAndleV4rTNdfAihXheEQRya9cVPhdgeXuvsLd\nK4EpQL+qA9z9eXffuubyeaBtDq4rRWj77eHhh+GKK+DVV2NHI5IsuUj4bYGVVZ6vou6EPgL4Yw6u\nK0Vq//3D0YhnnQWffBI7GpHkaJ7Pi5nZccBwoEdd48rLy7/8OpVKkUqlmjQuyb+zzw5n4Z5/Pkye\nDLbN+QUislU6nSadTjf457KelmlmxwDl7t4783wM4O4+odq4g4HHgN7u/vc6Xk/TMhPis8/gqKPg\nkktg+PDY0YgUr7zNwzez7YClwAnAu8B8YJC7V1QZsw/wNDDU3Z/fxusp4SfIokWQSkE6DZ07x45G\npDjlbR6+u28GRgEzgUXAFHevMLORZnZeZtgVwG7ArWb2kpnNz/a6Uho6d4aJE0M//9NPY0cjUtq0\n0laic4dzzoHmzeGee2JHI1J8tNJWioYZ3HorPPcc3H9/7GhESpcqfCkYCxfC8ceH2TsHHRQ7GpHi\noQpfik6XLvCLX8AZZ4STskQkt1ThS8E5//ywu+ajj2p+vkh9qMKXonXTTbBqVTgiUURyRxW+FKS3\n34ajj4aHHtL++SLbogpfito++4QZO0OGwOrVsaMRKQ1K+FKwevWCUaPgzDNh48bY0YgUP7V0pKBt\n2QKnnw4dOsCkSbGjESlMaulISWjWDO67D558En7zm9jRiBQ3VfhSFCoqoGdP+N3voFu32NGIFBZV\n+FJSDjwwVPhnngkrV25zuIjUQAlfikbfvnDRRdC/f9hLX0QaRi0dKSruMGwYVFaGs3G1EldELR0p\nUWZw553w5pvw85/HjkakuOT1TFuRXGjZEp54Arp2DQeo9OsXOyKR4qCWjhStefPg1FPhT3+CQw6J\nHY1IPGrpSMk7+mi45ZaQ9Fetih2NSOFTS0eK2oABYaO1vn3hmWegVavYEYkULrV0pOi5hz13li2D\nGTPgG9+IHZFIftW3paOELyVh06aw584ee4SD0DVdU5JEPXxJlObNYcqUcC7uVVfFjkakMKmHLyVj\np51g+nT4znfC7prnnhs7IpHCkpMK38x6m9kSM1tmZqNrGTPJzJab2ctmdmguritS3V57hT7+6NFh\nh00R+UrWCd/MmgG3ACcDnYFBZnZAtTF9gG+7+38AI4Hbsr2uSG0OPDAszBo2LMzcEZEgFxV+V2C5\nu69w90pgClB97WM/YDKAu88DWplZmxxcW6RG3bqF83DPOAP+9rfY0YgUhlwk/LZA1Q1rV2W+V9eY\n1TWMEcmpXr3gjjvglFNg8eLY0Uip+etfi69tWJA3bcvLy7/8OpVKkUqlosUixa1/f/jkEzj5ZPjz\nn6Fjx9gRSbGrqICxY8MnxxtvjBNDOp0mnU43+OeynodvZscA5e7eO/N8DODuPqHKmNuAOe4+NfN8\nCdDT3dfU8Hqahy85d+ut8ItfwF/+Am312VIaYfVqKC8Pp66NHg0/+hHssEPsqIJ8zsNfAOxnZh3M\nrAUwEJhWbcw0YFgmsGOAj2pK9iJN5Yc/hPPOgxNPhPfeix2NFJP160NFf/DBsNtuYUX3JZcUTrJv\niKxbOu6+2cxGATMJbyB3u3uFmY0Mv+13uPsMM+trZq8DnwLDs72uSEONHg0bNsDxx4cdNtto2oDU\nYeNGuP12uPrqsFfTyy9D+/axo8qOtlaQRHEPK3GnTIGnn4ZvfjN2RFJo3L9q23TsCBMnhuq+kNW3\npVOQN21FmooZjBsHLVpAz54h6e+zT+yopFDMmwc/+Un4JHjLLXDSSbEjyi0lfEmkyy4LJ2f17Amz\nZ8O++8aOSGJ6883wd+LZZ2H8+LBob7vtYkeVe9o8TRLrxz8ON9969oTly2NHIzGsXx9aN0ceCZ06\nwdKlMHx4aSZ7UIUvCfejH8H228Nxx8HMmeEfvZS+ysqwKG/8+LAwb+HCZNzPUcKXxBsxIrR3jjsO\nHnkEvvvd2BFJU3GHP/whfLJr1w6eeipZ5yFrlo5IxqxZMGQITJoEAwfGjkZy7aWXwg3Zd9+FG24I\nUy1L5aAcHYAi0kAnnhjm5196aZiKp7qjNKxaBeecA336wFlnhfbNKaeUTrJvCCV8kSoOPhieew4e\neCD09zdtih2RNNaGDXD55aFl065dWCH7gx+E09GSSglfpJp27cI++suXh3NyP/00dkTSEJWV8Otf\nQ1kZvP12WCF7zTWw666xI4tPCV+kBq1ahZOz9tgDevSAN96IHZFsizs8/jgcdBA89li4OTt5cvFv\nh5BLumkrUgf3cBP32mvhnntC71cKz9y54d7LZ5/BhAlhhWySevT1vWmrhC9SD3PnwoAB8F//FbZm\nKNWFOcVm8WL42c/gxRfDnPohQ5L5Z6NZOiI51L17OPDimWfCdL73348dUbK9+WaYeZNKhT+bpUtL\ndzuEXFLCF6mnNm3CXP3DDoMjjoD582NHlDzvvhtmTx15ZNj/6PXXwyKqli1jR1YclPBFGqB5c7ju\nOrj5Zjj1VLjyyjArRJrWunUwZky4IduyJSxZEk6f0sybhlHCF2mE/v3DdL/586FrV3j11dgRlab3\n3guJvqwMPvwQXnklHFX57/8eO7LipIQv0kjf/CZMnw4XXgi9eoW53lqolRtr1oRZN/vvDx9/HLZF\nuP32sEZCGk8JXyQLZnDuueGG7l/+AsccA6+9Fjuq4vXOO3DxxXDggfDPf4ZPTrfeqkNqckUJXyQH\n2reHJ5+EkSPDzJGLLw4tCKmfhQvDG+dBB8GWLeFN85e/VEWfa0r4IjliBt//PixaFLZjOOCAcEye\nburWzD0cMdm7d1goVVYWZt3cdFMy9qaPQQuvRJrIq6+GSv+dd8KNxj59YkdUGD7/HH7725DYv/gi\nTKscMiQcRCONo5W2IgXAPdzYveQS+Na3wirdbt1iRxXH0qXhxuvkyXDUUWE+fd++0Ex9hqxppa1I\nATCD730v9Kj794ehQ8NmbNOmhV51qdu4MVTzxx8fzg5u2RIWLIA//jGsY1Cyz6+sKnwzaw1MBToA\nbwFnufv6amPaAZOBNsAW4E53n1THa6rCl5K1aVPY0XHixNDnv+QSOPvs0mpnbNkStqB4+OGwa+VB\nB8H554c3vBYtYkdXmvLS0jGzCcA6d59oZqOB1u4+ptqYvYC93P1lM9sZ+BvQz92X1PKaSvhS8twh\nnQ6J/5VXwj4wQ4ZAly6xI2sc97CB2UMPwdSpYVvpQYPCUZEdOsSOrvTlK+EvAXq6+5pMYk+7+wHb\n+JnfAb9096dr+X0lfEmU116D++8PybJ165D4Bw0q/Lnnn30Gc+aE6agzZoT21aBB4dGpU+zokiVf\nCf8Dd9+ttuc1jP8WkAYOcvdPahmjhC+JtLUV8tBDoRXSuXPo/6dScOih8Y/m27IFKipg5szQg3/u\nubCJWe/e4XHwwcnag76Q5Czhm9ksQv/9y28BDlwO/KZawl/n7rvX8jo7E5L9eHf/fR3X83Hjxn35\nPJVKkUqltvXfIVJSvvgCnnoqJNd0OhzE3aNHSP6pVDin9RvfaLrru8Pq1WGvoPnzw43WF14IrZpe\nvUKCP+EEbV4WSzqdJp1Of/n8yiuvzEuFXwGkqrR05rj7gTWMaw5MB/7o7jdv4zVV4YtUs3Zt2Lph\nzpzwBvD3v4feeFlZ2G+mrCw82reHXXYJj5Yta6+4KyvDTeOPPoK33gr7y1d9vP56qOi7dv3qceSR\nIeFL4cnnTdsP3H1CbTdtM+MmA++7+8X1eE0lfJFt+Oc/wzm7y5Z99Vi6NHwS2LAhPDZv/ir5b799\n6Ll/+ml4uMNOO4Wzezt0CHvLV3107Bi2NVCLpjjkK+HvBvwWaA+sIEzL/MjM9iZMvzzVzLoDfwEW\nElpBDox19ydreU0lfJEc2Ljxq+S/cWNI8DvuGH7V9MjSopW2IiIJoZW2IiLyL5TwRUQSQglfRCQh\nlPBFRBJCCV9EJCGU8EVEEkIJX0QkIZTwRUQSQglfRCQhlPBFRBJCCV9EJCGU8EVEEkIJX0QkIZTw\nRUQSQglfRCQhlPBFRBJCCV9EJCGU8EVEEkIJX0QkIZTwRUQSQglfRCQhlPBFRBIiq4RvZq3NbKaZ\nLTWzp8ysVR1jm5nZi2Y2LZtriohI42Rb4Y8B/uTu+wOzgcvqGHshsDjL6xW0dDodO4SsKP64FH9c\nxR5/fWSb8PsB92W+vg/oX9MgM2sH9AXuyvJ6Ba3Y/8Io/rgUf1zFHn99ZJvw93T3NQDu/g9gz1rG\n3QhcCniW1xMRkUZqvq0BZjYLaFP1W4TEfXkNw7+W0M3sFGCNu79sZqnMz4uISJ6Ze+OLbjOrAFLu\nvsbM9gLmuPuB1cZcC5wNbAJ2AHYBHnf3YbW8pj4FiIg0kLtvs5jONuFPAD5w9wlmNhpo7e5j6hjf\nE/iJu5/W6IuKiEijZNvDnwCcaGZLgROA6wDMbG8zm55tcCIikjtZVfgiIlI8CmalrZn1NrMlZrYs\n0x4qGmZ2t5mtMbNXY8fSGGbWzsxmm9kiM1toZhfEjqkhzGx7M5tnZi9l4h8XO6aGKuaFiWb2lpm9\nkvn/Pz92PA1lZq3M7BEzq8j8Gzg6dkz1ZWZlmf/vL2Z+XV/Xv9+CqPDNrBmwjNAWegdYAAx09yVR\nA6snM+sBfAJMdveDY8fTUJkb7ntlZlLtDPwN6Fcs//8BzGxHd//MzLYD5gIXuHvRJB8z+zFwBLBr\nsd3jMrM3gCPc/cPYsTSGmf0G+LO732tmzYEd3f3jyGE1WCaPrgKOdveVNY0plAq/K7Dc3Ve4eyUw\nhbCoqyi4+7NAUf5lh7CGwt1fznz9CVABtI0bVcO4+2eZL7cnTDeOX8nUUwksTDQKJ5c0iJntChzr\n7vcCuPumYkz2Gb2Av9eW7KFw/pDaAlWDXEWRJZxSYWbfAg4F5sWNpGEyLZGXgH8As9x9QeyYGqDY\nFyY6MMvMFpjZ92MH00D7Au+b2b2ZtsgdZrZD7KAaaQDwcF0DCiXhSwHItHMeBS7MVPpFw923uPth\nQDvgaDPrFDum+qi6MJFQKRfjwsTu7n444VPKjzItzmLRHDgc+FXmv+Ezwh5hRcXMvgGcBjxS17hC\nSfirgX2qPG+X+Z7kSaZ3+Shwv7v/PnY8jZX5OD4H6B07lnrqDpyW6YM/DBxnZpMjx9Qg7v5u5tf3\ngCcILdpisQpY6e4vZJ4/SngDKDZ9gL9l/gxqVSgJfwGwn5l1MLMWwECg2GYrFGt1ttU9wGJ3vzl2\nIA1lZnts3Zo783H8RKAobji7+1h338fdOxL+3s+ubRV6ITKzHTOfDDGznYCTgNfiRlV/mb3AVppZ\nWeZbJ1Ccu/oOYhvtHKjHXjr54O6bzWwUMJPwJnS3u1dEDqvezOwhIAXsbmZvA+O23gQqBmbWHRgC\nLMz0wR0Y6+5Pxo2s3vYG7svMUmgGTHX3GZFjSoo2wBOZLVGaAw+6+8zIMTXUBcCDmbbIG8DwyPE0\niJntSLhhe942xxbCtEwREWl6hdLSERGRJqaELyKSEEr4IiIJoYQvIpIQSvgiIgmhhC8ikhBK+CIi\nCaGELyKSEP8fQItVpc+SvV4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, f(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By inspection, we can see the minimum lies between 4 and 5." ] }, { "cell_type": "code", "execution_count": 187, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " fun: -0.21723362821071318\n", " hess_inv: array([[ 4.61057157]])\n", " jac: array([ -4.67523932e-07])\n", " message: 'Optimization terminated successfully.'\n", " nfev: 12\n", " nit: 3\n", " njev: 4\n", " status: 0\n", " success: True\n", " x: array([ 4.49340729])" ] }, "execution_count": 187, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scipy.optimize.minimize(f, 4.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Statistical analysis\n", "## Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple polynomial regression" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = numpy.linspace(1, 4, 20)" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "collapsed": false }, "outputs": [], "source": [ "y = f(x)" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y, '.')" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "collapsed": false }, "outputs": [], "source": [ "quadratic = numpy.polyfit(x, y, 2)" ] }, { "cell_type": "code", "execution_count": 225, "metadata": { "collapsed": true }, "outputs": [], "source": [ "smoothx = numpy.linspace(1, 4, 1000)" ] }, { "cell_type": "code", "execution_count": 226, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 226, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, y, '.')\n", "plt.plot(smoothx, numpy.polyval(quadratic, smoothx))" ] } ], "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.2" } }, "nbformat": 4, "nbformat_minor": 0 }