{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Symbolic Computation\n", "Symbolic computation deals with symbols, representing them exactly, instead of numerical approximations (floating point). \n", "\n", "We will start with the following [borrowed](https://docs.sympy.org/latest/tutorial/intro.html) tutorial to introduce the concepts of SymPy. Devito uses SymPy heavily and builds upon it in its DSL. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.7320508075688772" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "\n", "math.sqrt(3)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.8284271247461903" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.sqrt(8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\sqrt(8) = 2\\sqrt(2)$, but it's hard to see that here" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\sqrt{3}$" ], "text/plain": [ "sqrt(3)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sympy\n", "sympy.sqrt(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SymPy can even simplify symbolic computations" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 2 \\sqrt{2}$" ], "text/plain": [ "2*sqrt(2)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.sqrt(8)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x + 2 y$" ], "text/plain": [ "x + 2*y" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import symbols\n", "x, y = symbols('x y')\n", "expr = x + 2*y\n", "expr\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that simply adding two symbols creates an expression. Now let's play around with it. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x + 2 y + 1$" ], "text/plain": [ "x + 2*y + 1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr + 1" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 2 y$" ], "text/plain": [ "2*y" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr - x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that `expr - x` was not `x + 2y -x`" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x \\left(x + 2 y\\right)$" ], "text/plain": [ "x*(x + 2*y)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x*expr" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x^{2} + 2 x y$" ], "text/plain": [ "x**2 + 2*x*y" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import expand, factor\n", "expanded_expr = expand(x*expr)\n", "expanded_expr" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle x \\left(x + 2 y\\right)$" ], "text/plain": [ "x*(x + 2*y)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "factor(expanded_expr)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle e^{x} \\sin{\\left(x \\right)} + e^{x} \\cos{\\left(x \\right)}$" ], "text/plain": [ "exp(x)*sin(x) + exp(x)*cos(x)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import diff, sin, exp\n", "\n", "diff(sin(x)*exp(x), x)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1$" ], "text/plain": [ "1" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import limit\n", "\n", "limit(sin(x)/x, x, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "Solve $x^2 - 2 = 0$ using sympy.solve" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Type solution here\n", "from sympy import solve" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pretty printing" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from sympy import init_printing, Integral, sqrt\n", "\n", "init_printing(use_latex='mathjax')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF4AAAAhCAYAAABQphx6AAAABHNCSVQICAgIfAhkiAAABBtJREFUaIHtmluMTWcUx38MMkQRYRQNMRUhElMm5kGGHiJD3GoYDwSRSCRNKtRDZaRtPKhL8YCkTRDG5YG4E/cgiBCCppOMpE3FrUG0xVAaY3o8rLVnn3Nm77O/vc/Z5mL/k8k+51vrW/+1117fWt/+zkCERo8WQE5DO/EhIRdYATwFXgI/EvwBfAzEG+lfo8MO6ju5JICdfGBVFv1q1sgD/keCPR+Ypp/vB7C1ECjOnmvNGyXYWd4ZKTFHgQqgnU9bu4GW2XSuKaOVh7yLXv8D/tHP4wPwdASqkdUTAe8M/Eiv1RnyjAOOZ2ijWcEr8O31+jJDnhLgZIY2GhN6IeV3f1ADphn/IigBUs7aAP+6yMuADcBFZGXFgZ2GtrsBtcD6DPwLgiF6vRHUgFeNz0bGj0CC6oZvgQLleAD092H7CyR5DgT2LhiswF8PauB9ZPwE4Ega+ddAP6AD8KVP26XA38CFYK4FRqFeA2f8+6jxPYE/08jPAb/j/+2xIzAKeai1CeOn1NaUFP0WyDY4Dqw0sN8KWAD8CrwG7gLfqJ0hyD09DoEXgMM6YYuHXmdgrMP4QOB7UzIghnmNn6G6E1PGC5AHUUXy0cZa1d9oYLsNdiBvAquRGLwGNun44RB463BWJ6VrXoVKVukgKwc+88EXwzzwe5CVmOsgq1A7c/T7Ev1u+hJnBfc7JGMtjMB+oVwaAm8drunEH9LotEPOYWr1mohdfsgwD3wu0nf2uMg/QbLzDvCV2jyBZLIXilT/vIu8CueVlilvEm7p5HID3ctIo7SQB6zzyRfDLPCTVG9GGp0V2Nl5CfMjDutQ8HMX+UWV98yEN5u7mkPI9s7CBORcJwyUAm887D9J+DwXeGVou4T0O6V8pKm6bRiC8ibhGck1Kx0GAG+RRguwDf9LLIZ3xucAf5H+CGI6ci70UO39bMifq/pu28RhKj+WZd56eKsGphrq/wbMQm7AayfkhBjegR+pOvNc5OOQ1VAJdEXKZQ1mL2atkXt+4CI/rdzLssybhLbYtWqM4Zw1wF7kBHOmX0LMAr8BaeTdHGTFyNK+DXTXsTK1edDQB6uvpTbPxdjxKA2Btw55CUTDDOcMR/rBZuyS44XJyDasAtkBxIE/EsbWpOjfx/kIogApjQ+BT1Nk1u5suIE/s1X3DbAd+anzKrJbuaey3iHw1iEfO/CDDOfkIM3ljA+epQk8Tn93EnSH6tiiFBt9gUfI78JOvo7WeVcMfVqAZG8N0kj3IW+rd5H+EhYvIE/Suvk+PuZtpX5gsoXl+PenyaEYO/BdPHQTMQjoEYpHUn9/Ccl2g6EI2Sb9pN+nI0GvIfp/mlBh1fRXwGDk5SSONIgIIeMI9ZtbWYN69IGgE7KHfo7U0kkN606ECBEiRIjQ9PAOfoRZsxOEODYAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\int \\sqrt{\\frac{1}{x}}\\, dx$" ], "text/plain": [ "⌠ \n", "⎮ ___ \n", "⎮ ╱ 1 \n", "⎮ ╱ ─ dx\n", "⎮ ╲╱ x \n", "⌡ " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Integral(sqrt(1/x), x)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\\\int \\\\sqrt{\\\\frac{1}{x}}\\\\, dx'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import latex\n", "\n", "latex(Integral(sqrt(1/x), x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "More symbols.\n", "Exercise: fix the following piece of code" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'z' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mexpr2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0my\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'z' is not defined" ] } ], "source": [ "# NBVAL_SKIP\n", "# The following piece of code is supposed to fail as it is\n", "# The exercise is to fix the code\n", "\n", "expr2 = x + 2*y +3*z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise \n", "\n", "Solve $x + 2*y + 3*z$ for $x$" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Solution here\n", "from sympy import solve" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Difference between symbol name and python variable name" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "x, y = symbols(\"y z\")" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAATCAYAAABPwleqAAAABHNCSVQICAgIfAhkiAAAAOFJREFUOI3d0q9KQwEUx/GPgkXD0DjEuiXBMLT4BMsrBtPwBRZmshsFEYZvoM0oFgUNy/oCmsQgYyhMplvYGVzH3bwXlvyVw/nzPedwOMxJDQzCpqmEHu7SktsBX06Br9HHZlpyCZ94TsnVovHJlMbgNoqKidgKXvCKQrJ4cQK+D7uTiB1hHU10Zk2uxuTj8Mv4wgMWZoGwip9YH27wja2/wLGe8IG92OIsKwitgLp4w1oeeD/gAep5QNgNsC3DkSZ1ZXSkSl5wfKTTrMAGDnFu9PiPWM4KH8S0d1z4/Zr/UUPpLy9/oykWBAAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle y$" ], "text/plain": [ "y" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAAPCAYAAAA/I0V3AAAABHNCSVQICAgIfAhkiAAAAJZJREFUKJHN0jEOQVEQheHPQyJR2IEFWYREqbYApYhWtKJWaIhCRF6hsRO1SiIo3NcI991C4SRTTHL+mcnM8AMd8YhEDrU3aIXdh2I9tHFI7T4JXebIyswVzAIwDXlUVSwCME4Zp45lAIYpQAPrAAxSgCb2uKOfArS8bnRDt8xcbGSDDk7YfvGOcC2SDBfxTzinjPsnegJpVyc/MXt5AQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle z$" ], "text/plain": [ "z" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'z' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'z' is not defined" ] } ], "source": [ "# NBVAL_SKIP\n", "# The following code will error until the code in cell 16 above is\n", "# fixed\n", "z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Symbol names can be more than one character long" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAATCAYAAABV0nVhAAAABHNCSVQICAgIfAhkiAAABS9JREFUaIHtmFtsVUUUhj+x0sYWg1bAK8ZGodYi5ZSLGi8gQgJqvD4oMVh9gBeQxHhJjBowNoT4gpEHidFQBYPBekdUiFyMJCpaaKOAV4ripSBGqqW0tvXhX9sznc5ue3qOp2rOn+zMOWvWrPn3zJq11mzIIYf/Me4BuoA5g00kBYxGnF8ebCIhDBlsAhlCwtpP07STTQfLFOdUcQvwJPA+cAS972pfKS/LpP4pJIDfgS8yYAfgkzTt/NvmcvEQMB6t1/dAaZbnzxoKgQ50AtLFbqCZ7ETS9ei0jkpxXJWNmzrAeacB5wPHmY1gxPAX4EFTvDFg8Bx65sQZJlsKlAMvAD8jb9wOTIkh1gU8DkwGXgMOm+xCR+9mYANwCGgDvjR+x3v2Kuw9QidvDrAGRZJm4FfgY+BOT2+ZzV8KFCFH67Lndk+3v7xAEXkRUA8cBRqB+9GmJIADaL2yic2Ic1dvSn4q6S28TbS2zpFNsHYMWvCNQA3a4NnA68B5aFP8OcqBu4G3gJWoGNuDFng1cCvwFbAOOAbMAqqBscAdjr1Ka/1cPcy47EDRpAkYCVwPPGu/lznvW2N2t9t7RNhqbaq8hgJvosOzE1gBFANL0Ik9DXiD/wi+BQ7G9C1FXnatI1trsiaSGx6h1vou9+RrTN4MXByYZwXJKOQ67gnAB9ZX5shXmazcs1OEFt/H6Tb3Hk8+z+zMC4wZCK+nTfYwihARriAZjRbHzNUbqkgvlbiYSkwqcXGKKb0d07/R+s9wZHtNdk1A/zHrm+HJd5v8rsCYKUAn8GoMh2jz3FRQD7QQDuVx2Iuc2cVTZntiT/WUeU22/1tj9D+3/uv6T/lvVJEFx3A9PzrxO2KMJNBi/mD/i1Ca2I/SgY8Sa792ZIUo7TShk+5jITpdLYRPUxQVohNYAFxgnDs83ZOBBchpxwIn0b2mqvP0E0A70JABXgutfSSgC/CLtX1dVfeh2i6EzQFZDXKctOE6RpSrQ/VFCYoobjSJir53CRcyCeA3lJ4ijLcx69EJ9DHT2tv64L3fsZcX4HyR8RoFfIRS3mG08ecCc4Fdjn4eMA6d5GMZ4DUTbf62GL0SVHQe6MPecmC4J6tAdVINchwXO/uw12+4jhEVkiEvnm2te8p6K1SHoQJrG92dJhrzYWBMATDCxlwZT7kb4grP59GCTgO2eH2PWutGxjKbP/TuqfIqQIVtHeEDcylKxxv6YWt5QFaFHGMVPd8tY3BDayk6UY2eTj4w3367Cxc5Uij1TCB8hewtXUVh+NRe+PoIfT08G0WMLfRcuOEk6wCXW4W1fnoZCK8Oe0bG9C+xNttfPFOC6xhtqMIe48gK0dUuyqF+xGhDxZ+PuJMcjQnl8aNmqwy4KYbvZXQvMhMo9H/myFqtLUHvE6EYeBE4C/iT7mG32NojGeDVjr4TnEnP4vIB4Gr7ne0vninBTSXvAJNQJf0KKi6no0X5ETgR+MZ081HR14A22keoXslHi1sfMwbgPlR/1AKbTHcIWuRKtNGjTXcocthdaDMiHATeA65CKWsTuqLOQgVbJ6olWp0xEc9qs/kHcrZ1A+AFutLWmP5a4Cd0AxgHfIei2mBFjBvsgeR1/hKSl4FDwL3ugALgCXTraEHhfj4Kv510D8uVKH+ujJk89Gm5rzERJgEvocVsN6INNm56P+2NAJ5DTtKMPlrNRSmuC3gmMGYBusa2mk71AHlFWIQOUjsqNGtRhGu0sQNFFeldVxeT/I4SevalwS2HHHLIIYccIvwFLBtoorfbNPMAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle unrelated + 1$" ], "text/plain": [ "unrelated + 1" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crazy = symbols('unrelated')\n", "\n", "crazy + 1" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "x = symbols(\"x\")\n", "expr = x + 1\n", "x = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What happens when I print expr now? Does it print 3?" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x + 1\n" ] } ], "source": [ "print(expr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do we get 3?" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABHNCSVQICAgIfAhkiAAAAOlJREFUOI3N0r1KQ0EQBeDPkEJQEIyg2AipLARBUlgINhY2Fj6Eb2CvjUWw1ldJEdIIVkIiIoJFqoCIf2AliiEWu4vhcpV7wcKBZYbZOcw5h+GPookOBnjDC3o4QG18cCID/EAXN3jAFNbRwF2sB3kbJ39gcoQRTstKWI3AdmpUCgJ3Yr5KjazGFPuYxoygbyOCtvD424b7SC29FuYLsiMO7+JWcHWtDBiW8I7rskDCIYwwR3FXYTHmYfZjGQs5gIrvAzhPzerYwDaOcYY+ngVzNlEXnN7Lo7KCE1ziCZ94xQUOMVtQ0n+LLxK6LQuL4DX5AAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle 3$" ], "text/plain": [ "3" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = symbols(\"x\")\n", "expr = x + 1\n", "expr.subs(x, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Equalities" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x + 1 == 4" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAAASCAYAAADfVhk+AAAABHNCSVQICAgIfAhkiAAAAihJREFUWIXt2E+ITWEYx/HPMFlYaJYU2UjZ+LdQirrExoY0G2VyxYKSLlFS6iZFspjJRklmYjaysLCQDQ1iYXEt5F9pskHIv5DCWLzn5nbmzJ1z7tx/k/utU+c+7/M+7+8+5z3P+3To8F/Ti7O4gy8Yw+WWKkqmT9A2ht0t1pKJkiD6K55ozwQvwCdB47gEz2iCgHy0cK6GuQewGHOwt36S6kYXLuIDziU5xBN8U0jG1oRAg9HYqbpKrM4tvIjWbUf2Yz124luSQzzBh/EHJzCzwn4GO3AeR+ouc3qyRNhsAxiZyKk79vsRLgnJ7BN27VEcxBXsaYDQRlNATwb/Eq5N4tMt5OmVkJ9MzMcPjGKf8HrewKysgSLyaq/BleTUdsiN+nfCp7kGU8Q8jt9YXWErytBFnKxY8B5mp5mkMX+mTE57dBGr8AunY/aihATHS0SZdxX3u/A95eL9xr+Oy7EZQ8IDqKSUMm67UC4Nz3EszYSuBNs2DOMt5grtx1RapLzQyqzD7SnEyQldxTC2Z5hXzxrcg48p4wygEN/Bm4Sd9lhoP0aELT+ApxlEthMFLMzgP2TiBP/EhQnGVmIF7uIZ7scd1gil4CXmRbZeoa5MdqpWI6+1h1yzKKpSg5fhOj5jI15H9qt4KNTQtcI3gWayJboI5Ypwcg9G9+9xqMmaMrMIb4TasjRhfIPwZB7UGD+v9h1cVL0LGa1RUyMomoYfezp06NBS/gJPGpj3SZRgYQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle x + 1 = 4$" ], "text/plain": [ "x + 1 = 4" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import Eq\n", "\n", "Eq(x + 1, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we want to ask whether $(x + 1)^2 = x^2 + 2x + 1$" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(x + 1)**2 == x**2 + 2*x + 1" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABHNCSVQICAgIfAhkiAAAAM5JREFUOI3N0rEyQ0EUxvEfJcMVWhoZ8Qpq75PnoDJ0Kl5BK0U67yAUiUYmpZGYoRDNuePOkXszYxS+5ps95/x3Z3c//lC7uMIz3jHCOVpNUBsTzHGDU/RjfY+dOvA2hrqpfhb1y0XQfjSHWE29DUwxw7o0cBzew2cCX3GHNRxl8DD8oeYaj+GdDBbhLzVgWd/K4DKthM8zWO5YWKzN6lwVHIR3asCD8B9v0Lb8O97Ed2T9KgDlqdXInfiO3EBD5GAP1xjjA0+4wHYT9I/1BRgnMa7SDNsAAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle 0$" ], "text/plain": [ "0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import simplify\n", "\n", "a = (x + 1)**2\n", "b = x**2 + 2*x + 1\n", "\n", "simplify(a-b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise \n", "Write a function that takes two expressions as input, and returns a tuple of two booleans. The first if they are equal symbolically, and the second if they are equal mathematically." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## More operations" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABsAAAASCAYAAACq26WdAAAABHNCSVQICAgIfAhkiAAAAaxJREFUOI3t1M2LTnEUB/CPCZkQjZeRjSyUzCMRhVjJhiwUfwcLKaUo5CXZsZCs7LBQikg0JUUhSWny1pTxPizkZWY8Fuc8ud3unXmmlI1Tt3P7nt/3fO+553cO/9CO4gb68Q2f8AD7MGsU3npcxAB+pL+GTcVDE0qkn7iPJ3iHqViNlXid7/0lzl4cwAdcTqHZWI6b2F33hVNq8ENo4lQJ3574dUyv4E2qExrNlhWStqwDz/EVc9pJMrFNsS3pHxWwtViICxjEZjTwHXdxp12xXZiGGaJf61LoSOHMqvRvRZ+XlnL0Yhvej1XJG/HbWs8VdJfOHM7YMPqwIT+wB1czdmssoaJ1Yyueitu4ohA7lglHRE+L1ilubRNrxiMIC8T8PC5gezJZXw3nTMZ3tICONsVeidnrETNEVAufaziD6TvHKwbz04+k7xX9WoTJFecb6V9WJVuMeRV4hz9DfbsUO5f4wRK+Eb9E1TOrxHZiSOzG0+K2ncWzTDiAJSXOXNGzpqj0OM6LiofEhqm0Bk7iodhzw/iCe9iPrhpeF07ghditH3FJ7NH/9vftN+vKaSNCTCM7AAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle 36$" ], "text/plain": [ "36" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = symbols(\"z\")\n", "expr = x**3 + 4*x*y - z\n", "expr.subs([(x, 2), (y, 4), (z, 0)])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIEAAAAYCAYAAADdyZ7bAAAABHNCSVQICAgIfAhkiAAAA9RJREFUaIHt2V1oXFUQwPFfP5AiFb+tgj4oFYpUI4IPguKmKorgR7Uv9sWVahEUEVFEUSyCtqJFbbCCDxpFH0oFBZX4gSDWSqHFVgoGRSUo1obGb/Fb48OcJdvtbnL27mY3D/cPFzbnzsydOXfOuTMnlJR0yD3YiZ9xAK9heV89Kuk5b+EG8eLPxCvYj2P66VRJf1mMf3FFvx0pyWd+l+0dkWx+32W7OTyCd/E1fk8+7MYDOLYP/hRhFYawTXxiJ/Fipu4SsQA3iXhvFDvz52I+fsIHWKP77/0gtoiJXzCbD2nBX9iBZ7FBTOZOMZHf4JQ++NQue4S/v2BUe0mwNskP4ub0ex9ewnoxLz+m8Zcxr5uO13gU32JpQf2qcLBSUH9Ri/GHkt3NBe32kkGcLl5QRXtJMIIJsQBXiE9y44o/EV8lu9e2MvR2ErimYXwehtO9DU30NmIcZ2Q63IyqzpKgFQPJ7jsN40Vj7RUV+UlwJP7Ecxmy9ya7Q60EBsR35RMHb+kbk+IzTXQ26TwBmL0kuC/Z3dgwXiTWXlKRnwSrk2xOQX5Xkn18OqHhJFRNf9cyZ4tDt5fNooBZIbaa2rU4w5lGqrqTBHdinQhyW7L5MY5vIjssP9ZeU5GfBFvxq9afxBoLsTfZvXQ6wZNFNTmGW5PCmzisiexki2tdhuONVHUnCfY3+DIiKudmtBNrr6nIS4JFopDcmmHzsWTzjRwH1puaxO04PEepDca0TqBm13CBZyzBSnwqquRzWsgVjXWsDf/bKfBqVDL1rkxyq2eQuy3JjWo4zFvYQuFA3e81+G2GB7TLEziqYexsXIXnxQTXs6fAM8ZFn/wRPsMLmh9pF431C/zRhj/72pBth5WiPZ5udd+CJ0X9c5GMc5zr8J9o9ybxdMdu5lE1O4UhcXYxieMaxvsVaw4VM+8EC0RbODKNzO3Jzl6ckPPgy0VW7RWF1Cj+xrIc5Q6pmr0kGE+2j64b62esOVTMnASDSWZti/t3p/u7HboAmnK+2Aq/xElpbFUy8mqOgQ6pKp4Ey0RX0sh8U4dF2+vG+x1rDhUzJ8GQaHObFb73J/1dZviHXq0mGMDr4nz5ErE9EseLu8S3+gLRcs1FLhMnlu+Lb/V3YmIuxGmiY7gpyc7lWK9OF1NJfZ6pwnhCtMD18h+Kna6e6/GgSJBtoihsZKzOrqVikn7AWU2ELxYZtSMjiE6oKr4TLMdTooCcwD/iJe8U7WptJcyVWFuxzvQdxlid7Llp7I4CdibxXte9L+k5D4uXeWq/HSnpH6OKtc4lJSUlJSUlJU35H65pQ6uzsDbWAAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle x^{2} + 3 x - \\frac{1}{2}$" ], "text/plain": [ " 2 1\n", "x + 3⋅x - ─\n", " 2" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import sympify\n", "\n", "str_expr = \"x**2 + 3*x - 1/2\"\n", "expr = sympify(str_expr)\n", "expr" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAUCAYAAAAZb7T/AAAABHNCSVQICAgIfAhkiAAAAkFJREFUSInt1U+IT1EUB/APg9gYIWPJlFIsRJZqxoIQjT8rC4Skpib5k1LKio0FZiPJSKz8W/mXjaJQNMpoShoTJWqSISSmsbhnmpnn/X7vGZTk1Ou+e77nz/fee+65/AOyDq24jffox9kq9qOwGffwAZ/QjhbUFOSqQx+OxXwKtuIynuEzenEHWzC6UqBHQfQDOkuQPhM2b3ASR/EkdBdiUZVkW9g1xnx7zF/hHA7hFN4VxWvErAAbCkg3Bd6FqUP0Y6Xd6semKqSvocfgiSzGSj/u6HS8iHhrq8SjBOmBXW7OweYG9rCCby2+oK2IRMi+iNdKlTopIdNj7MrBBnTzMSkHX4FxuFQy19cYv/FrpHtinJmD1Q/5n52Dr8ZH3CyRZww2xP/1IuMG1ctjfeDPMDmT5GJg/ViW8RsvXfTzJQjD4YhzpYxxEenRuBo2r3ECR9AhtaungS3J+K0K/foSHFrCttPwjRkxadKu7pJa5Wept1/HAtwN/3kZnzbpEtYW5G8O/ycG789vIV1JJkiL+CS1wAGpke7CtQL/HZH7Mab9TOIGIyc98HCczugbQ7+tiu/esGk3vP+XkgbFpCfm6BbirXTZ6jNYq/R011WItz9yPlClhrPPYlN8pDpaKvXc26Hrwe4h9velMugIknOwXKrZNbiRif8S3ViUw2WjdDJ90uJ6c2y6/Xh6DhhsVXlfd8Z+j/TqvQuiz3EcM3ISLowYO3OwMrn7cauC7x+Tg5E47zH6a6VTao3/5b/8SfkOlUuqGNDEKeIAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\frac{19}{2}$" ], "text/plain": [ "19/2" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr.subs(x, 2)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "expr = sqrt(8)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAbCAYAAAAH+20UAAAABHNCSVQICAgIfAhkiAAAAZ5JREFUWIXt1j1oFEEYxvGfMVolhZ4EC9sI6WwNqRSVCFYmaS20iAgSSBEIBCxEi1jFD7ARm1gJVgbsUohVwCKIKBbBwkIQExshH2ixU9xtsnezcUYR7g/DDjPvPM/77s7OLl3yciCzfj9+ZPZIyhgu/Osk6vAAh1MK9qQUK3EwtM2UojkTHsabjPrJuYtGatGcd7iBb6lFmxNu4Bpe4BN+YgOvcVW94gbxoWIumc8kfuELFhWP9AnWw/hz8ef2NE7m9jmDS3ZXeByfg9jlyIQf/yWfSmaD0P2msR7cxmgp9ijuJPRpIXa/bIXrdtPYeZzGeCn2IpYidWN8atOLVUXl5c/sKXzVWvhD+zt92vnU4l4QeVkxv4aR0D+EhUw+UdwMIu8Ve3MvFjAf+ufs74WJ8enIjSDyTvEGV3EWH0N/Hn2ZfNoyFURWMdAhthffMYRHGX0qmQkib3Escs0inuF6Zp9dzAWRFfX20kRYdyKzT8sn8AqeYkdxcG/sEb8WYsr045Xil7ITf+LTwi1F1e3acpv1RyKSTeHTpct/zW/Ik3njsPGUkQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle 2 \\sqrt{2}$" ], "text/plain": [ "2⋅√2" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 2.82842712474619$" ], "text/plain": [ "2.82842712474619" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr.evalf()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068$" ], "text/plain": [ "3.1415926535897932384626433832795028841971693993751058209749445923078164062862\n", "08998628034825342117068" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import pi\n", "\n", "pi.evalf(100)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 0.0874989834394464$" ], "text/plain": [ "0.0874989834394464" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import cos\n", "\n", "expr = cos(2*x)\n", "expr.evalf(subs={x: 2.4})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import Image \n", "Image(filename='figures/comic.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write a function that takes a symbolic expression (like pi), and determines the first place where 789 appears.\n", "Tip: Use the string representation of the number. Python starts counting at 0, but the decimal point offsets this" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solving an ODE" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACMAAAAVCAYAAADM+lfpAAAABHNCSVQICAgIfAhkiAAAAiZJREFUSIntlU9IVFEUxn8qmJOWKxdFrTLTRUl/CBRdJQQtrY0rC2lT1qJFkptcBA1pGzeBK3GTQVEgQcw2g/5RkJC4KGpRE9OiaNFQo9XifMPMXO+9T2ZWgR883r3nO+e875537r3wH2A7MA18AH4Df4ExcXNADmiuMvdh5RvZaMCCAh4C14AJoAs4AvwBLlUppIj7QBZoSXLslJBHHi4DfAdSNYo5qm+MJzmek+NZx96BVWWmRiFFLAMfgQYfeVIifE8nkNb4mCc2I27QsdcBs+LSDndV9uM+Mb1Yb+SAgsYTCmoAXgKr+Bu3G1gD3lK50pv6oK+aA+KmfGJQop/AG8feLCFLoUBKFTit+bjmd4B6j3+r+OehhPvlMOvYO2TPRMTsAvLYcTBKaRM0RmLywJcQOawkFx17D6VVxnCdUp89AbYm+H/CKg6sL98hvV879rzeTQnJv5aNR7BfHkOqLPc6PMa27zbHvhNb7WIk8ZBis/K9lSCkXv7vfGQd8ANYCXA5KldejhPYtbEEtGFnSAE7EkLokuh7PnKfyPlA8F3x7Y69D/sd74Edsp2S74OImDPyGfWRQyIvB4KL/PkyWzd2PWSBPY7/C/n3B/Ldxpp3t4+cVPBAILgR24bPNG/X/BtwwONfPNSeerhWrHFjlUvEFX3gYC1JgAvEq7YhNGGX20INOVLAZ6wHK+C9MSNYBV4BW7C7qlCFmL3AL+AG1m+bSMQ/jk6QTOyk7vsAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle f{\\left(x \\right)}$" ], "text/plain": [ "f(x)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import Function\n", "\n", "f, g = symbols('f g', cls=Function)\n", "f(x)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADcAAAAhCAYAAAB9VDPAAAAABHNCSVQICAgIfAhkiAAAA0ZJREFUWIXtmF1ozWEcxz/bam2GlZLImrL2cmFrNivyUixEXHhJy8VouWFcSF7mwpLaChdzo22l5WaIqCWakvISQ15WlkQoxlwMxTDMxe937H+enf95/s85Y6zzrdP5n9/r95zneX7P73cggTBUA10jTSIIkmPwKQLuDzeRP4FR/eVsyAMuA1+ATqAM+AwsGUlSw4Fc4APQAOQAy4EXwAAwySHOeOAI8Bz4pv67VHcc6AEy4uBZojGrXJwuAa2G7BjQ7Zi8TZOfBw4AtUABUAr8BLY7xouEs8prbBDjLCU0y5A3ARcckuZrnIsRdO3AeyDdIZ4fyjRPTRDjlcB3INWQ3wXqHJJu1qSbDHkusmpNDrFs6EKOTYrNcIWSGueRLVDZugCJVqttpFc+UK/Pi3z821W/ypAnAS2qqzd0+1RuLXZTkArZCEwnvJjk2ZyBOcjZ6gH69blWCaQAd5Cd4VdIioAfwCPCV+Kwcoi04uWqOxSAH+uBl0AvcAXYD3wi+N2YglwbDw15BvLFOi3+LUp2g36u0c8nfThkqr4jIL+4MEOTtRjyXJW3W/ynAn3IFVLNYGEy64AXfcAbd6ruqFRC2wz5bAZXwIY6Bs/qdWCMxf4VsiuA2NqvoJip7/cMeZ++pwWI8c7zXIVs82hI98T/Db/KFssrhKtIufdWXJBiNQBcsxCtUP9utT9qsU9W+6cWu7iRBHwEHvvoeghfFRPLkFatE5iI3GH9yDXihwLkRzjjQjSW+S1PE53w0Z9WfU4E3Vxk+z0DJqtsjdqfi5Jzo9pUuxBtZmiPaUOFJtpp0W8x5EVIS9aN3K9e3FafeT4xW5FikuVCtIPBLj4oDiqRch99KlKyb3lkOSrrBQoj+IQu6ZsRdJlIIYm2slHnt7XAVyDbY98APEHOhSv2KNniGHxNbCX6qlrntySkbWpW+x3AW4Zun6BI0/htMfqHkA68Rs6xL4LMb4uRqrUbqYalcRKbj/Sb8QyrBUjfOs3PwGV+u4Ec3KVxEPorCHUoxUgX/sDQlxD+Z9BCpKIlI3fVf4Eg81uoTFciVcllIh9R2Oa3bKQp3av2hUir41ud/jX4zW8TkA6l0bA/hb0/TCCBBBIYHfgFNIvyexn5aWAAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle \\frac{d}{d x} f{\\left(x \\right)}$" ], "text/plain": [ "d \n", "──(f(x))\n", "dx " ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(x).diff()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle f{\\left(x \\right)} - 2 \\frac{d}{d x} f{\\left(x \\right)} + \\frac{d^{2}}{d x^{2}} f{\\left(x \\right)} = \\sin{\\left(x \\right)}$" ], "text/plain": [ " 2 \n", " d d \n", "f(x) - 2⋅──(f(x)) + ───(f(x)) = sin(x)\n", " dx 2 \n", " dx " ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diffeq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))\n", "diffeq" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle f{\\left(x \\right)} = \\left(C_{1} + C_{2} x\\right) e^{x} + \\frac{\\cos{\\left(x \\right)}}{2}$" ], "text/plain": [ " x cos(x)\n", "f(x) = (C₁ + C₂⋅x)⋅ℯ + ──────\n", " 2 " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import dsolve\n", "\n", "dsolve(diffeq, f(x))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Finite Differences" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOAAAAAVCAYAAABfcuJLAAAABHNCSVQICAgIfAhkiAAABN5JREFUeJztm12IFlUYx3/ryrKr1YZlVnRRYOZe9GUfEGTM1ppQ9Kk3dbMTlkSZRBSWEK0hKeRFtRdBQb1FQeGahYWxV8FqlEhKCy1RxluQWyr2SVtpbRfP87KzszPvOe/MmY+N+cHLzJznnGeeM/+Z8zXzQkVFxf+O04AXgDrwNzAJbFDb68ARYH4hkc0erkCu25qiA6HSMy25a7lLT/gBsBkYAHqAK4F/gUfyCiQFq4FBYAT4FanPG5ZlFwH/IDctwBnAvcBO4GtgAvgF2IOIMifGz05gHDil9fCdUumZXs/ctFyKVO7DCNsw8DPQlXUQDjiI1OM3YIzWBFur+Xv1+H49Pgy8CWwBXkGuxSQwBLRF+Lla7RsT1cANlZ5u9MxNywf0RPeF0pcgreVLWQfgiF7gQuRCerQm2G7gGNCux9cDtzCzZTwb+E59r4rxNQZ8G/DVCr769hKUbVAmPX2S16cMeqbR0sgqPXHUbymwVfdviCk/rPY7Q+ltQE1tW10HbYmHvWDdwF/Aq5a+N6rvwRj7U2pfaekviE/yG7aMevqkb1CgOD1naBk390jCOLAJOAqc1P1NyHzhK6APGUd/ElP+MaRF3cz0FmIb0A+8DDzuMN6suBnoAN6xzH9Ctydj7Ht1uyJNUAmo9BRc6pm5lu3AH8DnofT5GtCooXwNaSF8PW60Jm/jtrFoFQ/7FnM78DvQaZF3LnJNmvVw3WrfZ+EvjE+6HqNsevrk3wO61DONllZcrCeohdKXaPqwofx5yIpSHVjH1OS/w2WQCfCwE6wTmeRvt/S7janVxWZMAD9Y+gzik+6GLZuePvk+gFno2VTLOvHj/qhfuAL9mr4+lH4NUy2fiS0B/3uBeRZlXMTeDM+yzK2a724Ln+s17xiwwJD3e+KHqA3qtFb/mkWMs0nPmqVfKFbPaVrODRkPAX9anKzB4dDxMt0eCKVP6NamGz8a2F+DDIFsSBu7C+5AXlSberQHgeeBL5BFjOOG/F1MXcM4ngNOD6VdBtwGvIbc0EEOGvxBsXpmUZ9WyUJPGy0TM4JMvE8NpZ+LtA57DOXv0vLjmv9F1wEmxMPcYrYjS9W7Db4eVl+jwFkW556DXJNDFnnD+KQbspVNT5/8hqBZ6JlGSyNtyBcGX8bYjjC9NQxzE9LajAILka78BLLkXTQeZsF6Nc/aJnk2aJ4DwJmW5+7RMjss8wfxSX7DllFPn/wewCz0TKOlkYvU+Vsx9iG1L46wXYsMTb4BztG01Zr/XbdhJsLDLNggsiy/KMb+pPrYj3nOF+QeLbeuhTINfJLfsGXU0ye/BzALPWdoGZ4DpqExX/gsxr4Debm7Evl+rsGlwPvIt3QrkOEKiMD7kTH/cmQ4lCe36w/kCweQxYea7h8DHg3l/xj4McJXP/A0IugIMxc1QOY0tYj0G7Xce7aBO6LS072emWr5LPJ098XYO5Dl108DaYs17Sfgkogyfeoz7mVvlgzQfNWtHsh7labFfZRs8jUJfBRRrhuZsCftNXyS9xhl1NMneX0GKFbPtFo64QkkuMuLDCIDnkHqdYFjvw+p3+WO/bqi0tOeUmjZiXyMuqvIIDJgDPfL4F3Iq5Ihx35dUulpR6m0vA75KLX6A2dzepChzvnFhmGk0tPMbNGyoqKioqIiJ/4D1x5Tq2oxblsAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle - f{\\left(x - \\frac{1}{2} \\right)} + f{\\left(x + \\frac{1}{2} \\right)}$" ], "text/plain": [ "-f(x - 1/2) + f(x + 1/2)" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "f = Function('f')\n", "dfdx = f(x).diff(x)\n", "dfdx.as_finite_difference()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAANsAAAAlCAYAAADLG5wpAAAABHNCSVQICAgIfAhkiAAABPhJREFUeJztnEmIHUUYgL9JBM2CS6LigBJwARFnCczBuEAcgsaDKGoOgpoWchCMF4lgzMHxZgiCCcEFEdoFNEFxO+joRSTGgwYjiFGTyGiME424YUATNR7+flDTr997Vd3V+/9Bw3R1V/X/f/Ompqq7X4GiKI1mHfAN8A/wJHAW8CNwkUMbrwD3+w/NGR+5xNkMvJ09tMzUzXEVvBXibCPwMfAHcBR4C7g84bxLEWm3AsPAImAL8Jzj9UaBX4AzUsbrA1+5xJkGHs3Yhg/q5rgK3gpxNg3cjfyBjQCvAUeAJbHzHgD2GPsLgd+Aa1Jccw9wb4p6vvCZi8kR4PaUdUNgKuP1TerkOK23kJo7Wwz8C9xolH0NnDS2V4E1SE8wFKu/BvgbWGaUbQX2A+dE+w8DH/oO3BKXXFw4L2rvNuAd4BhwEJi0rB9i/8FpkuMs3kJq7mwYSf4qo+xc4CtgEyLndCTQ9xLqDwGfAM9E+xvoHqevBo4DC3wGbolLLi7cgHj7AFgFXAy8CXxqWT/E/oPTJMdZvIXU3NkOJNH5RtlpwAlgpVH2Br3nONdF5z+IzAUnYsdHEcFZbkakxTUXWzYCvyOdVYe1wPeW9UPchkRNcZzFW0iNnW0BZpHexWQiCuJMo2waeLpPW7uRCfLqhGOXRO0l3YjJG5dcppg7HEraVkbn7gBeiNV/BHi/RxwPAX8a2wmkVzXLBs0hm+DYxVspzk4Z0GAaHgPuAK4FDsSOjQPfIhPcDj8jt3KTmATGgHnATwnHOzdfjqYNNgMuuWwHXh7Q3ndGu1tjx5bTezj0FLDT2N8MHAa2GWWH+1y3KY5dvDXC2TZk/HpZj+PbgddjZRuAzxPOHUMkr43qJD0/WUd/KXnikostC5GbSiti5YeAuyzbCLEfEjXFcVZvITVz9gQyfp1EJrOdbbFxzi66kxpBRJ1tlC1Dgt0U7Y8C/9H9r/154NmMcQfMHcbZYpuLCyui+ouMsqVIfCOWbYQJcSXRJMdZvYUJ10miSGd96TUXmYqODyF/jDcn1N0NrI9+XgLso3tcvhOR32FB1N4VGeMOcP8g2Obiyj3Al7GyVcBf2A/5QwZ/cJrmOKu3kOo5y43rkWcq8wedaLAeeNfDtQPS9bq9SJNLVVHH7vR0Nq/gQHoxjYzPz3eocxy4L59wMpEml6qijt2pqrNKEOC311W6CVDHXcww+HmQub1YSpTpmcEtv7CMIGvODOo4kfjk8SAyqbTlB4+xFMHjzH1ACvJ85ibkrYSZ2LG9BcTUNNRxzrj0ZHlvrgS4D3HKzrHszZUAdXzS1xskWd5yryNty7cMGue4KncjO1yAvMv2BfAZcEup0VQbdeWPVrocRl6HAfl6xSHkVZw8CXAf4lSBMlylJaDajgtxWfR/tkFrRMwiPQvIC56/kv7Vp7qjrvzRSpcua0RMIK/HNG7sbom68kcrXdquEbEUGT9fmW84lUZd+aN1Lm3XiDgV+Wr7nYVGVy3UlT9a6dJmjYgh4CX8rnRUR9SVP1rp0maNiKuR7wftNTbb73E1CXXlj8q4zGNZhF6MIz3KrFF2IXOXTthF9Z79lYG68kdlXBb5yxoHPoqV9Vtbo82oK3+0zqWPtTXagrryRytd+lhboy2oK39UymVRw8gxZHnmY0bZcmQZ530FxVAX1JU/1KWiKIqiKIqiKIqiKEqV+B/Wpr5kXx0mZgAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle - \\frac{2 f{\\left(x \\right)}}{h^{2}} + \\frac{f{\\left(- h + x \\right)}}{h^{2}} + \\frac{f{\\left(h + x \\right)}}{h^{2}}$" ], "text/plain": [ " 2⋅f(x) f(-h + x) f(h + x)\n", "- ────── + ───────── + ────────\n", " 2 2 2 \n", " h h h " ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sympy import Symbol\n", "\n", "d2fdx2 = f(x).diff(x, 2)\n", "h = Symbol('h')\n", "d2fdx2.as_finite_difference(h)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have seen some relevant features of vanilla SymPy, let's move on to Devito, which could be seen as SymPy finite differences on steroids!" ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }