{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Sympy"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%config InlineBackend.figure_format = 'svg'\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us import everything from sympy. We will also enable pretty printing."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from sympy import *\n",
"init_printing()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We must define symbols which will be treated symbolically"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"sympy.core.symbol.Symbol"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = symbols('x')\n",
"type(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us define an expression"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x*sin(pi*x) + tan(pi*x)\n"
]
}
],
"source": [
"f = x*sin(pi*x) + tan(pi*x)\n",
"print(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Differentiation**. We can perform symbolic differentiation."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle \\pi x \\cos{\\left(\\pi x \\right)} + \\pi \\left(\\tan^{2}{\\left(\\pi x \\right)} + 1\\right) + \\sin{\\left(\\pi x \\right)}$"
],
"text/plain": [
" ⎛ 2 ⎞ \n",
"π⋅x⋅cos(π⋅x) + π⋅⎝tan (π⋅x) + 1⎠ + sin(π⋅x)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff(f,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compute second derivative"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle \\pi \\left(- \\pi x \\sin{\\left(\\pi x \\right)} + 2 \\pi \\left(\\tan^{2}{\\left(\\pi x \\right)} + 1\\right) \\tan{\\left(\\pi x \\right)} + 2 \\cos{\\left(\\pi x \\right)}\\right)$"
],
"text/plain": [
" ⎛ ⎛ 2 ⎞ ⎞\n",
"π⋅⎝-π⋅x⋅sin(π⋅x) + 2⋅π⋅⎝tan (π⋅x) + 1⎠⋅tan(π⋅x) + 2⋅cos(π⋅x)⎠"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diff(f,x,2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Product of two functions**. Define a more complicated expression as product of two expressions\n",
"\n",
"$$\n",
"h(x) = f(x) g(x)\n",
"$$\n",
"\n",
"and differentiate it"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle \\left(x \\sin{\\left(\\pi x \\right)} + \\tan{\\left(\\pi x \\right)}\\right) e^{x} + \\left(\\pi x \\cos{\\left(\\pi x \\right)} + \\pi \\left(\\tan^{2}{\\left(\\pi x \\right)} + 1\\right) + \\sin{\\left(\\pi x \\right)}\\right) e^{x}$"
],
"text/plain": [
" x ⎛ ⎛ 2 ⎞ ⎞ x\n",
"(x⋅sin(π⋅x) + tan(π⋅x))⋅ℯ + ⎝π⋅x⋅cos(π⋅x) + π⋅⎝tan (π⋅x) + 1⎠ + sin(π⋅x)⎠⋅ℯ "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = exp(x)\n",
"h = f*g\n",
"diff(h,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Function composition**. Composition of two functions\n",
"\n",
"$$\n",
"h(x) = (f \\circ g)(x) = f(g(x))\n",
"$$\n",
"\n",
"Apply this to the case $f(x) = \\sin(x)$, $g(x) = \\cos(x)$."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h = sin(cos(x))\n"
]
},
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle - \\sin{\\left(x \\right)} \\cos{\\left(\\cos{\\left(x \\right)} \\right)}$"
],
"text/plain": [
"-sin(x)⋅cos(cos(x))"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = cos(x)\n",
"h = sin(g)\n",
"print('h =',h)\n",
"diff(h,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the two functions $f,g$ have already been defined and we want to compose, then we can use substitution,"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"h = sin(cos(x))\n"
]
},
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle - \\sin{\\left(x \\right)} \\cos{\\left(\\cos{\\left(x \\right)} \\right)}$"
],
"text/plain": [
"-sin(x)⋅cos(cos(x))"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = sin(x)\n",
"g = cos(x)\n",
"h = f.subs({'x':g})\n",
"print('h =',h)\n",
"diff(h,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Integration**. We can also compute indefinite integrals"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sin(x)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAVCAYAAADsFggUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADaElEQVRYCd2X7VEbMRCGDUMBTqggpoOEVAB0AKYCoIMw/LL/ZaADSAnQAaECEjoIHcS4A/I8QrrRffhIzHkyczuzJ2m1WmlfrVa6wfPz86DPPJlMRsv61zR2fdBjmk6nX3Dv4xtcHEUbhYneAoaj+3i5SXlTePuPFcZ+dwjlcRq6Zrj2jXBwiE93lJ+68A07P7GzQznva4Sd4+BlF2BFG9rS5qCvEfZENLyLznZSYO8JQx96F2E4Zu567ASlshFtjjfKsm5aLNocYgjPM4v3yIsEnOn8ijpblNfIQ6JVRt0bbhfWjjalQ+RtuWkPncJGGJF9GKudlMQ/Uz+CR/AhLJXW+SIKX23udQ4YC3Jyk+QR9QAQpU4LxiP8AAvENbynjDIQ9Vv74AtYx84pBaAg2idFo7myjbgtf2kz2KD02fENFqRTOOWqYmOzKdzY3VUcSYEQmHzSFB3zuAB1btApwIryU0odElAd36aexkaVVjDUUX+WlPMSW0ZWSN5R7no8wlex/Z4y74/iUGhztBEXdEejurBcuVo/YNxDVRht6exF3odc8FK02W8U3uc61rUJW/XYueMu0gTucbiFBblkG1mVdFogmugH4/NN8mg7Z9CnPGgaFGWOGwqYym05ocVGrUsgpN8vReM36SxyykGCKrmuM9gocOeNviv4tWOJap0YV93kMVpf65qNkrAR641dywvT7pnAF1HSGS5SQO6RDsBSGmlb8BpygTqmngBtMmFUttkOY7BhXlWvSB3IhnJQqH+UzzoFjMnmGHUXzT81on8ftl+9UjJXmT6dkMxxgpJuM2X2m2t0sNG+OpAbkqI4CPwwVjC8VNIcgj+nnTZQtTParq2JjLDHTgGLs5gH/GmtOuuRSkdih/oYnWqkqOMNmZ4FOuDO5mQ79efyVHcOnwtVEih5Fm3OcgVk9tXyaqYT8t1KXvpxQem2Se+s0q2IjlHgrZh21PYl8gBGdMAozPPhJm2jZCFg9LkJPmFKaYG2QLumsB7aboy50Tl8BglkcTxpl4g+x52sBLDSTP+hEZ1rvMmXWQ723Ew3amsVR3KZNXU9xkha6iZdsJDwPrSvl4ARCV4O5lEj400UbWgrPG57CVhEyMun7Rfpb4HURhGtvcxhCYkYHT5lXvs7SENKJeP81yxdVn8A2nkm2OycCy0AAAAASUVORK5CYII=",
"text/latex": [
"$\\displaystyle - \\cos{\\left(x \\right)}$"
],
"text/plain": [
"-cos(x)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(f)\n",
"integrate(f,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can get definite integrals."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAVCAYAAADGpvm7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADLUlEQVRYCe2Y0VEbMRCGzxkKcJIO7A4CVADuAEgFwR2E4cl+hQ6AEqADQgUM7gB3EOIOnP+TJc2dTjqf75yJB25n1pJ2V+vTr9Vq77Llcpl1nMZgMpkMNsUnNudT1lESgel0+lPKb0mDtGJg53qLHrvlSEqc3ov31V84+Udstf4TrftQ7UVs/euwkp5NWqi9ZX5PYd5Xeyd+Ex+IAfuzDD4s0Fo7mDyp3VfrycprYyX7F00+UrvY40eDU7yp3/SoMP090ZUWcxMuqAFW+MDXuMvRIZqr8ZlANUc+rq4ntT7w1e+ADjATKOTmeSBuM8TX2V4bD/9qLhEg3xw50pqjZ8kf3CBn82plQ7X3kv/K2XDfHIvxg0/ou2wKuXcl9r8j9bwPL23ewddo54AWCAM9GJfID/UNsGoBCxDn4pnYVUcjZNIZUv8RnfhabDZLLcB50njsB/EOBUEpP8dNa0kJhONdTB2UlwDqo1djF41EJoTNg2w8yEaaZZRiV5KzEQB2oL6ba03Wgog9Fdi2CF+DVhFtF/EkR+Fiqh7yVPNmMQPrD5Cu83rJAd1FN3qi/jlvQx+/Yrqkhwsxi/yjluP7KGZzCr4lC+mLBG5DQ12TMcHQbws0D1SV7zZ9MACEfq+a6K+zqQKDzYB4tksxFxw5n2i/Fa9LHzLdGpmN27XU4VIBF1uKnE3VKSL1mA1RS2QPxT05BOBz9d1GxP6DU1DlOzanSoavt50CWgAQpaQV8muJpD8Ro8eucMlhLB2XJkQOB8xzBo6kpzYmBUX9Wzs20p0aK2rVENHzEOiv1iXK/0W8pfJRJgSJow/I0JGYF4EwMrGh4nDl2aX6YXQydnp1S8R/HJakZUFdrEhfM/NRSQ9DBEBEBA/Cn7GzlEut35DkZyOy4AAa5OrkQpUhG6KOKoPohhjfSG5AVMtaiPp8vgcc1pQEWjo2j1Iymr4k3wgr2fP848LXOwk6EgIWnGR1VBck+WHz2dhhmDrq+njvdpymbVQmpq4HrA7oSMgoAkmX3BNEZCOyc/FhUm8HdBpGLuU2r+LM9aeiy9FpoDMblZSU694mC15kz3f9wuX9F2NSOAIx4Go7AAAAAElFTkSuQmCC",
"text/latex": [
"$\\displaystyle 1 - \\cos{\\left(1 \\right)}$"
],
"text/plain": [
"1 - cos(1)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"integrate(f,(x,0,1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Taylor expansion**. Compute Taylor expansion of $f(x)$ around $x=0$"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sin(x)\n"
]
},
{
"data": {
"image/png": "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",
"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": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(f)\n",
"series(f,x,0,8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Compute Taylor expansion of $h(x)$ around $x=0$"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"sin(cos(x))\n"
]
},
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle \\sin{\\left(1 \\right)} - \\frac{x^{2} \\cos{\\left(1 \\right)}}{2} + x^{4} \\left(- \\frac{\\sin{\\left(1 \\right)}}{8} + \\frac{\\cos{\\left(1 \\right)}}{24}\\right) + x^{6} \\left(\\frac{7 \\cos{\\left(1 \\right)}}{360} + \\frac{\\sin{\\left(1 \\right)}}{48}\\right) + O\\left(x^{8}\\right)$"
],
"text/plain": [
" 2 \n",
" x ⋅cos(1) 4 ⎛ sin(1) cos(1)⎞ 6 ⎛7⋅cos(1) sin(1)⎞ ⎛ 8⎞\n",
"sin(1) - ───────── + x ⋅⎜- ────── + ──────⎟ + x ⋅⎜──────── + ──────⎟ + O⎝x ⎠\n",
" 2 ⎝ 8 24 ⎠ ⎝ 360 48 ⎠ "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(h)\n",
"series(h,x,0,8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Expression is not a function"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"p = (x + 1)/(x**2 + 2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We cannot evaluate `p` at a numerical value. To do that, we can substitute the symbol `x` with a numerical value."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAArCAYAAACuAHIQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABt0lEQVQ4Ee2U31HCQBDGE8cCwBKgAwY6gA6kBehAx6fkFTuILUgHUILYAZagdBC/33G7XhLCg2/OuDOb3fv2u73N/dm8rusMKctyJPMYBlk2lf1kLPw9YlkOORIr2YUF5G/kP0gX8vfgN3wkBNbBix8RWOUkfTXcyHMBRxEGFoiWjAPhlOiZAT8EkumSnJNQc58WRXGUKnzmWBmdbFplIpDlbYe8jA5ZAD+21aRnD9oSqdXSlXSXYvidMpRppUx3sr7nlrlBFuFegbHs0gjyRyhjJwvgh2ay/kNxAgk4+sZx7zQOx0ogkbkSjBnfRhAiS1FvW5oXqR3tG3vNfYQU/yf/ejdyXkI6+5ofWsE1Qhr7i4di9znTBec+WwujqTDeCPcHYY2RIAEjM5nnRDtYyt/K+hvkhawiARyxjE/n4Q+Zp0OfQ4NoovuGhZoVIMvQQGyySmX4xUMRkRYcerb8FyP7bgAoQO+AOJNS2pvUpfduaGJnN3rJpNOELxm2dSj/FGqWM0EhtMTKoDTf54P8gyaQpVfsB9nTPUu1mNM4Dgdk5HbnzDSRH2SltSXxHxRAXd6X5Xcu0jcTDtslOy9vbQAAAABJRU5ErkJggg==",
"text/latex": [
"$\\displaystyle \\frac{2}{3}$"
],
"text/plain": [
"2/3"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.subs({'x':1})"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAKsAAAAPCAYAAACbZT/hAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADCElEQVRoBe2a0VEbMRCGzwwFQDoI6YCQChI6IEkFJB2ER/uNIR0kHSRQAh0wuIPQQYAOnP8T2hv5rOP8ouzMDjsjVlr90mp9v1fS4dlqtepe5OUT8PwEFovFgfx/UPmt+uPYWmYlWQW8yMC/0m9ULmS7GxtcsxdzWPcv2ZbWMO2Fw38k3xHi0fM4URyXxDIij8Ls71qnGreqn0tfYZPek7qVPlaZJKwwfDtweKb6tXQnTZsC8ZN44XAeyXeweN4pHjhT4xkZ94x4E1n1EL+oviediEqH6rCZ9g+VY2wTAinJoomoGQvhhwvwwrGkSL5DxSPebHBMNhJgJ514aZn1o2wbW7VsNyrfBIbIo2cJ9ZHGD1Xeq/Qi+9oCvHAsKJLvgPHAs5pwDIWbSXayJtXe53qpLCvS/5x8VSeZeJTQebAXDveRfIeKR7zpd/TMk0427k/n1kbvyshWPSWvJgBH6r/TXGTXzyp2QbuUrTwWeOFYfiTfEeMhpiTiDNv/oXQ6q2ZzxzHAiPhcVpwitPUflQ5Uf1A5VbFvjheOeCP5jhgPMZmQVe3NlNm62Xw+h8V/VL6XRAOhNpmStwQbffQjwkCCh1yfoU3Ux+Xsk8rrbPvvOK2B44nLGlv4bjHnts+mhW/mzP6TUhs+8hZqv7RT58xaO6sazrIu2/qU2Pm2xEF0iMIWbOKFw38k3xHjISbuFrXn1O0UzIZUQzFbdTDgYvzaN2Qw0YEXznONLXy3mHPbZ9PCN3MO5ETtagIlsyJcgki/Q7HMWl6Shhja9Buxa/1Gdi+c5xpb+G4x57bPpoVv5iTxwSF4WE18RlZelpdbtZpJ3urvsvjmZfOG4mxaIzvjOTMa2b1wLDiS74jxEJNxcDyzikw/BbyXJgUnUR2Wczk6fbI8MV/2lQpn0V7U5rZ/Ld3f4FSvjXfBsVCvNbbw3WLObT+fFr6ZMwucQaqZtf8hSyYXZAPIhYr/1/JbgaV0L2rz5gBichBeE9kYbw45QmyMZ4AXLprvaPGIF+zOJMLydSdhJvkHuSlvbR+xXkUAAAAASUVORK5CYII=",
"text/latex": [
"$\\displaystyle 0.666666666666667$"
],
"text/plain": [
"0.666666666666667"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.subs({'x':1.0})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result depends on whether we substitute with an integer or a float. You can substitute with a rational number like this"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAArCAYAAACuAHIQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABVUlEQVQ4Ee2VzVHDQAxGMUMBmdCB0wE/HSQdQAvQATnaV+ggUAJ0YGqgg6QEhg7Me461bDCGWw6AZjTSSt9qZa1WLtq2PciprusT1o/wKfpb7jtygXGCeIBf4TO4hAcUYCNc6mXjDcLoAzocWL4x/IPz4uy3Gsf90dM8BfUiGolrtnmkOWyvvMAbuMF3j/wAu/iJ9vuBo9n8+jSKqqp2Z8FoLf7ADXbjywLQsyVi2RfDeefcW2K3rzvqmr8HrpCLcKDfojv3FujP2qORdFxrCALgKQ7MeEEJ7FNaA/A55WTECXZTTGCNG4xG+oq2QXywY0wrrG2H8EfOg2ic4kDPK5TSGIAx+GFPbLpLzjgilxy9gpvcpj5Ig0hXRJoiU80j8g4YwAWOGbL7GQlCL2X1BMbgB50j48r1Swbw6rfjq9/ZsO6uVUdGc/wz19FIAj3KfD9TaqR3ASGhkognHoYAAAAASUVORK5CYII=",
"text/latex": [
"$\\displaystyle \\frac{1}{2}$"
],
"text/plain": [
"1/2"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p.subs({'x':1//2})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For how to make python functions out of expressions, see below."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compute roots\n",
"\n",
"Let us find roots of quadratic equation\n",
"\n",
"$$\n",
"a x^2 + b x + c = 0\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAA/CAYAAABtqviFAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAPIUlEQVR4Ae2d7bXUthaGh7MoAEgFFzrgowIOHQCpAOgAVv7xjxU6ACogoQOSCoB0kNwKwqWDc9/HY3nZHnv8MZZteV6t5bEsy/p4tOXtLcuaa1dXV7su9/r169uK87u2f+R/0hXf503ABEzABEwgBQLSaSjB99peyf/jWJkvjp3knBJ4rt3f2r5re6bNzgRMwARMwAS2QuCRKvJU23+l7+4eq9S1YxamLn6pi3/V9l7+F8cS8jkTMAETMAETSJGA9NsNlfubNkZT7+j4n6Z6tFqYuuBSF6As/7KybELnMBMwARMwgS0QkI5jKDa8bvzcVqdWC1MJMAyLtr0n/19tCTh8egLizbAATzt2MxAQ72szZOMsEiHg/jdvQ62p/6ksGImMrPI+822dxPV6AMeKyA0bZYl1aWUJlHkdjeYHlXmZOzcTCATc/wKJ89u/UZVRmL9o66cwFfFnbbiP+51/5yKQP6zw0OIHlQmgiyPvJhB+HA+BuGcKPzobbh/Nv+dGQHKRTfpw/5um5VPrf9wXtPH+8rb2bJV3mY0WJpFzXJXI0yB0Kh0EuLnzhGs3DYFfJfTFhDX53ylZhrvvTJO8U9kYAfe/aRs0xf6XKUxh4OGpogPbFOa0yE5MTTc5rAS+A72v7buON3mzU714UOGp5g/toziljRC80L5QIlEymiFR1aGPXDxXvN+1BaY8jBB2V5ut+B7tJE59OPdIad1RVE/3vwFN1FMuUux/raNPFwP4LBZVDYOZzLcyaPtw41usPBEzfqW02WI6HjxuxcxgrrR7ygUPBl/nKtMW8+nJeQtVd/8b0Io95WJT/S8JC7PUhlhHb0rHm/FK+HiKv699NMtPafMye1VOZbpUgbCqWWljrGuVi4Z04cuKVbYuh9Nu5Tw8qXVdIXlw/xvfJK1ysbX+l4SFSTsKPDdW3FYtTIYKoz0MiB9CzVBD63CDzi3huFGxjXJD5CJn8FgZ3RuV2RlfNIRzopjc/0Y03BC52EL/S0Zhqi2zIVlBX9sNf4SYVS9RnVAYl9p/qp6Z9OhnpX+KFTdpYSZMrJdcqO63lSc3RT7X2ZwMTcizLalenNsuXnO45MH9b3wD9ZKLrfS/lIZksTD5LjQMKz7Q8Ucdx1Qy48Vo2JVRZ+blzJgdetSVhJp3xf9qg+1jhR98j0RCCkcBEQ+HEvqqsLmHOjvlQmVCWfIhMp17lx+zr8yA45xdK4FOzq1Xrv+E+9/4NuqUi7y/baL/JWFhCjhPgAwpcuNjXVtu4M+0MfuRsNU6lQ+Fg1Adc8SJYv3lfMK3Ra1lyMvI5xYINhuMUbJMC4d/4XTMO0dWgvpCPDb5GeZEgc7mlG+nXCgO8kE93snPzFjkiMkd37XZ9SDQh3OPZBaJorK7/0Ui30cuFGdT/e8iEsupkw0K56EaAEtml+/x805qlU5lxBr+oK1VkeRxOq2/EyrIJyRHlbHOo3iYPYuiLFtd+JkgkzEvlYG1Fj8pvGzdP1VY6xqMpWun9PaRCx4CiMc+bM8b6jRlubaWVh/Oq6uz2tj9L26r9JGLTfW/63F5TpY6Q2kMx9Zv3Nzof5oslwkTUlmxZFBUlO8lx9qahitRaI3flSqc+v2pjX1f9yTkoz1/zdZHGaPQbyh+XbHSIcpKcac4pMdTY2WCksJvKqzV5deFDlaOd4sDnW+aHUybhwWRy9cEf6dc6Pqj5QoJeX+UQCfno1cvcFLt7v5X4i4e9Fv3vxKTMd5UFGbTjTs0/pcxFY99jQQ0U47ao1h40v1FW+Xmr3NHFZrO84AwakanrkWpoQTLFqOCGh3WYWX2sa5DSZNG3WrM4uZla0ysKVDxmxTiTuGMEDDE2/ietCmtUlhyclEqe0re5DhLntz/ShImHu5/JR5jvdfHXjjzddy464oxKJ/KjX7mcnVmJ0Hl/SGWG8OAKIayAuNd2iiF2JnxXtk9UH4MtZYdT96Ug3DKgkJHOTYpxp3iFXzlJ15TXAUv4pKVi0Vojc80Wc6SWfe/8e3edWWyctFVsbbzqShMyl8omvzGjaXDcOaPtsqtKJwhT6xJFGT2pKdyY1nxHjBK+ZUuiq5QdvJnTuH/k+cP7bMHDu1RgLiC7/4w+4wnPKVTVoZHeZ/J6cYy69yltoM8uSCiK8qtvKlLSnIREcvkSafM2f1vcnEoEkxZLopK9PVc9I24cDzeo90vlQHr6DfdIOvv3EpR1uNVOREqFAlWZlBQDNFi3c3tyD+UYafy/NAxZeNpMXMKQ0FiiX7dh+weKSx0DJgH6z4/nb2D5Kb0vQiYx5O0XMyDaJJckuacy6773ySiUEkkabmo1KTnQSoWJp+QfJDgMzmGmz2fkyShLEvtgEK51IbSRPnwzSLKahanvMJkHfLDEuShI/ssRHsUIHxfas8kpY/amOjBJyWEcW3mdIxVTzj14dMSHG3yRmGz1SfLdf9pUepykVdl1Tv3vxObR33D/e9Ehmu4/NrV1dVBOdS43EyxMphxyVOE3QQExJIp1lhyKEzYBqttgtTTTEIMkLOxk35WX2nVD0ud/uQVhhZuLfe/wwZw/2tk0qr/2ixMLAa76QkwBEtj8C7w7JVljherdG7LNM86zk5tS//5oI0hal4lFMPd8tstR8D975C9+98hk9aQNoV5K78im/TRerVPDCKgGymTfGDK5B87ERCPuScJReeuOnETCpOqGNLGyrTrSUD8eHXBqMOkr12UnvtfrQ3ExP2vxkSHwZg5eNBtU5h0cKZjhwsPk3TIKAJiGuszklHl8UUmsEICWOhskzv3v8mRbjHBL3mlmMdR+T78ol5bCRRPd7jNPXnsq+VfEzABEzABE2gmIB3IvB1GiYIuLCIeKEydYfYjjplxdiZgAjkBdaS/tRUzhg3GBExgPgIz97/skz/lySuVwlUUpk7ycT3DsaksCFBUxB4TiElAfYMhQt5pMInHzgRMYEYCc/c/5cdQLJYmn9DR7zNXKEwFMr2fp2f+sWLSl+37rPxrAukSUJ9giOam9n4HnW4zuuSJElii/ylPJu4xSfOz/JnSzCb96IBhWKzLwd9d6lqevEf/o4auXcylXPbFoJ1xxpIXlOaqXMoyrLLzgH7wnkhh2Sx9nX/RALvrH2waLnHQFggs0f+UJ99Pox+/af8kU5g6QFmy1NzgRQp0DTeRk566lcbh6glK9FSndK8dS2OKsjelH6s+TXk57HQCXXJyeg7xUphChmPJaxdXnW9SiDuFn7SYha6Pcj+J14rnnbLa6+h9egV0eLBDJguF+R8d/KmCsxLN7CvQJABMWPq7rdWnf80dM0UCW5PXrdUnRZnaSpklSyhKFpt5K/+r7B2mPHxzGaxETE+GWe1MwAQiE3BfiwzYyZvASALqmxVlSTJhSDYk+VAe/v6Jd5JBgYZz3pvA2RLIFRt9g3doQ/rGTzk03stV3oGGNLUfmubZtoMrfp4EQl9R7Yf2ldb+d4yk8mOSD5Yl+RUrsxWzZLlYJ+jQTKe9Kz/a1c4ETEAE8r7Byldf+wBRfP5Rhw7H/ABcdqywcLyTn/5Gmjfk96gOlOxMoIFAqa9M1v8asikHhe+tK39lePBvJSoYmpW/bWKBcP5Oy84ETCAiAfUzHk75U++KBRoxy1UnnfPY7D/YrBq+C7eT/AUdeGDN1odkiYyipOMisDz5ztaJlRcFDebvffn5twe+C/Ui8AIR05l9TLqdaT8Q/8Ez1DtTHRhhRTLAPWe2+85ATFGir4h9lPolliiL9+AOloc9UJj7eNmw06X8KK2Di/I4k+5ygXmnPQveZk7+8P3LI/lnKUfI+5z2Zr9ca4v9DeX+73Il2Oe8Jhk4t76+JvZLy+FK8g86iJHWiqu8wyydCU93dOa5HMqx8l2WBAlrk7LwLsguHgGzj8e2K+XnkvPKPyJ0XRDpvGUgEtgeyZp9D0gzRskWzlB+jHBWXJvCrESa6QCLlsWt60oay5KhYYZr7eIQMPs4XDtTXYmypJyWgc7WihbB7KOhnTbhNSlMFGN4f9pUy7oibYrjsHEEzH4cty1dZRlYrjXNfjn2g3K+Pih2xMh60q5M3y1llb2A1fnKxJ/c4mQog2n5vANi0sTjFT2xqzhpOLNPo51iltIyEJPu8bTN/jifNZ1dk4V5wEWChLJkKDbMnM3iKJwhDJbxYwYtG++A+G6Gv2KxJSoQpzpxNPtTISZ+vWVguQY0++XYH8t51QpTBWeyzycJTzEpQn4UIuEoSqzL4PAfG9IN8bzvR8Ds+3HacizLwHKta/bLsW/NebUKU8oQixEFWB+qZRiWSUD1/+zE6lz8W7ZW0gmdMPuEGitSUS0DkcD2SNbse0BaKMoqFaYEhuXDbmkfvocp43mqA16SF07xsDoZuv1cBNozioDZj8K2qYssA8s1p9kvx75PzquZ9BMKK4FhmbA72heWpfwoQxzfxaAc64oRJbpTvIoiJcyuPwHxM/v+uDYZ0zKwXLOa/XLs++a8KgtTAsNEE5YJq0zyURg38vJHpOV3l9QVSzSbRYvQaQsKlnN2PQiYfQ9IG49iGViugc1+OfZDcl6NhZkrOV50swh1WCk+1OVSYdnEH+2xIguFqGOUKYo2WJcso+d3mYFcj714wdPse7DaahTLwHIta/bLsR+a82oUpgrOMCs37uLvj0qVKX+DyVDtBwnZS+35r7OP2rAw+aSEsLqyVZBdBwGz7wB0BqctA8s1stkvx35Qzgd/78XVUjxYG1huT+S3tQYUOxMwARMwgc0TOKb/LjZfe1fQBEzABEzABCYgYIU5AUQnYQImYAImsH0CVpjbb2PX0ARMwARMYAICbQozfMJxa4I8nIQJmIAJmIAJpEIgrEf+o17gNoXJwua4ppV29mf8awImYAImYALbI3A/r9LXetUaFaZmCYV1Wpkpa2cCJmACJmACmycg3cea5FiYrAfQ28IETFgogG8b7UzABEzABExg6wT4cw9cfbW5LLDRwuSMtCsXsGAACwKwko6dCZiACZiACWySgPQcyhJd91b+8mI5RX1bFWYe46H2rNv6TQlgqtqZgAmYgAmYwKYI5MqS0dT38jdal1S4caWfOgklEFb+eSF/eL9Zj+ZjEzABEzABE0iKgHQak1yxLDv1W5eFmVVcCbJ+6z1t9X8Jyc77xwRMwARMwAQSJcD64zf7GIP/ByUwhk9tUV91AAAAAElFTkSuQmCC",
"text/latex": [
"$\\displaystyle \\left\\{ - \\frac{b}{2 a} - \\frac{\\sqrt{- 4 a c + b^{2}}}{2 a} : 1, \\ - \\frac{b}{2 a} + \\frac{\\sqrt{- 4 a c + b^{2}}}{2 a} : 1\\right\\}$"
],
"text/plain": [
"⎧ _____________ _____________ ⎫\n",
"⎪ ╱ 2 ╱ 2 ⎪\n",
"⎨ b ╲╱ -4⋅a⋅c + b b ╲╱ -4⋅a⋅c + b ⎬\n",
"⎪- ─── - ────────────────: 1, - ─── + ────────────────: 1⎪\n",
"⎩ 2⋅a 2⋅a 2⋅a 2⋅a ⎭"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, a, b, c = symbols('x a b c')\n",
"eq = a*x**2 + b*x + c\n",
"roots(eq,x)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAVCAYAAAD8dkbIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC2klEQVRYCdWY7W0UMRCG704UEEIHSQdAKiB0ECghdADi192/KHQQpYKI6yChA5IOkg4I18HxPCuvZXu99xFA2Rtp5PF4PDuvPR5bO14ul6OSZrPZHrq36pFvyvGh9YnxgJhew3fID2V8k1KB0Wd0P4L+Zzk+xH4AJrhz5GvYTYo0TneSwRNGvsMvkRfR6hkF4nCXvoQQzK5H++jvgi5r0F+jWNB+aAdetEJoj2gfMBgSwAvied/GiXyOfKsOrh0lwbtZkTrpGkeGIQjoUxoKwNxVN8GM24iGDvIYFPcAy84YOndwD72pvJaGDlIwq45PCb4KuDyTVaNUGVbPNLKa/YLn8An6b7RrCbt7jG5oszSsTcQmFo9i3OtixHi1+BS2o3InXRnzvUo4NX1uYaubLLAL2NK9dlWDjSnW3MG0WxM+BKiPtuKWPlz4/VQZQTLZiR9hg+5QCNDDLrj0wlVelVLRF/NcQK+nN1G5vWAMc3z0ZY6Z5XmNFXY8nU4FZ/o1q8NgrSyP0Av+lHZMG4m+6edH+1Y22v6tEGI4oI1XSs0n42bVJSymswkKd+IM9nXjLvWlnbucLUCw1ZEX8H8lvnXKB/ZpVwIMQXylbTdtPlHJRN98bSFwBTJiTOByCUbgzs/Aq/uXhH9T75A2FiJkd1QgGQVbn6bvkJu4GpCJldWqqVyJLhXTs6jeVW0qnM5rH00nP0XGp/Ec0ZbHQeCPFZ++2nzWLdqxja4QJ8CuSlw5+n7EANpd9Jnloe8lxs2G37CZs7b4YOP3LDReOWVBPEbXV3wy8BuB5COSqXKJY1PhFXwFu5NeH+rKIFDlhJ2LZTZ4/jchj4dAPY8lNRlUKmv9jUEaIA7imUic1XTJcC7i5zDX9Pe2se33Muo8BlbZ7uxYWXg6r4UdROa5j0XH+EuQndfCLoEkvQXotZbVh+zPgIAw9KBbrn3/XdFfWTGxeXYKMXvPG3sn5j+KyQfbDQFDbQAAAABJRU5ErkJggg==",
"text/latex": [
"$\\displaystyle \\left\\{ a : 2\\right\\}$"
],
"text/plain": [
"{a: 2}"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, a = symbols('x a')\n",
"eq = (x - a)**2\n",
"roots(eq,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Expand, factor, simplify"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHwAAAAVCAYAAACE5YosAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADvklEQVRoBe2Z203cQBSGDaIAQjqADkjoADqApAKgAyLeeIugA0IFUegAUgGEDkIHQdsB+T7LMxpP1uD17tobsUc6zPjsXP5znbFZeX5+Liahs7OzdcafVnM2q/YQ+WiSdZZj52eBl3y01mHbcxY8DvPoX9L/BW8F2bId3AKNPlrtAO0IJ+8m887pbyLbTmTL7rAWaPRRF4eb3ffD6rPc/RULNPpoZdIzPN+IzDbD92mXJT03zoI8pz7qcoZHNaoyvo/gQxT23AGDF8cv1bYfaZ98Rv5Qyd50k/uoc4ZXhvbCdkB/kBt6wEC7F7xK34pzAu/Rvw3yt9gG+6B79FGnDK8WMotKQ1fPBe1jz4bVufGNwb3BIK4juj/gd8oWgcDkRdfL7bc+8LBPWfloaz6a+NJWLWRmX9LflulbUi2lfZNG/A0Gvw2kZGavV1hT+ZB9MeY454Kn0nusj7pkuO/cAreNxCa1TIs/zLejYw26UcM2vRi4Ye8hxY0+qjm8igzLpKX5D3wNewO/oC2J/iKVyYOAK2vLbwJgrV3c2ujnOowzUDwWpB34ELZEfoalO8Zom95oEkyMbfRRLOkMsjwaGZ6Bsk62LPjV5r/JFLDq7PL8oo2EfBL91PlCZoE7+Are5dmjS1uYFH3TTDCVGY4iKuElR0enFy/7j8hGfWs3xX7qcQ3mtCq11o95ZnbqUHX31dMslzbg9PdSOM8/s8QUSroKeMnJb5BmxUxKF2tr9J/uA7clXydqZfmliYy1IhmgeamfRL975qdB7zeGB2Q6vhiztuJI/C4G7ZaTgeL8cXcd188xp/OnwpQuFBz+CWHtnRUAOsbSeJNO6NpnPQ02tw80rG9mbtCWryEZztb6MT8PMOd+zdZrfGT+OIcWyK0SvpbFytO4SPYDc6bClC63xmI6Vs4dq6IFv9cCQdmiERg15hZtzBL6Bqv0BHfSjzXMVOfGKofM54J2ZNs3TYspZLi40zLms5lSRhabaFDLTj7GcYMSmLyk7dCGz6sBj5jTIyrH/o9+jDc4vAN4QTLQzdZRpvfpmL0YNh9iLwNsZpjMcBVSuZARBc8aS0OG7PYzZYxy5AtBYBKzxril79mZ0i6ysnzSttKPceptVnt51dAGQCRk/nYXBf103HNmmNYqzJbCKxQ6oX0Pf4fNACNdWW5MRAtBHkM6Pbwzp6DK6lQJ2upnYFgVNHCB7sfwDaz+vrI+0e878GeKqfM/TzTIktpbgECxenS6tLXf5fWRq68PWY6YkQW85A1y0Uvx/wVZN8hkr8ewcQAAAABJRU5ErkJggg==",
"text/latex": [
"$\\displaystyle a^{2} - 2 a x + x^{2}$"
],
"text/plain": [
" 2 2\n",
"a - 2⋅a⋅x + x "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, a = symbols('x a')\n",
"expand((x-a)**2)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFYAAAAaCAYAAAAtzKvgAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADkUlEQVRoBe2Y0VEbMRCGD08K8CQdQAcmVBDoAJIKwB3Yw5P9loEOgAoyoQNCBTh0EDoIuQ6c/5Olsyzf+eSDOxvmdma90molrX6tVjrvTKfTpKVqCIzH4656ntveu1aeSp9+qDZk28sicCEQ+w4Nla9U/i3e6zhlKyshcCYwD72eFyrvStdrgfVQqVAkWid5/XbaHJsHSzWdIpWIPZZcTgVSuiRcbfR31isWD9n1AFW8DwQLqUCNA+kwaGmOADkTXArJgk+07qucYpilAilA+0BySENLcwSECcCmktdz7awkHSd8KGleB7Y+A1YV3mP3kiaMw85tPUmEDc+oL5ImIsFEZUDlieUHIwAP3TuWMMbgTZAWxBOHI7oUQTUuAHzAKXu3qgzYBCUyI/nVT3gVjEajf8i3wvL3WDxo2l9wEndj5u0IXXLrUwZ3W1iFADh9XWXg2kgFR+JfTlGH1OaRizhGOPZXfCvmvXcp2ThpXo7vmZ34QPJUjI/frO5BNvgYEjiBV2kK6sjos/iPuBaSg+RDchA3JwyYJl+pzAI3QXzjX1pfHuTAjfhQdS4hfCII8gic2IBSImIZ6LnUsoKBBe6nugKon24oP0mXVhj2RV00J5HqA4cPpEOiFvoo9tuN0v6AUzSwDJS7QAvMvdoBP5ZO1O/RGuNgV/Xw6BDFeUdtYQ71I7KxDQmfE7X7N7SzeZT+xFVy5ETt/ibzxKSPwaCkL/2isCBiC8lO9pK3LYl+IX9rTBxj1+8KJ7YNss0DLpGeCOO5tXaOVh+36W56fPzuKiWyMAjDfh0pCO+oXQg7r6prAYwJhwCaW1XtC4CvGquuNvnAacDH7PTgt/U9b1pswauUiFjCOypvlI6Wb+AfOyy4VU3UaAFEHscwtMHu1ckCRs7n8mJjORF8qvrzn6vuf0n5fhCxvq3ftlAmYlkkT45XJTmXakCczzZNOoDsiSdi6ChY1Exb3y8RCj9r3qXok442XglFZPJxUaOvJ2J/iNnFOohL5EYODyQ/iZmLiCVi0DX9Gc1Gc5ECYCIf+uI7MX7wJATwLC1gExD9cvN+YJf9CcP7zL/NQ7utqmvxlS+vqgvRnJw8NmEvZgxSAcSzKGonjPXmf0gzcJNE3gWnKPL/j+X25mhEJeeo0d+JkY3WK0nSWBS5iMWYfNh0zotycguMwGWtE51FLM7bndnYnyNbAOCSC8KES/ZWcq2T/B+W2ydLi+aLGAAAAABJRU5ErkJggg==",
"text/latex": [
"$\\displaystyle \\left(- a + x\\right)^{2}$"
],
"text/plain": [
" 2\n",
"(-a + x) "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"factor(x**2 - 2*a*x + a**2)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAQCAYAAABpyU3qAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABfklEQVRIDc2W7U3DMBCGU5QBKtigI1DYoCPwMQF0AxD/+g+VDYARygZlg0JHYISqG5TnMY5lKoqQSJqc9ObO58T3+nLnpLfZbIquy2QyOYbjDAyx1/ItvXRRINiH1zNYgRMwAEkaJU7wEZEG6KcU8Y9GzOy5t2PfoMx6koNkNWOYNVG7NE28dsLVgqlUeB1m5jpOnKKvgHV1GX0L7nmJdusqz/gUYg8CVgtgY4wY36Ld1BR0RkLGIWemc2JrxmfArCuHIJ8PzjYvVam8Qf4jIzLEXuJzAwU6dHc2/81k/hGHJ8i2uGGfH29PMHb9X9f94ZnkqjK+TJ4v4wJ1v+XbOdxBTMK+NY9Dy69WyWs8LEwQM2dNp0bE1xe1Rv7nYmUk5OfU5nxF+1rX2Hnp3DG2STsjZtwMi1XchJ/YJPic85RpU45i8NAz2iUwy36SJVhAdAzmwIZ7B24olY337EuIayUogRt6hs9KmPea/DskyP6a0+3VKB6n4Uitcc2w1Cfm03LmS5W2QQAAAABJRU5ErkJggg==",
"text/latex": [
"$\\displaystyle x + 1$"
],
"text/plain": [
"x + 1"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = (x + x**2)/(x*sin(x)**2 + x*cos(x)**2)\n",
"simplify(f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get Latex code"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle - \\sin^{3}{\\left(x \\right)} + 3 \\sin^{2}{\\left(x \\right)} \\cos{\\left(x \\right)} - 3 \\sin{\\left(x \\right)} \\cos^{2}{\\left(x \\right)} + \\cos^{3}{\\left(x \\right)}$"
],
"text/plain": [
" 3 2 2 3 \n",
"- sin (x) + 3⋅sin (x)⋅cos(x) - 3⋅sin(x)⋅cos (x) + cos (x)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = symbols('x')\n",
"p = (cos(x)-sin(x))**3\n",
"expand(p)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"- \\sin^{3}{\\left(x \\right)} + 3 \\sin^{2}{\\left(x \\right)} \\cos{\\left(x \\right)} - 3 \\sin{\\left(x \\right)} \\cos^{2}{\\left(x \\right)} + \\cos^{3}{\\left(x \\right)}\n"
]
}
],
"source": [
"print_latex(expand(p))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solve a linear system\n",
"\n",
"$$\n",
"x_1 + x_2 = a, \\qquad x_1 - x_2 = b\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/latex": [
"$\\displaystyle \\left\\{ x_{1} : \\frac{a}{2} + \\frac{b}{2}, \\ x_{2} : \\frac{a}{2} - \\frac{b}{2}\\right\\}$"
],
"text/plain": [
"⎧ a b a b⎫\n",
"⎨x₁: ─ + ─, x₂: ─ - ─⎬\n",
"⎩ 2 2 2 2⎭"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x1, x2, a, b = symbols('x1 x2 a b')\n",
"e1 = x1 + x2 - a\n",
"e2 = x1 - x2 - b\n",
"solve([e1, e2],[x1,x2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can capture the result as a dictionary."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x1 = a/2 + b/2\n",
"x2 = a/2 - b/2\n"
]
}
],
"source": [
"r = solve([e1, e2],[x1,x2])\n",
"print('x1 = ', r[x1])\n",
"print('x2 = ', r[x2])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example: create Python function from sympy expression\n",
"\n",
"Lets first define a function and get its derivative."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"x = symbols('x')\n",
"f = x * sin(50*x) * exp(x)\n",
"g = diff(f,x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We cannot evaluate `f` and `g` since they are not python functions. We first create Python functions out of the symbolic expressions and then plot them."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"ffun = lambdify(x,f)\n",
"gfun = lambdify(x,g)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now evaluate these functions at some argument"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"f(1) = -0.7132087970679899\n",
"g(1) = 129.72606342238427\n"
]
}
],
"source": [
"print('f(1) =',ffun(1.0))\n",
"print('g(1) =',gfun(1.0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now use these to plot graphs of the functions"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n",
"\n"
],
"text/plain": [
"