{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from sympy import *\n", "x, y, z, t = symbols('x y z t')\n", "k, m, n = symbols('k m n', integer=True)\n", "init_printing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculus is the study of the properties of functions. The operations of\n", "calculus are used to describe the limit behaviour of functions, calculate\n", "their rates of change, and calculate the areas under their graphs. In\n", "this section we'll learn about the `SymPy` functions for calculating\n", "limits, derivatives, integrals, and summations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Infinity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The infinity symbol is denoted `oo` (two lowercase `o`s) in `SymPy`. Infinity\n", "is not a number but a process: the process of counting forever. Thus,\n", "$\\infty + 1 = \\infty$, $\\infty$ is greater than any finite number, and $1/\\infty$ is an\n", "infinitely small number. `Sympy` knows how to correctly treat infinity\n", "in expressions:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAKCAYAAABWiWWfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVQoFX2S0U3DMBRFHSaIygZhg3aFskEKG8AGVP1K/qqyQdiAlg3aEUhHKBNUYoNwjpNIFKs86eb6Xb9c+9nOuq4LRl3XU2gO7kBL/gYngZ4jPoAZaMEW7RsOmWYkT4wXYA9ugbmxYO7QD+OCJeMVWIJPUIBH8E7dMVRVVYBG0xHkOWhBB+bqcAl2Y81vRt+YZw5wdaWLQLOdLyC76xWarSWB7hFNbvick1kECjwHTYwdSBaMM3yoPUKFZleDIs/rdSh4vlrYT+T/mg0/e8OalpiPFzNM9YTuRZw0O5HYcxLotreG72FbaRhr/jfc9WF8Gg3JksL4XmAPXaM949jmoPmu3IU/b8EEeJbxXUYzkkDxBrJQI03dkbu5CLQXBN+W3Thv3QccfgDHpJb9GsghWgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\infty$" ], "text/plain": [ "∞" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "oo+1" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACoAAAAOCAYAAABZ/o57AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABzklEQVRIDb2W7U0CQRCGD0IBaAnSAUgFYgcQO5AO9C//CHSAdqB0gCUgHXB2YOgAn+fcPQ4MmAPlTSYzOzuz8+7HDVTW63UyGAzekySpIyvkM+gmWuhLEecvg07JucU+G2qhkqR6FJ/GytgP2COkj/1U8Hexn+P4XLoKCU9qWiR5qHiImx+K+Y+5Kot6nbOSiy/CBkumHR8uUU/UN1gGS4Ld4NlQ42QWR1RzYzNyJTtEHLeRDtJD3Lzv+Ap5I05fgr5HPSJZHuOx/gjGxjvvQYgGvr6GJ1oaJFu8QaKE1GKCNJEOcz6NFrYdxJgM+Pwo9ee+75lsE+bafUbEjRXsJVrfcURNDPAkJebHqH2BzjsEY31bYH615dgMXjFfwjqZF1uyTXQ3tqdNeDnLojmZAyQOrkqep+m1Z6e3E+zTbJ9K1DW93lMhSdGCtO+4CJ/U/C+I7rvKYrHf7HgrfqD5j04xqVocnMOGSDy9vBw+r9cN3+XOgsF851SiddZT9sEfkl1itjBJxW4Rc28w/DCdz8HYn/G04p+SiBBk37L4ddAu6k+mekiMrcfF7HexqPMT/D+uDZ+FROyNL9gfmQcCzNuuMmC7KeN999YTrpt+Aco0ogQ+8LU4AAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle \\text{True}$" ], "text/plain": [ "True" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "5000 < oo" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1/oo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Limits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use limits to describe, with mathematical precision, infinitely large\n", "quantities, infinitely small quantities, and procedures with infinitely\n", "many steps.\n", "\n", "The number $e$ is defined as the limit $e \\equiv \\lim_{n\\to\\infty}\\left(1+\\frac{1}{n}\\right)^n$:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAjklEQVQYGWP8//8/Aww0NDQIANmVQPwWKqYMpMsZYYqAClyAAjOBOBTIPgdSBKSNgFQ4C5SjBKR3A3E6TAFIHAhAGneDFQEZIBNAQACoqAxIC4N5QAVA/h6YIpCONUCBLqgkCsWExLuHxEZhwhThVAA0PQRmXSdQazqydqAkKDhA4p3IQQBzMCyMGGBuBAAeMC5+ZPF7mwAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle e$" ], "text/plain": [ "ℯ" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit( (1+1/n)**n, n, oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This limit expression describes the annual growth rate of a loan with\n", "a nominal interest rate of 100% and infinitely frequent compounding.\n", "Borrow \\$1000 in such a scheme, and you'll owe $2718.28 after one year.\n", "\n", "Limits are also useful to describe the behaviour of functions. Consider\n", "the function $f(x) = \\frac{1}{x}$. The `limit` command shows us what happens\n", "to $f(x)$ near $x = 0$ and as $x$ goes to infinity:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAKCAYAAABWiWWfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVQoFX2S0U3DMBRFHSaIygZhg3aFskEKG8AGVP1K/qqyQdiAlg3aEUhHKBNUYoNwjpNIFKs86eb6Xb9c+9nOuq4LRl3XU2gO7kBL/gYngZ4jPoAZaMEW7RsOmWYkT4wXYA9ugbmxYO7QD+OCJeMVWIJPUIBH8E7dMVRVVYBG0xHkOWhBB+bqcAl2Y81vRt+YZw5wdaWLQLOdLyC76xWarSWB7hFNbvick1kECjwHTYwdSBaMM3yoPUKFZleDIs/rdSh4vlrYT+T/mg0/e8OalpiPFzNM9YTuRZw0O5HYcxLotreG72FbaRhr/jfc9WF8Gg3JksL4XmAPXaM949jmoPmu3IU/b8EEeJbxXUYzkkDxBrJQI03dkbu5CLQXBN+W3Thv3QccfgDHpJb9GsghWgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\infty$" ], "text/plain": [ "∞" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit( 1/x, x, 0, dir=\"+\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACMAAAAKCAYAAAA+euenAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABUElEQVQ4Ea2U0U0CQRCGF2MBF+wAOtAWsINDO4AOJDzdvZmzg7MDgQ7ADoQSsAITOji/DziDsiYkd5P8mdl/Z2fnZua2U1VVaEPyPL8lzgD0wZr1aywufAL/AO70AzO4HTp02kiGYCNiDcES3ADXypC91cEMATvFnoIJ+AA98Aje2NsEk2mCLMt6oDyNwToBa1CBgXvoFMxP/WobvtBuXBm+qAB+6S+Bsx2fQG3VpnC25kzgbXH3+njonYWHLhXLvzk6f8UOsb8Ddevm+NzH/OSMBUYm4/BEM/7v8KU8sVfgBf8nMAY/8xOJkVxFyLYp/zCTSP36WHB4B3nbRjJbgtnzM4G3Pc9oW2RbS2yT+yv7qjUeYKNyQYmaoG25a+fPRJbYtqnmfFesgpfPQBc4/Pt3qZVkCOZlBcqLTMSkrEg95CwPAuf8+LZYTff1W6DDN8431/M76jgHAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle -\\infty$" ], "text/plain": [ "-∞" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit( 1/x, x, 0, dir=\"-\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit( 1/x, x, oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As $x$ becomes larger and larger, the fraction $\\frac{1}{x}$ becomes smaller\n", "and smaller. In the limit where $x$ goes to infinity, $\\frac{1}{x}$ approaches\n", "zero: $\\lim_{x\\to\\infty}\\frac{1}{x} = 0$. On the other hand, when $x$ takes on smaller\n", "and smaller positive values, the expression $\\frac{1}{x}$ becomes infinite:\n", "$\\lim_{x\\to0^+}\\frac{1}{x} = \\infty$. When $x$ approaches 0 from the left, we have\n", "$\\lim_{x\\to0^-}\\frac{1}{x}=-\\infty$. If these calculations are not clear to you, study\n", "the graph of $f(x) = \\frac{1}{x}$.\n", "\n", "Here are some other examples of limits:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAXUlEQVQYGWP8//8/Aww0NDQYAdmrgdgYyP4AEmcBMgSA9GwgfgfEJkCsBMRwAFIAUhkKEgGyy4AUyBQ4YIKzcDBGFUAChmA4MIIiCxjEoAgCxQkoLkD0PSA+B8SnAeDgGGsGGU5UAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle 1$" ], "text/plain": [ "1" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(sin(x)/x, x, 0)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(sin(x)**2/x, x, 0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAKCAYAAABWiWWfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVQoFX2S0U3DMBRFHSaIygZhg3aFskEKG8AGVP1K/qqyQdiAlg3aEUhHKBNUYoNwjpNIFKs86eb6Xb9c+9nOuq4LRl3XU2gO7kBL/gYngZ4jPoAZaMEW7RsOmWYkT4wXYA9ugbmxYO7QD+OCJeMVWIJPUIBH8E7dMVRVVYBG0xHkOWhBB+bqcAl2Y81vRt+YZw5wdaWLQLOdLyC76xWarSWB7hFNbvick1kECjwHTYwdSBaMM3yoPUKFZleDIs/rdSh4vlrYT+T/mg0/e8OalpiPFzNM9YTuRZw0O5HYcxLotreG72FbaRhr/jfc9WF8Gg3JksL4XmAPXaM949jmoPmu3IU/b8EEeJbxXUYzkkDxBrJQI03dkbu5CLQXBN+W3Thv3QccfgDHpJb9GsghWgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\infty$" ], "text/plain": [ "∞" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(exp(x)/x**100,x,oo) # which is bigger e^x or x^100 ?\n", " # exp f >> all poly f for big x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Limits are used to define the derivative and the integral operations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Derivatives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The derivative function, denoted $f'(x)$, $\\frac{d}{dx}f(x)$, $\\frac{df}{dx}$, or $\\frac{dy}{dx}$, \n", "describes the *rate of change* of the function $f(x)$.\n", "The `SymPy` function `diff` computes the derivative of any expression:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB4AAAATCAYAAACHrr18AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB8ElEQVRIDb2V7U0CQRCGD2MBaAnYAWoH2oHECoAOJPyCfwY7UCvQ0AF0gNgBloDXwfk+6+zehBA4LzknGebjZufdnZldWkVRZE3RdDptK/fY8ndM9uXPT5sCtbwzgQwjhvRn6WvxxUl0NiQHArtxuWfSO/J1mwbmtB8OuFTp8X/xZDKZiTfgpR7r+DQ/9oOhwKZHy3Kb9TXKq9V34kuytECXE6DdQRjIxzD09H0uWZu0nkPEXDmJ4okBYRAWDuTdgrkOtYENlEPdKk8mycnzOFyfGMYSISDsLBg1fwyUkz4CaKC0cxtOLAd9PPP55aMfEAvrEneWNiITKfcw9Dh5TNEH7h6AlOjFf5dNIloDXYv7Ynp4L4ZWijnamtjjsEILqD+gJKT8++5gGkLFPyjmVQzYSBw2K/vPwIDBmZJQ6rVkmmrpnJTXxxNxI3OcS+5+97Glfujx0GX/FhfiNnGSXR8veyFee19VPUy1ThInrtzRrxZLTfkzxYVquCD8b86urJ4oWZw6yopeiRQbNqPg1E/WV80BcK7F8Nx0D3xlxtKS8sBEwPC8yv5yC8Z7crjPpRofEIZjUbrTcFGBoSUDEN7Kxr8Vs+FA8vFtZeZRke6xLey5FdxNrk74kzAwJnZDjOwnMRPNU8gDwYZS2WUfpB+0tmqAQhvLkgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 3 x^{2}$" ], "text/plain": [ " 2\n", "3⋅x " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(x**3, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The differentiation operation knows about the product rule $[f(x)g(x)]^\\prime=f^\\prime(x)g(x)+f(x)g^\\prime(x)$, \n", "the chain rule $f(g(x))' = f'(g(x))g'(x)$, \n", "and the quotient rule $\\left[\\frac{f(x)}{g(x)}\\right]^\\prime = \\frac{f'(x)g(x) - f(x)g'(x)}{g(x)^2}$:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle x^{2} \\cos{\\left(x \\right)} + 2 x \\sin{\\left(x \\right)}$" ], "text/plain": [ " 2 \n", "x ⋅cos(x) + 2⋅x⋅sin(x)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff( x**2*sin(x), x )" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF4AAAAaCAYAAAA+G+sUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE/UlEQVRoBe2Z+1VVOxCHDywLQOwAO/BRgdoBaAVgB/cu/oL/XNgBWoGPDrQDlQ6wg4unA+73hT0xO/txHhxYV86dtUKSyWSS+c1kkn3YuLy8nPxPiyNwfHy8xazDZuZOU+/Dn86lTeDXtRwdHe1Sni9jP/NOy3n2Keclzza8k5pnf3Mu79xBISJzF7NeUH9d0rwD5j4v5p7Q3oH3qODZ/ADvS8VbT+ABIqUJ6tc1IAv0nft9ljxrnCHzifqvUnZdI/4TIJyWQCzaBsh3lDKf64ifDdAtdcrCeE2twxPd8y8ML4e/E2cyeUJ9YR++3rpT1Nj6hPrFqgxDl+nF1PV4RKeOfk/ZU2az2cgJtR6xOFnAf9Auc5jyd4EMMCNwJQRGBq35/THt8gTU+l1zF5kU9aYaJ+2XUgy6OZV4JO8aHWBQ57JbxsgAndpLekp51PA66hyHaUC/dFDgjepfDCRPyGzI235rSFEI/Uk1tsSLY+alOMuuBhfTxxv1NrrN86bpIXLdlGrM8QLsRD3SR7VD+mT+FJ5B5gU4ZOsidvxAWGysM6F77KV0jmCK+HsIJg/kmb8bKToYzxcsbRfyqEpPKaYoc9wrivQNmc9Xze7fZr6prTS8NaeQcZPSQ4rPsfzepu3eBFE97kl6BX/sclPGPZdry8vUrD2XfcjezxPnb4ilWWTLiO8QAxomoPHSCZl0CdtBxnept7TA+QLy2AlqL/CMq8/o8LM6yVALnqCmZxi163qvmDN/Uiei/cUxyluKQLuP1quE/likNZqSk8ZSwdL2xQIz6lh7xxzfRxrvO/VtDNI2EgS2JJ9QAfQ27Xq8lFWnAIe8YxGtEYXKfEYmg64QZAAIio7xuetzMObSTVTqDV5du8dYqzWGvuva19I30Im1tzsRzwaM3K/UdQR9h1cCYsSdBY96KGVNGBMkQcuOpC1fsBJgtB33VHyjtIgx15FnOvF0GTk+CEw/vlB0Vn06YXfIfUTU1YNL21crGunntVsRz+ZTfqOuQZ/AO6sUmiY+VLyhroBK/1xVvX9DJqKiT0jnSOZynWgEe8rO2Z8BM4vU7ZwOXdO+jr4BRqx9kYFnYdPGQ+oMOm1/9AlAsi54gi7l4w0vXRpX7M7fOClelEMUMkblEJmq0n6ojXwd4CXnng/oh2OG5s/FR8+i9s2lF6GwbZqAbzb8lLo+rjrjAr6gesHFhpJz6AdYLnxIvzdaG74nxvzcIcb9onPc+a1LU2HGYl2jWnDj5eHYlOJXoUHQqx9+kPsN44OnjmvZlxXNbvyOeBY1grzUXPy0KPL8CUEwNNySnGBNySAj41gnN8MryTvAE5RBc5C+qSLS2DPaL+HVkauML5qQ08k1gPbzk5N2H7nHPueswr6+9WqeWBso0w1+qPeJVxsaE7zU/A1Co1IudYC+IHgajE7n65Ccduj3EjLq8QlaOk5n55ND28158qYUyb4yCVRqQXJd3/nqkx5QPJGjwDdzvYzv0w79E9rqubZ96Bgl1vHEblPvbfjfkHUijP6FvXvUo066CUxY0yA1iN5t3sQC/3GdH9lf5x656T0DtqfKzOL6a/kfKI97654RiFsgf6PxeyOluLWLeAz3gvYD0TvqNsl7K78a1w74Bul96sPbQh0ne8Jaj4i1u1wD7Cbi/TEufzDG2Cpr9MerrHWvrGvETwDE52/5UbhKvEtdOrbzO9a/2LErwgkafSwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 2 x \\cos{\\left(x^{2} \\right)}$" ], "text/plain": [ " ⎛ 2⎞\n", "2⋅x⋅cos⎝x ⎠" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff( sin(x**2), x )" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle - \\frac{x^{2} \\cos{\\left(x \\right)}}{\\sin^{2}{\\left(x \\right)}} + \\frac{2 x}{\\sin{\\left(x \\right)}}$" ], "text/plain": [ " 2 \n", " x ⋅cos(x) 2⋅x \n", "- ───────── + ──────\n", " 2 sin(x)\n", " sin (x) " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff( x**2/sin(x), x )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The second derivative of a function `f` is `diff(f,x,2)`:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABUAAAAOCAYAAADABlfOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABi0lEQVQ4Ea2TMVICQRBFFzQwVG+g3gA1J9AbiJ5A8QZKhpG1ZqZ4AsTQTAISI4TQDFMjKW6A703tUFNbFrWBXfW3u/9098x0z9aWy2WWSrfbzVMfuw83LXFr3c24SuI+9htoYw/l0QOUONCvKvUk0ORhLFjw2+ivJKaSWfP6FDoj2qI72ItKmWuC4kk7xCz+o6B7xZ42sKcUVV+AH2AfB3Chv9hB8G3JVeEeoy+B8zBPGW/wMegWfAuS8maz+Q5eR6PRBMywP1kLgv9ITMcY7D3Ia7AFd4ffwm7H65vQYKGnkcgz9hO8G2doT1h+cs7jxXVkF+R1AuNg/pryhCALHgHlg/g07hTOtgUO3QK9eFLJWNzkstizjITyT3AC3S8Hx0FZNCSWAwo/PV2g2MCCSry6m4Y2xaL2yb+pLIcQPjV/ChN8y7k+ug0y7HTDDv5NuH4RZOJqCNgWOQc+GcWTiXmxNsdetQzOtTHIwh+lobBg0XAFtJO8hwt9RMu7PgPGPgAn77AcqJuFVvwCfN+cOndwBtoAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 6 x$" ], "text/plain": [ "6⋅x" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(x**3, x, 2) # same as diff(diff(x**3, x), x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The exponential function $f(x)=e^x$ is special because it is equal to its derivative:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAD0xERiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABHUlEQVQ4EZ2U4Q0BQRCFjyhA6OB0cFECHRAViA6IX3f/hA5ECzqgBiXoQOjgfO/MXM6Pyy4veTezezPPzuy4TlmWyS8oimJt8SPsHq5gX36XRzRM6Iw9kDSAR/wNdgyzHo9f8CL5bgk6zcX8Jfu3RGX+wzzPS5g1c/8VyiTmQvip/OieUUYKn1bWAnszX0aXkHSkGAOE1KMTVJ/Utyl8wCHc8f71JWYJWwvCJLr+jQK1CKG+TRImBB/hHL8qAZuxlriuP4hKjKSUSB1/5UKWqR/w67etduMn04mEPmKacPVBuLC+ftzw08V0Ap/scFZLRHM0fLJbQsPbLtYqRJmzsMwnwsv0f3+dh0j1JWBD76JQz1mj8RrECuzp6xCNN31LwOJ2GELsAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle e^{x}$" ], "text/plain": [ " x\n", "ℯ " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff( exp(x), x ) # same as diff( E**x, x )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A differential equation is an equation that relates some unknown function $f(x)$ to its derivative. \n", "An example of a differential equation is $f'(x)=f(x)$.\n", "What is the function $f(x)$ which is equal to its derivative?\n", "You can either try to guess what $f(x)$ is or use the `dsolve` function:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAVCAYAAACnvtv5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFBklEQVRoBd2Z63HUMBCALxkK4FEBoYMAFQAdBKgA6AAmv5J/GeggUEEIHQAVAOkgdEBIB+H7dJZGZ1t+XkhgZ/YkS6vVap+yb+Pi4mIxF/b397fAn1P4zFk7Zb9/aQ26eV3Je4/2LfgKvGl/k59ZUDHfnsFEo0cBZ7D5v5ZWOvlE+46T3QYP6b+hfQBu3+CnCBAeMnleERzwHPthiOcdOndoZT4JWPsF3JYX+GkSk0tehFx6+UvwCZjr4DNz78Etxl/Rqth1wTn8YhZz/88V4xeMn2yUUiWThqYCHYBfQRckxdKX2Vfa+7SzAT4/YPKINlfMbL5zGSCP2WAXVA8aKclHX8d9CNq+5fk97doBvtaz+7QnkXlXqtTDjkDD9Dv4BcxBwxqR6wJ5yfNaAEq6Cerl1pW79N+ByWgKybOOrAPr4HX9MDQf2COUIdpgNFr3WrQajsnHzCmQaUx8Aq4IzdwzxtbmYRUvebrvdQCzjPVET6+fPZfvmIc8reVzk/rsZ93/XS1+Tpsijb6OtCjVOHP5z5LAjGvYmH/lsy6Q5zNwbQ4xRTDOZ+Tr6U9LOsj4ntH/mD2voytPA8asF2obfVP2HdCUvWq4ilCjaZgznvUm22Bl+hGe0immBuiNGjcVrAEvQENc7xG+QZPq5XIo/MrT/a/McMilnCpJx22TkakV0NlGl4xKR9bOXxU3r/xvGDd6jXB1HKGh65WIY4EKswBbDL1Flm6LppAuYS3Uwdi0KuEDqLEULNayNqWcQqfT9ELFZxBtxuyEdblCsqnUjU7adb5EDD+VnKeyNFfqsEa55W9Eh7W0RvguOOhmumI4Fi1gEIof3YaVna/AiDKcG8B6I61+yfDWFQXyslOfj3zkKe9eYJ+o4F7akQTKKnSdf0nR8otcym+69/WgceNmTP2GSw/93OAaM6RF2l5oGI4VK7eYAgeVr6e1wXcEyuufqU9PD2O0XR4vTXScNt5/Y8yzCfkZliMtv5zH22fQBa260wBCyQFjJLsu1i3pfScc7CxthrMmDRLa3erA5rkXOe1BYrTVyevPXQ5Rp72s5xD1nKPkmGlfaIxOdRXOXJ1dJ41Rm2izjvqIX0Sy4XHdNsPpNXXl17kqbMmjEi0HUEgh1TPGwjraNsU4p+J6gfV6buTfS18RDKlxev1L+A/5/voQunS2oUJANzkw4h5thnvA5EEkKLQqt5HSOISK9ybq5UQFxAtKLuguc6UINOJyWh7bAR6XVeOsv9Zpo6Z0OVuwv3R9eoKkAcXzwXPwZ7/NnC0LNYbK78u1RqQptQ5GgHgGrxg955GIMee+xeeW1mI+uEC3rJ89hIwq1jqs88VXmsSXMZUbjEabzpYI+juuVQ8J4GO9M4P0Zbq05kbqLTumyQVM+hio3FhklyuXvxrcV4ogGHy8WVl0pfVbpAbtSi2u82BXCsoI3kIIjedZo4HMNMeMlTJGr9ys9XVLQ3nO+A634HlcBvEjc8S9vb1D8Dg+d7XQnYLbXTRj5uC1Jc8xa64rLefYueyzbGJpQ9+6JFjfjkKv/0ePGecl3Tz14iuPtm4Rr8/shp6BODGvj/qbBoObRkyHxYI75Kist7b6R6HvfP8sVOfQmU35lh3LxinjxUsO85PAGqeXe5Gw7Xo5ZroB0hutcxVuDRy7d0OYqx7AQDrw5Po3Rv7iH6lDmVRe9ph20odh1nlz80v4rKgdKu//QvcHXUgQ7BW55B8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle f{\\left(x \\right)} = C_{1} e^{x}$" ], "text/plain": [ " x\n", "f(x) = C₁⋅ℯ " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = symbols('x')\n", "f = symbols('f', cls=Function) # can now use f(x)\n", "dsolve( f(x) - diff(f(x),x), f(x) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll discuss `dsolve` again in the section on mechanics." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tangent lines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The *tangent line* to the function $f(x)$ at $x=x_0$ is \n", "the line that passes through the point $(x_0, f(x_0))$ and has \n", "the same slope as the function at that point.\n", "The tangent line to the function $f(x)$ at the point $x=x_0$ is described by the equation\n", "\n", "$$\n", " T_1(x) = f(x_0) \\ + \\ f'(x_0)(x-x_0).\n", "$$\n", "\n", "What is the equation of the tangent line to $f(x)=\\frac{1}{2}x^2$ at $x_0=1$?" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABYAAAAuCAYAAAAsnen7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACdElEQVRIDe2XPVIjMRCF7cUHYAkJhxuYJXcAN4DiBLDhZlCO7NTcADgBZW4AgXN+bmBCQnZvYL43pe6SxXhmZKKtclep9NRSP/W0Wj/TXSwWnVwZj8fb2AyDXRHqM/T/jKtnILOeQPLbbMDX4BfKnul+GMiszyE7jGwm4AJd33TrEsvbZyOprBXj75bRaDShzGOedT12J8PnH6PYdyXgW8SQFnAovvtgz4hygtj9HMynF5Sp2YD70lm7K5ArwVOl2GVkqwW9NM89j1Eo6c/DwAPqM4o+9TTonhhzH7ByVuNVu9Dvue3E9HrSM+CC9i1FZPJC3imWJTHtn+BaKRePgfJUhrFopc3DHXDaH4/9ihVjBd6CHtoP6F5iXS42j1+TKbVd7xJdVrMkji0Ii50BFoYOum2VeFwT7gWDKQO1eI/U5cqC3yLjIe04taKuaiiP5aHKR5jkA+y7CJ36nihZsjUYDN6x0KorhbQ1h7PZbE75Q9lFt0DnYaHdStbaeW2YvyxeG6M2YzbEHqVNKDwUXU6x/CvEzVeDzQbx2Px/6dZz31cAjsyCLjvkf4F1XuvmTq+zJYbarAikullOzAqs21rPgyOwbpxKaYqxSPRwcYFM3uuG0XW2UpqIdS39hSy9SOWpLliFqVKaiEXwBoHfgQlLOqF318bYRyWAieao9GvQTbq82eSxDzQAmf4zFALLFOtaqrOJsdai3TDB1RJT0sgKBWR6dXao/bma8HmztceQlW/nNqRib0UMmZ60ezEpWIunWFdKIzHGWqwD6nSxNJm2d6XUxjh49IBlunX1JOvT77+4KXvTIaQM0Ofav0lsX3sIfQJSXHlugXiYMAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\frac{x^{2}}{2}$" ], "text/plain": [ " 2\n", "x \n", "──\n", "2 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = S('1/2')*x**2\n", "f" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAxklEQVQYGV2QsQ3CMBBFD8gAQEnJCCD6FIyAxARASRmlSlqzAhMg2ACK9BFsACVlxAbm/ciWopz09O++ndN3Bt57U5VlOUb27WC2Qncwh23w6mFoJI4PToK+hjOsmTNUi1x7GUMbHXRrw3ALxhR1phhFUSykEeY7POMcNW5+dVfSr+HS8yzpG0TSRVWMYHjKbElorvR64AM9gC58pKFy5kwxtEk0GNrQwA/awtOZ/o6N0jT9onrtBJYc5lVVveEIMzyP10b6A5YUWgllggWIAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle x$" ], "text/plain": [ "x" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = diff(f,x)\n", "df" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADMAAAArCAYAAADVJLDcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACcklEQVRoBe2ZTU4bQRBG7eADEJYszQ1I2HsBNwBxAsgyuyB23pIbkBwBbgBI3oO4ASxZEm7gvNfqbg22pbEsZLqlKalU/eNmvq+rurpm6E+n015NMh6Pd8F7hX6j/dbEPmh2Sm0DehNsf9FX9Ds6ROekFjJ64Ej0EPuF0Ttz8mVupOKBjkypzus803lmDTvQhdkaNnmlR3SeWWnb1rCoX0uhSRljcWmNZm2mfUYf0XvmfmN71ZARbJt0Z6Zthz5rvvPMZ+1823PzyxkZwQxxGhfsYU/QIXocx8wa17FdpGmG2YUpLqa5e9D6mrpP/wwr0Qu0aAlkAKxHZsEeMpY8sbVgvjhiKcweIOQllOSAxmMaw4b37zQ5a5nXc3eodlk5Yp2X3ofJwkuTh/j96QwbbtYPe9oKfyhiWWpl8kz+MYv3YyeFWI+xsOPYt/zDNTV4Zn/ZRw0iUOseE8At9oeLaTfD7py+iaBoMQHoCfUVwHrAD23ZA4w5Z3YrXjZGo9ELKM1WX1E/eZ5PJpMn9Ce6zdiUsRxy9IuVhQmgWLQtwAYt88VMEx1DwKRz6zuNx8GMm9N7FZ6JRExQ+b6j7SXvd+cD2iauXqgAbBQuArdWzAIBvWSiMhMHqYWMGfUfBMy2TdEjm4wbgtV4RtDPgM5XhuAbEkhWcWYaoN81IffEwBAbqoRawuwdCTsQ8B9OhlfKcNWEmfhnxYP/B1K5GK4yzCBwKTNsqCMTy+rCDALh1X6WiISqIgMB3353mkRomwA8O/WQAbAHfg+bD7wEEAla2tTxeTbu/A14Q9ki8ChW+7vM79ivpdA0cxlK6VOY2JPkQvM/oWTBxMnpnuAAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle x - \\frac{1}{2}$" ], "text/plain": [ "x - 1/2" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T_1 = f.subs({x:1}) + df.subs({x:1})*(x - 1)\n", "T_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The tangent line $T_1(x)$ has the same value and slope as the function $f(x)$ at $x=1$:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T_1.subs({x:1}) == f.subs({x:1})" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(T_1,x).subs({x:1}) == diff(f,x).subs({x:1})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Optimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Optimization is about choosing an input for a function $f(x)$ that results in the best value for $f(x)$.\n", "The best value usually means the *maximum* value \n", "(if the function represents something desirable like profits) \n", "or the *minimum* value \n", "(if the function represents something undesirable like costs).\n", "\n", "The derivative $f'(x)$ encodes the information about the *slope* of $f(x)$.\n", "Positive slope $f'(x)>0$ means $f(x)$ is increasing,\n", "negative slope $f'(x)<0$ means $f(x)$ is decreasing, \n", "and zero slope $f'(x)=0$ means the graph of the function is horizontal.\n", "The *critical points* of a function $f(x)$ are the solutions to the equation $f'(x)=0$.\n", "Each critical point is a candidate to be either a maximum or a minimum of the function.\n", "\n", "The second derivative $f^{\\prime\\prime}(x)$ encodes the information about the *curvature* of $f(x)$.\n", "Positive curvature means the function looks like $x^2$,\n", "negative curvature means the function looks like $-x^2$.\n", "\n", "Let's find the critical points of the function $f(x)=x^3-2x^2+x$ \n", "and use the information from its second derivative \n", "to find the maximum of the function \n", "on the interval $x \\in [0,1]$." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHIAAAAVCAYAAACaLLqfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADgklEQVRoBe2Z61EbMRCADUMBkBJIBzw6IB3AUAHQQRj+8S9DOkhSQQIdQCrg0UEogbgD8n2KdNEdjo19utg38c4sK63uVvvSas+sPD8/D7qC8/PzdWSfRfmbkR7BH3a15/8qd61jwy8I2knag/Enxvfg28Rb0jIeWC0j5q9SjgneXrZ6wXgT3lbGWw4LeKDrQHoa7wrouRQxwQMrXd6Rzb05iZ7IfeiytDad03Je3ZE412Yk3Wc2Kc69425a7hFeR47ldB/cLiGvhIyo0wk02V1CbOcyot6XbLTNODSOIZBMDNxpbhDjY3jX0APwqo12vB+SIt+4jbyC7+qMh4LyOhOFD43RF/AJ3AH1aQXpRBo0GxMDl4L2DZ5dpp8PicdwOkhBhL7zTagncwh9nE5S2afZ/31ZiZOlsaeNn83e58lP15/gHU/egVzG6l5rGFddAMxKHxQDxBfTdCaKDLPGZPjAeEtkbBkzq+YGUY+avf9ImXX2EYtDKq3egxu5dIz1PhMMxKzgN6OKSytA9rzvpEN0qF0llXI9HaTSWlMfIy0Bdpg2ArUywNzAWIqFXfAI9OQdgsItz4RSDK0lx+/l+f5FJ8vS2OScxsb5WvNn91RaAwcDLH8a6omx3N6FhfofO9mPIuxb0At4j/kp1CCbAAsJ6GjCveZ+7p2NzUA+xCB5qX4F75mnEjtg7ElsBsr11Ay9GbEOa2HgRYVpatZXG0eWVo3DoCtwyPASuhHHd9C827QTNfiBBw1dle+3AeR4sr+D0teCn0lWkZHAmkk4tqTGF1vbyF7u4/XUBBN9wPqoHkE/zuy/EEgEhFYW2nSEpVWFRAPbXJdvSS0K7GMCFfvhAHmW1HVonoQjdS5hIzJGBWoA3+rl54fXUlFYQ6hZH7pKxunkTdyEZw2ikMrqIMqSGohFAgO5i17+AJCDCaxj5T9Ca0nJvDc2Gkgvfx1/E2lu6E6cuGbANTj9bBeyDn6e5WfMa87Ihc1rjE5+Xr34qRH+T/nQUNKgvbUxNTs6/zp3NEZZBjTMBsFAm53iUzT4ibH8APBcs4vtE2ifmKC3Nlb//YiByC9by1E6fYMYPDvWH1rN3E8Qg23DY2k2wFWZZb6wgJ42I1ab0BtAPa0mst/MndkY/TXzHcn7VkQTT92lVkP7ltsqkEyW0LEH2gZynHqptI57ZrlWzgNDRInF4ReV4YXxyNt2XgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 3 x^{2} - 4 x + 1$" ], "text/plain": [ " 2 \n", "3⋅x - 4⋅x + 1" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = Symbol('x')\n", "f = x**3-2*x**2+x\n", "diff(f, x)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADUAAAAzCAYAAAA3v0BtAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACn0lEQVRoBe2a7VHbQBCG7QwFOC2YDiB0QDqIKQE6gMkv+y90AOkgpgPogI8OSAcBOkieV6PzHIeE9jTodPJoZ9b3oTvpfXdXqzvJ0+VyOZtUyGq1eq3ozqoLjJXYv4DyAX0J9Dwr9PVg1gFu8VhP8dQTlRNY39bPHcYROByDdLETC5eJe8yRhfapZxmiJlKAV+z+Qp/Rb+gczVaspOSRhVhA8JRC3spWlCi2TkZSQ3Hp6KnRUz1aYAy/Ho0fdenRU1Hm6nGwaZkkfCyPtIjVGlBrP8kDfY+Ud5QXRU8mPzGkirVfH7gxWtTOwEwqNRmItN4Z5Eyq9c5gzH6pQ7Dt9UZPtbVc6nlb6anG7Edq/We1NGOn1rFdjrOQygJojBG2Mvw6JVWuCmKM/CljOyNVEnqh1Lv6pNIlKS1z/qCzth5j3hq94Rw/S6toZ6A+vVCtlcZE4WZyojn1k7Ktxaba5/TXfljg2C76o5wTXTC31c7ARIqTi8QZpSM1oa4vDDeUC/T6A8QHDcc/mNrukDX8ROAYcL7Vf5eXdKHxDgHjZYy/7w503GElpR2u7hFpIQDe1F1fRXnEuOS7Ymv46b756oP2vHbp9/t1xlz57VR1q6fe4AHsIR36hKovkL0AfwMoaJg85eZAQO8KROgAVUjeo9lJLCkRkU4gqKSh50ZT9tPwpNIq/IQQMkrjShZ6GM7Ul4uYSAF6T1oB2oWfQjIbaSRVekHrN4VaVh6ps6KFlEJMeg0plb64t7W1SyV/cKq6NVGchYAgqEQhzymth2TD4UnbJlKAvkIPUf9BOwfpd/qy8pKsZyKlgSX47AgIWyiN91Q4YQjtkdQQvCSM7p6ac88ok22EdlYZbQPMq4SYOVRwcOGnrOb/kXGof2IscP8HT6bJfcgFHFsAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\left[ \\frac{1}{3}, \\ 1\\right]$" ], "text/plain": [ "[1/3, 1]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sols = solve( diff(f,x), x)\n", "sols" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAOCAYAAADaOrdAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA/ElEQVQ4EbWU0Q2CMBRFqXEA4giwAeoGuoGMoG6gn/CLG+gKjiCuwAY6AroBnksgaRC/Wm/S3PJqzoW+VtM0TeCqPM8jGMeOs8BrPVOvVDOuIV1AgacCSswL7MBYMy8nKjpKwK3NAKyvejOuqvsIWcF5AQ4FtFQyD6lHPkIEewLTm48pdO7JGFU1Qh9YhBsfX/KVAzhRAKM9cX8JAa6GXwg74YHJskwNuzOGjdP6L6UA2jsw/AH1s2r4vl/z2hPAO8BzO0BB0z7N1QFvYMR2AHP1xcs9CYCp0Uu8/2sRW1Jw7bxd3dvegOm+2JrxkLAe+9gunSRti/oxVHs4PtWUVA9EJHALAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle -2$" ], "text/plain": [ "-2" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(diff(f,x), x).subs( {x:sols[0]} )" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAOCAYAAAD9lDaoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA30lEQVQoFW2RMRKCMBBFg3qAjEeA1orRnsIjWNupR6CEVm8gpa2tnRY0tt5AjoDeIL4fBycqf+ZPsn//bnYhcs6ZsixjY0wOhSlsYY5+kzCEMmwRllmWnWBV1/UE7cB5JW4GMsAV/IACdX3Co0SZ5vBBwkoIcOFu0WOZFDQEquyDNRq8j0VR3CEp55/7q6ZriqiF/MZ6rg8auMK8UzJSuxAk9oo5N53+1YnE+tegeNS5MSy4J2EH7prrPTiBBp1xdr9GOUGFbcSacp+hvleIMUFKYaLntImMfh7OEP4HvwBvn1+w+m4NrAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 2$" ], "text/plain": [ "2" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(diff(f,x), x).subs( {x:sols[1]} )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[It will help to look at the graph of this function.](https://www.google.com/#safe=off&q=plot+x**3-2*x**2%2Bx)\n", "The point $x=\\frac{1}{3}$ is a local maximum because it is a critical point of $f(x)$\n", "where the curvature is negative, meaning $f(x)$ looks like the peak of a mountain at $x=\\frac{1}{3}$.\n", "The maximum value of $f(x)$ on the interval $x\\in [0,1]$ is $f\\!\\left(\\frac{1}{3}\\right)=\\frac{4}{27}$.\n", "The point $x=1$ is a local minimum because it is a critical point\n", "with positive curvature, meaning $f(x)$ looks like the bottom of a valley at $x=1$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Integrals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The *integral* of $f(x)$ corresponds to the computation of the area under the graph of $f(x)$.\n", "The area under $f(x)$ between the points $x=a$ and $x=b$ is denoted as follows:\n", "\n", "$$\n", " A(a,b) = \\int_a^b f(x) \\: dx.\n", "$$\n", "\n", "The *integral function* $F$ corresponds to the area calculation as a function \n", "of the upper limit of integration:\n", "\n", "$$\n", " F(c) \\equiv \\int_0^c \\! f(x)\\:dx\\,.\n", "$$\n", "\n", "The area under $f(x)$ between $x=a$ and $x=b$ is obtained by \n", "calculating the *change* in the integral function:\n", "\n", "$$\n", " A(a,b) = \\int_a^b \\! f(x)\\:dx = F(b)-F(a).\n", "$$\n", "\n", "In `SymPy` we use `integrate(f, x)` to obtain the integral function $F(x)$ of any function $f(x)$:\n", "$F(x) = \\int_0^x f(u)\\,du$." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABYAAAAuCAYAAAAsnen7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACIUlEQVRIDe2XMVICMRSGQT0AUlpyBNSewiPocAKhtMOhghZvgDdg8AZY0DN6AygtkRus379sMpmw7CZLKW/mkeQl78vbl2Q31JIkqZ2qo9Hoy2dc1E6U8Xg8ANH2MSeBgT4A3PhQtSuDgTbwV6SfAvlSGQyoB/zNB5p2JTDARwAfBpJXRoOBtgA1KXNzayapa5vECEDltev4KNc9VGlZ0Z8+STTYAabV7AnWNK6p70y/BWM0M6vvHn1G9dgmOhsNtlTwUaRPqLadIp1h2+fenBhOz9SpD2jP0YFs6kPXpj+kTBcvm3nCjK64K9+kw+93xx7Ws4jabhREt0APzr87pqxuIv72plTOZp4tqpmCXQ/SIqjEHgBsDeneHPZ7lTnMGT6hrnPflyt19wAMab/KHiqKWBFKtzgrqi1q9yM29a3QKLnsdDo/eGjVr9FbQMPlcrlGX9AbbAk2mxbaQWIPSNDoiEEHixfhWzj0DLbpOafCpqLOWyzu22RdiyvnA2Lz8w+2G6/QNjq1z3ykUiUV+tro/V0oUWAi1SU7SILBSgFEfbLsZ6tohmAwkC7w9yKY2xcEzlJQumBRYKAtHHaU7nXAZeTWQyLux6TAzFIIBqhralQKSsFZCnS1ikqBAR99bQLUDSi9bpnBWanrrbacrmMbxuVfvcquo34/H4ZfdO7b/XZhjrMI/aKBQVooR1Phe/HIWsQ7VCdQolQssOf+ifwDIG6TwtrBdSUAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\frac{x^{4}}{4}$" ], "text/plain": [ " 4\n", "x \n", "──\n", "4 " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x**3, x)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAVCAYAAADsFggUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADXklEQVRYCd2X71EbMRDFLwwFOKECTAcJqQC7A/5UAOkgDJ/sr9ABpATowFABhA7iDmKuA+f9xK5GZ9+dwZwnM9KMvNJq9U77tFrJxXw+L3Kuo9Gov65/dXO3iozLeDz+Kfe+fsDFvmFEiGwJk6OH8nJH8i56+86G5t4zxbDC7E+Ea25FDvbk04Pkty58E85v4RxIlrlG2KUcvO6CLMMAC8wi1wh7UTR8Nmc7EcJ7EdBudhEmxwZybNoJS1UQMI+3q7puelo0OYQQLhPER+ljAk5s/pjNnuSt9CHRolObGw4CwAGTciJ9W246kk3ECDOSH80F58xU3yVPVfuqJ6arrNN0CDCHnROmBfFxkuSp2oEgSZyGjKnqsypE3KoO0UmGovaEMdUrVRy7lBzasNv8SPs17X3p2vIXmAFDkmfHL1VIOlf1XBU3NsFnYwebOJIQATHpRz06SlsANneyiWSZ/lwShyAUx/fV9rlmUqS4rksl9rNU4W1hEVkhebtOkueHY36pGXdTMHvbtqAHOj7yBnmkec+LdoaFs1fpmPQsKCxKbcaJwsfUhrbGiD6aHDt2nEWSwDkOE1VIhtS2gtNlg8GT5qebRPTyzaCT5Dg3FWz6EAZ4W05oAqjTQwTl76uo/XWbJqeYBKkU1nWhypEmMoi+G9VVx1Kmy0XzFjcZ3FUb4EBhI7a815H03SOBNxW3aYtojnQgVpJIgzieCRB1pr4TWvcN8NuwwxxhQBbFj2MhXY/6ql76RT/rlDB9rBQou0j+WSoaP1RlHLtKMsdYY+4EyRdS/DZjrFS9kQ4Ha/Glp3CMPYqDgh/NhQwuFf+GJ37fQMwuNM7a6goRNu2UMPsKeYA/rdFZ9OpzpPxIHKh9LN1ipGDDDel2OMDOpoV+47NBY8zlubBYIIo6M0yIjeRIx9hSXpXOC1E+2chL3xbEdZ0u6lr6uJtqEwXkD180fWwCGZI4QBRynTtpO2oTJY2E2TxwKmlBfTDYkPDuU5+N4YbkGzyDIDIeT/UrRWPMG26EsMqX/kPHnKu9yddZjvDYTDZqbxNHcp01dT2HSFrrJm1YSHgfMpYlYYoELgfyKJHxoWIYYIGZJ2HGEJdP218kM1spwIgP2ixzmFNg0THw6HD9W6XmcdPfS8bL6h/ZPSdvC13L6wAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle - \\cos{\\left(x \\right)}$" ], "text/plain": [ "-cos(x)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x), x)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAVCAYAAACnvtv5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAECklEQVRoBd2Z61EbMRDHTcYFMEkHTgdJqADTQYAKCB2E8Sf7K+mAUALpAKiARwfQQRh34Px/ivbm7uw766R7eNgZoZO0u1rtSyszWq1Wo/fU5vP5JPY8KbSxe8bSfRi9I1gsFj91nC8JR5p4Hgks+iHdw+KxoEOipGu1idqdxsexvFLptPd38ThQf5HCS/QY/1X9nxQ+XdMmGc6E0yFf9P2sfhDDad997X+v/qvJlNKLz5PoD9UvU/h0SdtWqnztUsgA3pfCuQrAC0WBFzx3Ftoy3NAHPFF0/G5LCM8LnkTyTsJOG06K4+6sBeFMhdBFxMPzpHbzARfHtrf3rh9+fKD+TA3Fnfq5B+E0urA9T1IOdyDwWe1G83du5P9ojPLP1VAWe96q4e0UCbdq0FUB92qBXx5RtPCJORc8j9Rai+S8XHXfITLnI+5SBL9oYvqgRrU41ZgqjcM3yvmio+Lkks/4ag7jXKincnPg8TDUmb5ZwxDstdQ3jgJNHXzTojnGJrxsfy02ORc8caIhYKvMznBSEB5ZNgzltUXYxw3r2w50A714l9MYjoBg9t6aaUxkLXMM8XZX1mu+Mpo8Pk71lqPNPkWbci54wrtXCJXZUuWjCPIKJkVQ3rs59Y3KfOFjFLwVDy+A1uDLHCn4mY9EwKnyRs+zSzmXpe08v8K3zoFh79WaGPgYHRQYFQdBMjvDbWDEneM8vsgzeGQppkqhMLKIo/TmHttXM3zWyhkAmkaQeK46h3ByeHlbeTvawUJltogzupEIMRpgaZI551HqTbH/Mar/WvQ6ugo0w3nUOgXAtfibl5NKQ4sCaOr2cduLX9NzwXNjCnYMe/hTJ/NYiwjIfYSyuE9cMaBvUywizjQOjkDhkg6XoiPlZg4AI82bAu3BzHit0gQ3EFCuRXhGon1Sz0XE5XWQ8e7qo4nMFCcojvbmCVEESnfgFb12V9l6TX+oNR6xlhINlRRI9Wp5nr1csQKuGj/0ovRQgA/PlzKknosUSLXbJwTLvKd/ZaAklOlKaikNpVJREi2U8xi0EDWac6B5u4vYEAOQ9s417zxVPZFApLIGML7SfKFS1Jh9ygaGB7g8TypB6+wNXuGtp3H0udhM9OjjSH1vUddE5lZ+ZOagsSBh8WoU75zDC0+aMqcIMR5K3latBYsoGXCwbQ//YH5dII67YBrKUwoiskfqs4jWN9FJ422HAXmK1Ead1skY3M3bHutCCQKyRHJVG7RTJBJ33JBAyuROK6dJkwmjWRFjc2u96KlA4UOkJIHnAa/QqjZpv1jioSOOn7UoAmbqT9X/9Qf5pJ47ip/ArIjxS5UdRqY65m5OARwFXjsNg99xbWpHRibipuqjokV0/ETGf/J7K0hiz/8P16UYdeAoqzcAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle x \\log{\\left(x \\right)} - x$" ], "text/plain": [ "x⋅log(x) - x" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(ln(x), x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is known as an *indefinite integral* since the limits of integration are not defined. \n", "\n", "In contrast, \n", "a *definite integral* computes the area under $f(x)$ between $x=a$ and $x=b$.\n", "Use `integrate(f, (x,a,b))` to compute the definite integrals of the form $A(a,b)=\\int_a^b f(x) \\, dx$:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAArCAYAAACuAHIQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABFUlEQVQ4Ee2VwQ3CMAxFW8QAiBEYARiBEUBsQDeAY3tmA2AERoANkBiBEaAblPdREzkKba8IsPTlxP6xm8Rx06qqEitFUYyZH8GEcWl9fU0wDlAHcAdTMAKROLIiLORl4Rql6JH0IkuL4U+2h/Mhp5G6QuKaVTyqEdWG9A1cwQXfFp14siZd8iEb/PrPSPM8D3tBy8387g1Sw2Ows4fTVht6DMNOMhHVHCOJIis9LHVVIZCIjHfJgn3AqicBuU4fbMou8mSIIxwlWq/6rXgy3qwpvVv5IkNaYWhM78l1+kFbekdWPc+YZM5g9Jyxju8MbgTbJGpf70CQBzhan92gCfoaqt8JXqKXQjptVM3R/Qv1GSfs2ycS3W/ByGkKBAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\frac{1}{4}$" ], "text/plain": [ "1/4" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x**3, (x,0,1)) # the area under x^3 from x=0 to x=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can obtain the same area by first calculating the indefinite integral $F(c)=\\int_0^c \\!f(x)\\,dx$,\n", "then using $A(a,b) = F(x)\\big\\vert_a^b \\equiv F(b) - F(a)$:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAArCAYAAACuAHIQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABFUlEQVQ4Ee2VwQ3CMAxFW8QAiBEYARiBEUBsQDeAY3tmA2AERoANkBiBEaAblPdREzkKba8IsPTlxP6xm8Rx06qqEitFUYyZH8GEcWl9fU0wDlAHcAdTMAKROLIiLORl4Rql6JH0IkuL4U+2h/Mhp5G6QuKaVTyqEdWG9A1cwQXfFp14siZd8iEb/PrPSPM8D3tBy8387g1Sw2Ows4fTVht6DMNOMhHVHCOJIis9LHVVIZCIjHfJgn3AqicBuU4fbMou8mSIIxwlWq/6rXgy3qwpvVv5IkNaYWhM78l1+kFbekdWPc+YZM5g9Jyxju8MbgTbJGpf70CQBzhan92gCfoaqt8JXqKXQjptVM3R/Qv1GSfs2ycS3W/ByGkKBAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\frac{1}{4}$" ], "text/plain": [ "1/4" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F = integrate(x**3, x)\n", "F.subs({x:1}) - F.subs({x:0})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Integrals correspond to *signed* area calculations:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAOCAYAAAD9lDaoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA30lEQVQoFW2RMRKCMBBFg3qAjEeA1orRnsIjWNupR6CEVm8gpa2tnRY0tt5AjoDeIL4fBycqf+ZPsn//bnYhcs6ZsixjY0wOhSlsYY5+kzCEMmwRllmWnWBV1/UE7cB5JW4GMsAV/IACdX3Co0SZ5vBBwkoIcOFu0WOZFDQEquyDNRq8j0VR3CEp55/7q6ZriqiF/MZ6rg8auMK8UzJSuxAk9oo5N53+1YnE+tegeNS5MSy4J2EH7prrPTiBBp1xdr9GOUGFbcSacp+hvleIMUFKYaLntImMfh7OEP4HvwBvn1+w+m4NrAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 2$" ], "text/plain": [ "2" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x), (x,0,pi))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAOCAYAAADaOrdAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA/ElEQVQ4EbWU0Q2CMBRFqXEA4giwAeoGuoGMoG6gn/CLG+gKjiCuwAY6AroBnksgaRC/Wm/S3PJqzoW+VtM0TeCqPM8jGMeOs8BrPVOvVDOuIV1AgacCSswL7MBYMy8nKjpKwK3NAKyvejOuqvsIWcF5AQ4FtFQyD6lHPkIEewLTm48pdO7JGFU1Qh9YhBsfX/KVAzhRAKM9cX8JAa6GXwg74YHJskwNuzOGjdP6L6UA2jsw/AH1s2r4vl/z2hPAO8BzO0BB0z7N1QFvYMR2AHP1xcs9CYCp0Uu8/2sRW1Jw7bxd3dvegOm+2JrxkLAe+9gunSRti/oxVHs4PtWUVA9EJHALAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle -2$" ], "text/plain": [ "-2" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x), (x,pi,2*pi))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x), (x,0,2*pi))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "During the first half of its $2\\pi$-cycle,\n", "the graph of $\\sin(x)$ is above the $x$-axis, so it has a positive contribution to the area under the curve.\n", "During the second half of its cycle (from $x=\\pi$ to $x=2\\pi$),\n", "$\\sin(x)$ is below the $x$-axis, so it contributes negative area.\n", "Draw a graph of $\\sin(x)$ to see what is going on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fundamental theorem of calculus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The integral is the “inverse operation” of the derivative.\n", "If you perform the integral operation followed by the derivative operation on some function, \n", "you'll obtain the same function:\n", "\n", "$$\n", " \\left(\\frac{d}{dx} \\circ \\int dx \\right) f(x) \\equiv \\frac{d}{dx} \\int_c^x f(u)\\:du = f(x).\n", "$$" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABYAAAAuCAYAAAAsnen7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACh0lEQVRIDe2XQXLTQBBFZfABEtix9BEM7F0FRyDFCUiW7Ex5Ze9S4QbmBpDcIFDlfTA3SNixI3AD856smZLtkWQJNlS5q1rd0zP9p9XTmhn1VqtV1pZms9kAn1fwb/gIfg6fY/+GzKkflJbygvF3AL3XDzlGfIGPbUtdgc/X7vH5GO0utlA6AZdfuQAzLb5FpE7AwbtIwWvac/QPwa7sdVm8MgCALt4lfI2e59z+vwYWBMAhYgk/Rc8ro3UqcDTC7/CLAIJu2UnP4Bz4Qd5s8QBMkHu4XAUvaWv/BOcUIy4iOS3sFvwb2A/BxZFuGHO1VrMT5IT2z6LteNMQIs8yF0+eTqfzkj6mfQmPQx/6bejfR+apYCYj3ahD2tZmiPBRoh9TDRURDctREN01vCzb2uoh4rh5FDG4GB9r4mns2qkK0iKoFNKQYTuS1+b9nv3CwS/nAv0z8kxX9HI5WQHvtO9LRmyE8j3ORmWNxrLBZt8N3IoejkajH3i46u6l1uJksVjcwm/hJ9hW2GJaaO9F/2SvSM20s3ipQV1sB+CYtUMqYip67GLtr0LRvVo5fCAxN/9fufVj7BUKW+aArnzzR7pf2w6HAmqaaqsCUIEECcAZuif6HD5Br9ynm3IsyCkAXgUChdvOJBhSsgnY09tjqnxURT0FGGy1OSZSD9d4/depFL3pqKSmiDccAfVg9cZ0hr5x0d4YSKM24jAYEO+/gnr5Mz1f4VqqrYqUZ5EK7yG1VdEa2MkA/4WwFI/Rk4tZm2OchrJgWxRSYXqSVAkMoBH5X7Es9CRAlbEO2FeUrwDefl3/NSTLMUlNVbFzEWQSv0LfxpLbnjBO0rh4OJtH/zkCDVAaN6E/bklI5s4XQM8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\frac{x^{3}}{3}$" ], "text/plain": [ " 3\n", "x \n", "──\n", "3 " ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = x**2\n", "F = integrate(f, x)\n", "F" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABYUlEQVQ4EaWUPW7CQBCFDeEAQEnp3ACU3gW5QSROAJQpkSu7dW4Q5QQouUEo3BNyA1KmRL6B8z1r19lYJLGXkZ7mZ2cesztjemVZBl0lTdMhNbGpC41eEi8GXclMfkbx2tZiP2IfwHXfBjvqFSRzpybDDolNfQnV3ZtD+G3qDS9FkiQZOIrHt8O6I10T5w7MFLyIELIQDr3fDLsQoe+UA0uGvhURWp0WPc89VGdalQ2wokFtfDvUzmm5pWuhy3XdIY4SVub0Br0E6mRhYntyXoz9q3KHou1/EMjegycwx9e19GN6/H+lIqRInTULtAq2o/GZ8/PkGgpLOXWXG/8VHNxYW9t2+N74OX2n20asleu+YVXA9e1Hb68bEBsKbRgHJvGZZA1lh67+lrA/HIIY39055+inqQ7VkXAy5CfsAlRCTGeaeiu5iqLok0xNcQT0TcZ5nh/BPZgQK4nV18f/U74A3r7dz1n0p9AAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle x^{2}$" ], "text/plain": [ " 2\n", "x " ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(F,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternately, if you compute the derivative of a function followed by the integral,\n", "you will obtain the original function $f(x)$ (up to a constant):\n", "\n", "$$\n", " \\left( \\int dx \\circ \\frac{d}{dx}\\right) f(x) \\equiv \\int_c^x f'(u)\\;du = f(x) + C.\n", "$$" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABdUlEQVQ4EZWTMVICQRBFZ9UDoEfA1AglJ+AIlmZmyhEoI0jXG4CZmSWhGQYkRhTeQI6A3mB9b2uHGtYNoKt+dc/f7j8907NZURRhPB63QwhDoF2BDRjCf0kcYsckK5ZTfNfr9d7BdLFYXMC94D9Zrw8RPFIM3KdFiNvtL3hL+X1iBfvgB5FWreCDdQveE+xtClq4ptCOmqy+UVPOlsscSpOxwTd8G5/F78SKP1TrLt6r8gS3Fbe0w39GYQfSxDj5mOPwngTEEjyDPmvz3CxvFOSDw5hWhYQhENuZA0ztmsWsIs7wefDIKUaj0USknDFcJ+VYz8Eq5Yx3Oqy6sJtB2oYxXP2R+zpe63knkaDA9s9TMWLvMeB3HjdrxbR4XHPK11AKsnAIXXx9CG7iXZrsvToUn1l5AuJ0o0frM+7BLubAxNS85A5Jdq2wgpdAEYdzA3+KD3g79ieY2aGJisb3Rbi1eG9uNgXlUSkcgDmYwK3ARjF8+AMlFLcMG83CbgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 2 x$" ], "text/plain": [ "2⋅x" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = x**2\n", "df = diff(f,x)\n", "df" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABYUlEQVQ4EaWUPW7CQBCFDeEAQEnp3ACU3gW5QSROAJQpkSu7dW4Q5QQouUEo3BNyA1KmRL6B8z1r19lYJLGXkZ7mZ2cesztjemVZBl0lTdMhNbGpC41eEi8GXclMfkbx2tZiP2IfwHXfBjvqFSRzpybDDolNfQnV3ZtD+G3qDS9FkiQZOIrHt8O6I10T5w7MFLyIELIQDr3fDLsQoe+UA0uGvhURWp0WPc89VGdalQ2wokFtfDvUzmm5pWuhy3XdIY4SVub0Br0E6mRhYntyXoz9q3KHou1/EMjegycwx9e19GN6/H+lIqRInTULtAq2o/GZ8/PkGgpLOXWXG/8VHNxYW9t2+N74OX2n20asleu+YVXA9e1Hb68bEBsKbRgHJvGZZA1lh67+lrA/HIIY39055+inqQ7VkXAy5CfsAlRCTGeaeiu5iqLok0xNcQT0TcZ5nh/BPZgQK4nV18f/U74A3r7dz1n0p9AAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle x^{2}$" ], "text/plain": [ " 2\n", "x " ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(df, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fundamental theorem of calculus is important because it tells us how to solve differential equations.\n", "If we have to solve for $f(x)$ in the differential equation $\\frac{d}{dx}f(x) = g(x)$,\n", "we can take the integral on both sides of the equation to obtain the answer $f(x) = \\int g(x)\\,dx + C$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sequences" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sequences are functions that take whole numbers as inputs.\n", "Instead of continuous inputs $x\\in \\mathbb{R}$,\n", "sequences take natural numbers $n\\in\\mathbb{N}$ as inputs.\n", "We denote sequences as $a_n$ instead of the usual function notation $a(n)$.\n", "\n", "We define a sequence by specifying an expression for its $n^\\mathrm{th}$ term:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "a_n = 1/n\n", "b_n = 1/factorial(n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Substitute the desired value of $n$ to see the value of the $n^\\mathrm{th}$ term:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAArCAYAAACuAHIQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABP0lEQVQ4Ee2V3VHCUBBGE8cCGEsIHYgl2IItWII8Jq/SAdqB2AFagYMdaAkOHYRzEpa5IRLGN3TcmY/9ZW++ezc3eV3XWSpVVV3iL8AEe53mznUIjlCP4AtcgQL0JIrtcGOWP96h7N6Ts15kIPBfnG7OiexGHoPEMTs8zoizof4E7+CN3Ayd7Yp1jsmJEPzzj5GXZdm9CwZO5lefIGPYu4WIjUARnJvra+u8msR2hhVtZdKqLEtnw0vRgXcFC59B9yb1TRHs9yLsQzrtTKNh+VFxSjCD4C29g9gYe04sCHcIWvREciaw78EK+xrdyiEyW9JLiH9EzbFndisLuhe2bopxlmDVrvXtb8MjOscttF95YYBGDckofiAg+32R3EsEo9gtmkdQje8nTmk+eRq7N4VkgT81iLi8szIlvjagbAD0rpg+vQdd+gAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\frac{1}{5}$" ], "text/plain": [ "1/5" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_n.subs({n:5})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `Python` list comprehension syntax `[item for item in list]`\n", "can be used to print the sequence values for some range of indices:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ \\tilde{\\infty}, \\ 1, \\ \\frac{1}{2}, \\ \\frac{1}{3}, \\ \\frac{1}{4}, \\ \\frac{1}{5}, \\ \\frac{1}{6}, \\ \\frac{1}{7}\\right]$" ], "text/plain": [ "[zoo, 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[ a_n.subs({n:i}) for i in range(0,8) ]" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle \\left[ 1, \\ 1, \\ \\frac{1}{2}, \\ \\frac{1}{6}, \\ \\frac{1}{24}, \\ \\frac{1}{120}, \\ \\frac{1}{720}, \\ \\frac{1}{5040}\\right]$" ], "text/plain": [ "[1, 1, 1/2, 1/6, 1/24, 1/120, 1/720, 1/5040]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[ b_n.subs({n:i}) for i in range(0,8) ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observe that $a_n$ is not properly defined for $n=0$ since $\\frac{1}{0}$ is a division-by-zero error.\n", "To be precise, we should say $a_n$'s domain is the positive naturals $a_n:\\mathbb{N}^+ \\to \\mathbb{R}$.\n", "Observe how quickly the `factorial` function $n!=1\\cdot2\\cdot3\\cdots(n-1)\\cdot n$ grows:\n", "$7!= 5040$, $10!=3628800$, $20! > 10^{18}$.\n", "\n", "We're often interested in calculating the limits of sequences as $n\\to \\infty$.\n", "What happens to the terms in the sequence when $n$ becomes large?" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(a_n, n, oo)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(b_n, n, oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Both $a_n=\\frac{1}{n}$ and $b_n = \\frac{1}{n!}$ *converge* to $0$ as $n\\to\\infty$. \n", "\n", "Many important math quantities are defined as limit expressions.\n", "An interesting example to consider is the number $\\pi$, \n", "which is defined as the area of a circle of radius $1$.\n", "We can approximate the area of the unit circle by drawing a many-sided regular polygon around the circle.\n", "Splitting the $n$-sided regular polygon into identical triangular splices,\n", "we can obtain a formula for its area $A_n$.\n", "In the limit as $n\\to \\infty$, \n", "the $n$-sided-polygon approximation to the area of the unit-circle becomes exact:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA0UlEQVQoFXWR0Q2CQBBEhVgAwQ60BLUCsQO0A+3BP/4MJWgLWgIdGCmBDiB2gG+OW0PIuckyO3Ozu5cj6vt+ZlEURenrFlyRJVojLTIjwht+BZ86ABNA2p66ib14BhMzee0Dqukm7ozggawlTOIFzzTdjBlCNzGJaqoii/1dBvr/m2pi6s+te2y3Lb/V48NQvdBE6woZbFurO9rKJOA0bXhHDBW5DBhtYmXP88C0CRjXaLW2OiPFHaEDczNTa+2RPEmb6+ND3RcMdoUtfAd3f+wLrOY/XeyA6s8AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_n = n*tan(2*pi/(2*n))\n", "limit(A_n, n, oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Series" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we're given a sequence $a_n$ and we want to compute the sum of all the values in this sequence $\\sum_{n}^\\infty a_n$.\n", "Series are sums of sequences.\n", "Summing the values of a sequence $a_n:\\mathbb{N}\\to \\mathbb{R}$\n", "is analogous to taking the integral of a function $f:\\mathbb{R}\\to \\mathbb{R}$.\n", "\n", "To work with series in `SymPy`,\n", "use the `summation` function whose syntax is analogous to the `integrate` function: " ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAKCAYAAABWiWWfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABKklEQVQoFX2S0U3DMBRFHSaIygZhg3aFskEKG8AGVP1K/qqyQdiAlg3aEUhHKBNUYoNwjpNIFKs86eb6Xb9c+9nOuq4LRl3XU2gO7kBL/gYngZ4jPoAZaMEW7RsOmWYkT4wXYA9ugbmxYO7QD+OCJeMVWIJPUIBH8E7dMVRVVYBG0xHkOWhBB+bqcAl2Y81vRt+YZw5wdaWLQLOdLyC76xWarSWB7hFNbvick1kECjwHTYwdSBaMM3yoPUKFZleDIs/rdSh4vlrYT+T/mg0/e8OalpiPFzNM9YTuRZw0O5HYcxLotreG72FbaRhr/jfc9WF8Gg3JksL4XmAPXaM949jmoPmu3IU/b8EEeJbxXUYzkkDxBrJQI03dkbu5CLQXBN+W3Thv3QccfgDHpJb9GsghWgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\infty$" ], "text/plain": [ "∞" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_n = 1/n\n", "summation(a_n, [n, 1, oo])" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAjklEQVQYGWP8//8/Aww0NDQIANmVQPwWKqYMpMsZYYqAClyAAjOBOBTIPgdSBKSNgFQ4C5SjBKR3A3E6TAFIHAhAGneDFQEZIBNAQACoqAxIC4N5QAVA/h6YIpCONUCBLqgkCsWExLuHxEZhwhThVAA0PQRmXSdQazqydqAkKDhA4p3IQQBzMCyMGGBuBAAeMC5+ZPF7mwAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle e$" ], "text/plain": [ "ℯ" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b_n = 1/factorial(n)\n", "summation(b_n, [n, 0, oo])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We say the series $\\sum a_n$ *diverges* to infinity (or *is divergent*) while the series $\\sum b_n$ converges (or *is convergent*).\n", "As we sum together more and more terms of the sequence $b_n$, the total becomes closer and closer to some finite number.\n", "In this case, the infinite sum $\\sum_{n=0}^\\infty \\frac{1}{n!}$ converges to the number $e=2.71828\\ldots$.\n", "\n", "\n", "The `summation` command is useful because it allows us to compute `infinite` sums,\n", "but for most practical applications we don't need to take an infinite number of terms in a series to obtain a good approximation. \n", "This is why series are so neat: they represent a great way to obtain approximations.\n", "\n", "Using standard `Python` commands, \n", "we can obtain an approximation to $e$ that is accurate to six decimals by summing 10 terms in the series:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 2.71828152557319$" ], "text/plain": [ "2.7182815255731922" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "def b_nf(n): \n", " return 1.0/math.factorial(n)\n", "sum( [b_nf(n) for n in range(0,10)] )" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 2.71828182845905$" ], "text/plain": [ "2.71828182845905" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E.evalf() # true value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Taylor series" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wait, there's more! \n", "Not only can we use series to approximate numbers,\n", "we can also use them to approximate functions.\n", "\n", "A *power series* is a series whose terms contain different powers of the variable $x$.\n", "The $n^\\mathrm{th}$ term in a power series is a function of both the sequence index $n$ and the input variable $x$.\n", "\n", "For example, the power series of the function $\\exp(x)=e^x$ is \n", "\n", "$$\n", " \\exp(x) \\equiv 1 + x + \\frac{x^2}{2} + \\frac{x^3}{3!} + \\frac{x^4}{4!} + \\frac{x^5}{5!} + \\cdots \n", " = \\sum_{n=0}^\\infty \\frac{x^n}{n!}.\n", "$$\n", "\n", "This is, IMHO, one of the most important ideas in calculus:\n", "you can compute the value of $\\exp(5)$ by taking the infinite sum of the terms in the power series with $x=5$:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 148.413159102577$" ], "text/plain": [ "148.413159102577" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp_xn = x**n/factorial(n)\n", "summation( exp_xn.subs({x:5}), [n, 0, oo] ).evalf()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 148.413159102577$" ], "text/plain": [ "148.413159102577" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp(5).evalf() # the true value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that `SymPy` is actually smart enough to recognize that the infinite series\n", "you're computing corresponds to the closed-form expression $e^5$:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABIAAAATCAYAAACdkl3yAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABN0lEQVQ4EZ2U0U3DMBCGXcQAFWxAN+gKdARYgW5AxVPySjdAjAAbtDMwQjaoxAbh+4wdSkVM3JMuZ5/9/747nzPr+z5MlbZtb9i7RncJ47zDv79IjqlG4AMq0Qu6kAQbLv1Uyi3gj1PMOUQBohVEc3TP+FPS2tTEPKEdakqvEN1hQ7DY52rTNEsUeF8X0XB6DCF+jCzgX9Wm9gZo+cMTrtK4qyXaQnR8Y9bnHV83M7+pAsCbstgH9Focvo32F9HJRtcX6AZ/vGIdYzL0EZvtDbv1nnEMH2s9jCCeih2VSATA1rft15kkISTP7yq5/jY5IiNR5hA9YmP+2B3z+JZcLEkm8mSrvy1tLq0dX39srtLm0lomGiUhyu+3VGJhLaf2zNgf1iAQ2DP61X9l6COAucg2W5Samn0B87GR3Tp/So4AAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle e^{5}$" ], "text/plain": [ " 5\n", "ℯ " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summation( exp_xn.subs({x:5}), [n, 0, oo])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Taking as few as 35 terms in the series is sufficient to obtain an approximation to $e$\n", "that is accurate to 16 decimals:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 148.413159102577$" ], "text/plain": [ "148.41315910257657" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math # redo using only python \n", "def exp_xnf(x,n): \n", " return x**n/math.factorial(n)\n", "sum( [exp_xnf(5.0,i) for i in range(0,35)] )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The coefficients in the power series of a function (also known as the *Taylor series*) \n", "The formula for the $n^\\mathrm{th}$ term in the Taylor series of $f(x)$ expanded at $x=c$ is $a_n(x) = \\frac{f^{(n)}(c)}{n!}(x-c)^n$,\n", "where $f^{(n)}(c)$ is the value of the $n^\\mathrm{th}$ derivative of $f(x)$ evaluated at $x=c$.\n", "The term *Maclaurin series* refers to Taylor series expansions at $x=0$.\n", "\n", "The `SymPy` function `series` is a convenient way to obtain the series of any function.\n", "Calling `series(expr,var,at,nmax)` \n", "will show you the series expansion of `expr` \n", "near `var`=`at` \n", "up to power `nmax`:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle x - \\frac{x^{3}}{6} + \\frac{x^{5}}{120} - \\frac{x^{7}}{5040} + O\\left(x^{8}\\right)$" ], "text/plain": [ " 3 5 7 \n", " x x x ⎛ 8⎞\n", "x - ── + ─── - ──── + O⎝x ⎠\n", " 6 120 5040 " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series( sin(x), x, 0, 8)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 1 - \\frac{x^{2}}{2} + \\frac{x^{4}}{24} - \\frac{x^{6}}{720} + O\\left(x^{8}\\right)$" ], "text/plain": [ " 2 4 6 \n", " x x x ⎛ 8⎞\n", "1 - ── + ── - ─── + O⎝x ⎠\n", " 2 24 720 " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series( cos(x), x, 0, 8)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle x + \\frac{x^{3}}{6} + \\frac{x^{5}}{120} + \\frac{x^{7}}{5040} + O\\left(x^{8}\\right)$" ], "text/plain": [ " 3 5 7 \n", " x x x ⎛ 8⎞\n", "x + ── + ─── + ──── + O⎝x ⎠\n", " 6 120 5040 " ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series( sinh(x), x, 0, 8)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 1 + \\frac{x^{2}}{2} + \\frac{x^{4}}{24} + \\frac{x^{6}}{720} + O\\left(x^{8}\\right)$" ], "text/plain": [ " 2 4 6 \n", " x x x ⎛ 8⎞\n", "1 + ── + ── + ─── + O⎝x ⎠\n", " 2 24 720 " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series( cosh(x), x, 0, 8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some functions are not defined at $x=0$, so we expand them at a different value of $x$.\n", "For example, the power series of $\\ln(x)$ expanded at $x=1$ is" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle -1 - \\frac{\\left(x - 1\\right)^{2}}{2} + \\frac{\\left(x - 1\\right)^{3}}{3} - \\frac{\\left(x - 1\\right)^{4}}{4} + \\frac{\\left(x - 1\\right)^{5}}{5} + x + O\\left(\\left(x - 1\\right)^{6}; x\\rightarrow 1\\right)$" ], "text/plain": [ " 2 3 4 5 \n", " (x - 1) (x - 1) (x - 1) (x - 1) ⎛ 6 ⎞\n", "-1 - ──────── + ──────── - ──────── + ──────── + x + O⎝(x - 1) ; x → 1⎠\n", " 2 3 4 5 " ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(ln(x), x, 1, 6) # Taylor series of ln(x) at x=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, the result `SymPy` returns is misleading.\n", "The Taylor series of $\\ln(x)$ expanded at $x=1$ has terms of the form $(x-1)^n$:\n", "\n", "$$\n", " \\ln(x) = (x-1) - \\frac{(x-1)^2}{2} + \\frac{(x-1)^3}{3} - \\frac{(x-1)^4}{4} + \\frac{(x-1)^5}{5} + \\cdots.\n", "$$\n", "\n", "Verify this is the correct formula by substituting $x=1$.\n", "`SymPy` returns an answer in terms of coordinates `relative` to $x=1$.\n", "\n", "Instead of expanding $\\ln(x)$ around $x=1$,\n", "we can obtain an equivalent expression if we expand $\\ln(x+1)$ around $x=0$:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle x - \\frac{x^{2}}{2} + \\frac{x^{3}}{3} - \\frac{x^{4}}{4} + \\frac{x^{5}}{5} + O\\left(x^{6}\\right)$" ], "text/plain": [ " 2 3 4 5 \n", " x x x x ⎛ 6⎞\n", "x - ── + ── - ── + ── + O⎝x ⎠\n", " 2 3 4 5 " ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(ln(x+1), x, 0, 6) # Maclaurin series of ln(x+1)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }