Skip to content

Instantly share code, notes, and snippets.

@drvinceknight
Created November 9, 2016 19:40
Show Gist options
  • Save drvinceknight/af2b6a8e743503bce80233f8576b661f to your computer and use it in GitHub Desktop.
Save drvinceknight/af2b6a8e743503bce80233f8576b661f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Symbolic mathematics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q1: Exact valued computations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Computers are not the best at doing exact arithmetic:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4.47213595499958"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"math.sqrt(20)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.7071067811865476"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"math.cos(math.pi / 4)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"There is a Python library `sympy`, that allows us to carry out exact computations. When you import `sympy` it's worth immediately calling `sym.init_printing()` which in a notebook will make the printing look nice."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import sympy as sym\n",
"sym.init_printing()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACUAAAAVBAMAAAAzyjqdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA/UlEQVQYGWWOsS4EURSGvzvsYg0RiYbCZEMp\nkYh+4wXcSqExjUbEioKKbOkV2MI0aqPSSPYFJMQT6ESiYBNZ0Yz/zExiZU5yzvn/75577oWhcJnF\nxxCBeuefzc1CFbFSZbWkyoKnkrnmWquU23DvN3Swxdh3yc7gKhvI7MJFwWoJ3O3PyFxCu6UO4QvE\nJuh5Y+dSDWWszOPGh12JB+XB+1KOxgfMPXYgkVtnUUp3YthZZfrQDCOJ1aYy+KThzZjSc5GK6/Oq\nVk+L3z7j9Ke2vxabSAm+YDQiFNs8tfFA21OYPznak5vs2joX8aaBXpb9yE31VWD2eDnvRbn907+K\nfTcxNRYkWgAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$2 \\sqrt{5}$$"
],
"text/plain": [
"2⋅√5"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.sqrt(20)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAvBAMAAAACzbekAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbv\nuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA8UlEQVQoFbWRsQ7BUBSG/1aJVtJYTewMBgMT\nj2A0SHRiZLJqmGwdbUwGk9kbSLyCxEMYkEidc93T3u6c4T/na869vckH6KrGXEJoJRMPVj+DhVkG\n1xnCBNb4epNvxQgreHdB74g2cBGko2egK9t1YBQqdHq0Eqm1bQg06AF2jdF50XOWdJ/LBLdJUXwD\nJ4VjldMyNjzYgcJqUNrxMIdVppZ7uCE1P4DN6L/mlKgc9h3uGA44R3H85I5FoJpEno/8vZSLJH7+\nO9MPXW76ITT9EJp+CLUfmqTYT1rsxyjlJ+WvH2HtR1D70Sh+NCZ+vpz4+QDG90XydfieogAAAABJ\nRU5ErkJggg==\n",
"text/latex": [
"$$\\frac{\\sqrt{2}}{2}$$"
],
"text/plain": [
"√2\n",
"──\n",
"2 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.cos(sym.pi / 4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also have complex numbers:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAPBAMAAAAMihLoAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAEM3dMlTvq5l2ZtVdCTcAAAAJcEhZcwAA\nDsQAAA7EAZUrDhsAAAAqSURBVAgdY2DAClgTEcLi7RsRHAZOMjlCxiCgwkC2ATA3cJRtqoKxwTQA\nC0AL2ft3JesAAAAASUVORK5CYII=\n",
"text/latex": [
"$$-1$$"
],
"text/plain": [
"-1"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.I ** 2"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAVBAMAAADP3xFXAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABHklEQVQYGW2OsUoDQRRF78Qk6u4mBCGNNkua\nFCoJpLPaP3CqFCIkCDZauKQwlbqlVmKpabZJZSF+QVCwC2TJF2xnJxgQgwjjndlgQtgH8965h2Hm\nAQslRkrXgjGYD5aNyVupFrupOhem6kw016LS8GbpALDfsnwpX0cTq9OZvgTWlfKpYxwD94nOhbx9\n/pKEB+DMM+jEvJdIYCC1vma0eP41+Uk6PY6h1h+vHg53SFj7RnkUACF5RYop/BsSrDbQqqPIFXTt\niWhbzwpP5hOW1AGolfHL4bhsYoJ3DpwCV0HhizSGKHFJ2deaX9ek3ZbIunCo9y9crdke0Yp8bHY7\nJ8x2zzy9geIdbkWMgVI/1IUJG/+oHkkub9i05zmS/gBdzD5P7Jca1wAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$2 \\sqrt{5} i$$"
],
"text/plain": [
"2⋅√5⋅ⅈ"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.sqrt(-20)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we **do want** the approximate value we can still get it:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJQAAAAPBAMAAADws/tnAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVO8Qq5l2zWbdMrsi\niUTmZFZyAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACFUlEQVQ4Ea2Tv2sUURSFv81s9ldmEhBsbEJU\nEEF0ivQJMUGtdtVdrEIWJdgIWlib6bQQtBBSiDj/gBjtJKDbWFgIixhBYXEbbSVkZRE04333zls3\nvVOde86739z35g2MnlrDS1FhazvNy/e9F1C+VrsI0acveeLM2qPVXg+NbWnhWN5S3QIrRM0T7Yt/\nKCZsMJswkWVdgjtcsUTNSpZlA4u1cb65l6OuCsAKUWfhKMFKPaa0y8xDyh9vwFSDbUvUnOzAosXW\nWMpR4V2ZSgunTkI9hZsx06dZuEXRve+H9FqiZiQ7Ti22Ro+Kyh7l1EbsUdItG1TUS9E+cSZ8d45T\nSvGo+yOUKnga61QQPIHivfWU4bP1vrRq4kyQt2t8ABW0PcoU039kmWyQ8PNlOaY43A+GCXNiukRN\nosSr8akiPMoU1cUcBR/6InkVZDGXhK2JmgvOVzWOOjJCmaLlVrmpYELvy1rnFzzoY4ma112qagwV\ndD3Kq4ZbJaiww9Qu5+Brf1NQCSVJzOTxSI2hCsvL9eNtd3q5OuyWO9TMnkOdgLV4SadyiZnBgDw+\ncOwy51b+TZ2Sf6dkKCmqv5FJNnkuZ2WJmbWf2iXxP5TcQeGPUKLe9XYuiCdTVRJm27ylcopiN5iz\nxMyCoEwpanJpeF6/SfRmkGiBUxtZJofcPHM74VvrtRzJ6koMO80US8x0V0OVNUr1f56/1x3bwh6C\njvoAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1.4142135623731$$"
],
"text/plain": [
"1.41421356237310"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.sqrt(2).evalf()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"## Q2: Manipulating natural numbers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can do various aspects of number theory using Sympy:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N = 45 * 63\n",
"sym.isprime(N)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAGMAAAAUBAMAAABrMp7fAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdt3NMolEIrtUmWbv\nEKuZuDQ+AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABPElEQVQoFZWSP0vDQBiHf0ltE8mfhi6CIEjV\nURDxA4hfwFJMF0UzO2VxEYfiILi5OaaLiIKY3cFB0ElIP0ELbp0KgtJBzvOSYPO+cTDbPU+eu5dc\n0NjAfx5rPUAHOPLPWVVZmLmhcGvk+63qT2L0EMVU20K0KHsUQgxVok1QX6S6sj9HEa4BFyqpPWOw\nRr1LgVzLY3fSRC74YGUJUPPyxFlhe7oP85sMwkSWGO07Zs3E+GAQu3kC7AVc45QxZ/yb2K9MA/ch\nhZr8Sum9hDAn1L4BBwGFejdL6l8lyZM8JaHJYJgldhf6J7U9YIkybEuqBrNiRJ7zXnzhGNYLu+Eo\nT3B4ewY0i2MYV6ME+mpxn5OL7JQUz4ZFrVaXnKnBUlzlVv1VFE8lferk2vE4nEpibmGVMJk0lkv4\n30hrBt82YEdiUVuiXwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\left [ 3, \\quad 5, \\quad 7\\right ]$$"
],
"text/plain": [
"[3, 5, 7]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.primefactors(N)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# All prime factors are prime\n",
"all(sym.isprime(p) for p in sym.primefactors(N))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAVBAMAAADiAfyoAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\nInZCK3CHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACKElEQVQ4EbVVPUhbURg977282MQ+k0m6KNpQ\nCk7dHA0UcRBE0LSr4GAthTZL3dqHIN3EqUOhJLi6BJwEweDgKEHo3IBQOooiKlTid7/77s9LbgkI\nucN93z3nfN+5vwkAbxIDarvnonAwO6DyVPakTp13Qd2vygH1uuUndKiC7Ve7Oyp2fvNzLyqVLsaP\nCQhXgGgCtaJFZhrWQIYfO9cWllu1BjL0Op3OjUFZEZYJEAYjdyiIWLU/vQZbX1qKBaZfXplBEvnE\nf9KoVIjabPD0A2ZiTSJ61mtgcoVupNcgpFJ1opLGCm1AoL1F4ZNHGFCNU1Wdvt0GyV2aY8mYw6A6\nPsWcVDhWQKyclqXgFQzFREXLJZEevOO+7TDYx++mVri2iHaoyNlcQyr4hn6vCxhvmvwRXQiHATBc\n1gq3wYzh1SltAnvvJZw1F++H28C/NwWcW/TX8MpgaEG+tqiF4TtFB4sOA9rI8J9SqHQz5mjeHssp\nfCNInEHhyjLIbWx8XWsTY7dsDN+6mq4VBNYzS6bAZxCWgWwDGWsDxLir+UAmNpjLIH9p+MRAvwOv\niFqbaHmLaEWN1MMjhn5MRltGIQzsp0kMctIgqcFT0AY4fn4oNJB3ODy6KWZeM6C7s7cljlnhf76t\nolsRrUuxUfCvhOx0HRP8NOF/ov4KswJHiUUHlob6K9iATzqdKUZBuxdLI/0V8GORspXOS0aeE7XB\n/gqcNEVCbnD/yUvAA6mWfYS7wqfLAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left \\{ 3 : 4, \\quad 5 : 1, \\quad 7 : 1\\right \\}$$"
],
"text/plain": [
"{3: 4, 5: 1, 7: 1}"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.factorint(N)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N == 3 ** 4 * 5 * 7 # Checking the output of `factorint`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Repeating this with a different number:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N = 42 * 62 * 52\n",
"sym.isprime(N)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMcAAAAUBAMAAADLgTR0AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdt3NMolEIpm7EKvv\nVGZvmWXoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACDElEQVQ4EbWUv0scQRTHv3vc3urinmL+AEUi\nGFMYgl0K/RMksCGCxaZLYXEEJCmvES6xsRJSBDdpLQypQhAFC8EQ8TotAu5fEIjiDwy6eTOT29t5\n8w5SJK/Yfe87n3lfZnZnMDyN/xv1hwmeIGi9nXV8luJ3XKveX45jLupagBHE820D+8pkA/4Fnxs0\ncZIxsZ7n+S+mAd9TSDBeIboFoq+ANvkCfONzvRsMjjKxrwF8ZFr4eSeFBGOkjVNsrFz/MdkFdmbZ\n5NoeNh8wzSeec8BICgnGYhKeAV7HZCZ1Tai/s12kPWO+VJIJhQSr7SpMiJnSpKKLCMeLtJusdtNO\npk1E+MOcZVI770wp3sHjN0VeJH5WpEWiTER4aYJGSiup8O+pWiwk6mnFplWZwmyXAMPfs0xawmQM\n0N/H4g6rVWlMBJj+2bS0Eq/pTA4a6L9x1HuOok1E+CWw3i6ZHIMwOwavBZPQPYraRITz1DKpNuFx\nk4FVVC5tX6B6xRWqabtEeJ/+2UZ3JS/ip5/40atnOBlSp6kcEZlwTZmI8A9EP0sffibPT1GZLLcD\nnrfWgLHUEoMDKpm2cvgoE+Fa63WCvq2zbXN3mUZHVj9TRHwXSZY0Tfcc0BekaThnXtaTbisnJE1D\nvQfUVa8jHHLaAe//UtOYBOuB7krqQj9kgihpGus5QCbDd4VO/1LyxpLf9BGWX5TMf7sAAAAASUVO\nRK5CYII=\n",
"text/latex": [
"$$\\left [ 2, \\quad 3, \\quad 7, \\quad 13, \\quad 31\\right ]$$"
],
"text/plain": [
"[2, 3, 7, 13, 31]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.primefactors(N)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all(sym.isprime(p) for p in sym.primefactors(N))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAAVBAMAAAAX2iAxAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\nInZCK3CHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC/klEQVRIDdWXP0xTQRzHv/X1AYX+c3Mx1BqD\nidF0MDJCNMbRaiiDLiYaNEoiApGRLsaRxoHBxNDBzUFWownEgdkYcTPp5AoGjZCo9X6/u3vv2v7a\nY+jCDXf3+933vvd5L8evDwCJUzgSbfhCiTiDq0eCVkGmHxJpYhfIFN/XaW7bcMHO7Jip3K7ZuTy+\nnq9UyvKSm/UbYbvyzt0Rz8/SNLwDjCP8E6eB5Lob0fwzUj+cXOquE+jpaLPZnIuzggKU8xtlCljL\nA6ul2MxEU5Qh3gVgxl393sG7U8PPWDE+thcHZnYeGIyTkoJzfqPsAXKTwfyyw2uiafIn3nvAcp0C\n3TInOni3NoN9u6zGbCdvGbjVW8G7/EbpWUxUgR2H10QR70qphTcc6uBF630QeNXfQ+MQvIcx4vvQ\ni1edc50eJznHJ56UeC+Wac0oRN4R3txDoXdpI1xjtWjEJcvwapl+2/x+B6u0Mf2L+ktV6oOGwLt9\nmR7IKKT7ANwgQS8Fwxmj4AGrJd7M1Gm1pnmNTEejtGW1Tr15KzRFCIEX4Swv6k46Jth1BOIT6V1e\nI2B60/JaS6YfKgBvuAijaBfU+FLkxQy/YK2TeLNVx6MHr9cIGFCFz9wH46mjxQawVVepbEF1pgVl\ngfcbsFGzCrE+tBVt8YlUVfEbZT5h5EDkHZpTBHx/X0CpTEstLS3fb9jIjM2Sl3eC3KLWjddvlNvr\nxsv3N5wE1O9vNuJVRw6sR+eaySNVQRyFRPO24G6SFJTzG6nDk3/F9xvV3y+Vm4t0mK4PQG6dS7Zz\n/nGk/jkKOpmKutvWChwZD0lBOWvk1Ic2o0Qeaw3L21IfIt6VZpN/bU2VCDd+55NXXBaki+c2KaEV\nx57uP0GbAl9rvKO7gndZI11/RaOPxQ/A2OPnefLT9VdHES8f1Na9aos7w34o2NVvpA/vyVvuBGzL\n9EPBln4jh5e+f4UWNIRkS6ofCjb0G5lz+fsXz1oobJCwk65jPxRs7jfSDOrDjVrqqPz/dqYE/Ad7\nd+NWNMTxqwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\left \\{ 2 : 4, \\quad 3 : 1, \\quad 7 : 1, \\quad 13 : 1, \\quad 31 : 1\\right \\}$$"
],
"text/plain": [
"{2: 4, 3: 1, 7: 1, 13: 1, 31: 1}"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.factorint(N)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N == 2 ** 4 * 3 * 7 * 13 * 31"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q3: Creating symbolic variables\n",
"\n",
"We can create symbolic variables using Sympy."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJBAMAAAAWSsseAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAEHarIkSJZt3NVLsymT3i\nYlMAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABASURBVAgdY2AQUnZVU2BgTGBv4pjAwCbA9pDLgYGR\ngXMDAwjwKYCpcweAFJeAHgOTAEPcgn0M7gwMwkpC1wsYAB0ECeuXDPmiAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$x$$"
],
"text/plain": [
"x"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = sym.symbols('x')\n",
"x"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"sympy.core.symbol.Symbol"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can create more than one at a time:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAUBAMAAADIGvgZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIma7zZnddlTvRIkQ\nMqvFy5UvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABFUlEQVQoFX2SPUvDUBSGnyQmxpiEgCC6xcnB\nxY/BTeI/CLSr2FHEIUtwFP+AdHDq1Klru0jXrC4qCM79CW6CIPhedWgT0xfuvZzzPtx7OOeCldKq\nHeNstNoQJzJPlwBhBna+BGAKnrmlVY+w2WoaY2VICWFZsF3VwdEgSnFzDmHd73NT98PjsqMKMy5g\ny804agBY++D3GEC1VvBRB+C1gujdAIyr6KsBBDOlBOgJuqz2G8CdyQQ9UyQnODMTzsvPiX+KfFC2\nwzjlOZv3edvbvQR3wkjpp+l5gne1AOT2/VCNevlrdVfm7QLwG6jPGlachZ+KJ/8AGhYHeKlTqOFa\ndZlx68ME12c67bqr2Em0Wam2FunLfQMHYSv30HoMzAAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\left ( y, \\quad z\\right )$$"
],
"text/plain": [
"(y, z)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y, z = sym.symbols('y, z')\n",
"y, z"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can manipulate these symbolic expressions without them needing to have specific numeric values:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAf0lEQVQIHWNgVDJ2YICAMAb2H1BmKgPDTChz\nFgNDvgOEvT8AzgQKrA9gPZPYUwNkcXxnCGd4dWA1kMmVwFDKUB9wEchUYmAIYNgMZDDwKIDIPyDi\nEgOjAAPLFyCLRYGBR+AqzweGowxS5UVZHH+ZPzA+YNj///8v1pyjh94xAABbhSE1xl33oAAAAABJ\nRU5ErkJggg==\n",
"text/latex": [
"$$2 x$$"
],
"text/plain": [
"2⋅x"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x + x"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEMAAAAOBAMAAACGIrzyAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA3ElEQVQYGWNgVDJ2YMACkMTDGNh/YFHBgCSe\nysAwE5sSJPFZDAz5DljUIInvD8CuBFV8fQDrmcSeGgyj1gcwdM1geQAU5/jOEM7w6sBqdCVAcVab\nQ8ogYa4EhlKG+oCL6EqA4qwMjAYgYSUGhgCGzWAFrLtWAcFqBzAHKM7A4BwAJHgUQMw/IAIFgMU5\nEkBilxgYBRhYvqBIw8WvgVgsCgw8Ald5PjAcRVUEFudVYGBjYJAqL8ri+Mv8gfEBqhKQOIPX8zcr\nGBj2////izXn6KF3qCrA4gwKfLMbGACQXj3oqJCISwAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$2 x - 2 z$$"
],
"text/plain": [
"2⋅x - 2⋅z"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x + y - z - (z + y - x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q4: Manipulating symbolic variables"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is very straightforward to use sympy to manipulate expressions:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHEAAAASBAMAAACeMCwXAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABhUlEQVQ4EY3Qv0vDQBwF8Je2saG02tkp1FGH\nguDUIeDmYlx0EYyDCCoogjgo2Fm6Cmr9AxTBCoKDN7QEOggOKigIDt0EEamgKKLW+5GLl5hCb7jc\n99P3uDTQcoMWIlYbV3gcyY+IItq4wjPAjtrM1MQU9vt/vAssWkL5Lpth95oKV+3oZti9ZpArtn4x\nXVoXF8s76VSxJwegbQn3mpyxuZ1o0JPxjgk81g5F4q9JfekO6aZwv0lZL7h9TFMOVrBhX4WbKUe7\n7Ec8H2rSuA6Naw6wccJ/TxJyVibE4UOOJvbQU6PDGiEHhJx6TB/DNt3SJoMvtrHlvy1z4w2jFlNA\nvi2PGw6ja2hZJF7ZkS2/yTx2jHPBfpPHbxkmTKSzN/Q71EVENrnHHQwJlk3OGRNdQO/q8pzxHW9q\njWCTOWJ54yfY5Dzy8LQPVFutT32h7j57CXknc+iz7kuwydnsLhc9Vh6y6RH9p2LJL6REQ0c9q8A8\nporeOKZwB8cjFDpIRUVKrhXF3H4BSnp3sAQpqOUAAAAASUVORK5CYII=\n",
"text/latex": [
"$$2 x + 2 y + 2 z$$"
],
"text/plain": [
"2⋅x + 2⋅y + 2⋅z"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"expr = x + y + z\n",
"2 * expr"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAHEAAAASBAMAAACeMCwXAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABhUlEQVQ4EY3Qv0vDQBwF8Je2saG02tkp1FGH\nguDUIeDmYlx0EYyDCCoogjgo2Fm6Cmr9AxTBCoKDN7QEOggOKigIDt0EEamgKKLW+5GLl5hCb7jc\n99P3uDTQcoMWIlYbV3gcyY+IItq4wjPAjtrM1MQU9vt/vAssWkL5Lpth95oKV+3oZti9ZpArtn4x\nXVoXF8s76VSxJwegbQn3mpyxuZ1o0JPxjgk81g5F4q9JfekO6aZwv0lZL7h9TFMOVrBhX4WbKUe7\n7Ec8H2rSuA6Naw6wccJ/TxJyVibE4UOOJvbQU6PDGiEHhJx6TB/DNt3SJoMvtrHlvy1z4w2jFlNA\nvi2PGw6ja2hZJF7ZkS2/yTx2jHPBfpPHbxkmTKSzN/Q71EVENrnHHQwJlk3OGRNdQO/q8pzxHW9q\njWCTOWJ54yfY5Dzy8LQPVFutT32h7j57CXknc+iz7kuwydnsLhc9Vh6y6RH9p2LJL6REQ0c9q8A8\nporeOKZwB8cjFDpIRUVKrhXF3H4BSnp3sAQpqOUAAAAASUVORK5CYII=\n",
"text/latex": [
"$$2 x + 2 y + 2 z$$"
],
"text/plain": [
"2⋅x + 2⋅y + 2⋅z"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"2*x + 2*y + 2*z"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"We can substitute values in to our expressions:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAQBAMAAABelcpIAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndu3bvImbNiRBU\nq0Qb3U6NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA40lEQVQYGWNgYGAQAmIsgFEBLGiCRQooxOwA\nEmdNAZFwcBTGCnMAsSqmwPhgGibL3ukA4i/ALsvFCZLlKADKbo2tiwoAKWVggOltB8tuZZjCwL2A\nw5R5AoosdwBYdgFQlmsD12+eAhRZLgaQLI8ASC+YCZRdOXOm2cyZc4Gsg2ChXQxAWQYGfqitMHu5\nF4Blz969++0qA4O8AFAJGEBcxXP37v1csI4UBp4N8QysG5BlgWw2B7DAF4b3B/wZKiCScB8x8INl\nl/y/sTd0q0YDmiyX/1+YEFQGRMFCA0kIibkdiQ0AwqQ3pZWCffYAAAAASUVORK5CYII=\n",
"text/latex": [
"$$4 x + 4$$"
],
"text/plain": [
"4⋅x + 4"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Replacing z with x and y with 2\n",
"2 * expr.subs({z:x, y:2})"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADkAAAAQBAMAAABelcpIAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndu3bvImbNiRBU\nq0Qb3U6NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA40lEQVQYGWNgYGAQAmIsgFEBLGiCRQooxOwA\nEmdNAZFwcBTGCnMAsSqmwPhgGibL3ukA4i/ALsvFCZLlKADKbo2tiwoAKWVggOltB8tuZZjCwL2A\nw5R5AoosdwBYdgFQlmsD12+eAhRZLgaQLI8ASC+YCZRdOXOm2cyZc4Gsg2ChXQxAWQYGfqitMHu5\nF4Blz969++0qA4O8AFAJGEBcxXP37v1csI4UBp4N8QysG5BlgWw2B7DAF4b3B/wZKiCScB8x8INl\nl/y/sTd0q0YDmiyX/1+YEFQGRMFCA0kIibkdiQ0AwqQ3pZWCffYAAAAASUVORK5CYII=\n",
"text/latex": [
"$$4 x + 4$$"
],
"text/plain": [
"4⋅x + 4"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"expr2 = 2 * expr.subs({z:x, y:2})\n",
"expr2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use sympy to factorise:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEsAAAAUBAMAAAA3uN37AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMpndu3bvImbNiRBU\nq0Qb3U6NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABR0lEQVQoFWNggAH2BhgLnW6HCAiBqRJ0WTif\ntwDMNAGT0+HCyAyebAYG7gkgEdYUEMmhACJhgCcAwtqr+xvIWAriVEwBkcwQk0FMIIApY2AFKdsG\nEloAVlYMYsIBqjLOB0DbCsDKgoBKtsbWRUFsQ1XGpACUYwAr8wA6dQGHKTPYuWiWcgAFF0CU2TAw\ncG3g+s0DcSKqaTwGDDwCEGV5QNMYOB2AVjNwzZw5OXPmzAsgNtgLjB8YdjHAlTEw8AeApIAA1TSg\nsrN37367CpQAWsrAIC8AIoEAVRmfAUgMHLxAL/BsiGdg3QASQVMG8gIDwxcQsYiB4f0Bf4YKEBtd\nGdMCoNCS/zeA5GMGhr2hWzUagEwggFnKdO0nUJIT5hackQXWhBRDqFHPXQCWhxLgqIey3ZElUNiQ\nhAQVKkGRQuawIBuNN5EDAF96SV9Pr1XaAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$4 \\left(x + 1\\right)$$"
],
"text/plain": [
"4⋅(x + 1)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"expr2.factor()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and also expand:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAAAYBAMAAADE0DjrAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXaZRCLdEO9Uu81m\nqzIdlvb2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACIUlEQVQ4EZVTPWgUQRh9t7d7e+f9eD+IgkVW\ngoWkOWwikZC1E4tzISgWAU+JaCOcQhobk+JaPSyE2BhIYSNylSCHcCKCRZDrJXAg2hhICiWd6+zO\n9823bkQvU9z35r03b76Z2QP0yMzNEjpUaWx22H8MnxkeomaCcp/tt7AbMJ685oLKT3Yv47rPePKa\n850f4n5uTiTc/1FhXzw3Bf4FLX04QDpb6tw5z/CZpoEaLM69EsbqPRjLTKMzrjI0hH0vMEbuCFO+\n4T7B3jATDUpjXEJJ9rWr9lgrT3Qpd5Bf1RBwhii09YRkYAl4igtosef7+jO6SbLk2yj/YtUCyqNU\nggdsV96sv2DP4zAkSAnF/T8TLgYHEuxuPgz3FF2f9mlxXEybyKmX0mJrceY2eVi2v559TV1f9d2u\n05MMtgCXqyDRu9d4lEqw3Nq5sebWgE2L0iJGEu4CJFaBGe02cgaw+jGXVa2eV1M9Tg4GdwaDt1pp\ngkVPNRRxCVldrr0X+/IbwInjMdQ/podpgMTooT+ShWX1iqXVmHuoOpzqkRwVthSauEJi1OI2WVhW\ny+iBjw5VAqlxYcsX4DSJRfVNdVMJfeBaEHPZEUoLlY5kUIJzozbfJvHIEN/8VMJLVJaJqm0Ns3UJ\n4FMUwzBsQ4utd6fMTdEG9k69ltg2sV7uIUFWE5gSzOslJIYrDKQmE0j+V4IsZOR6jKTeFzgBij6H\n9DB/avwGkVl4GwRlKPQAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\alpha^{2} + 2 \\alpha \\beta + \\beta^{2}$$"
],
"text/plain": [
" 2 2\n",
"α + 2⋅α⋅β + β "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"alpha, beta = sym.symbols('alpha, beta')\n",
"((alpha + beta) ** 2).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There is also a `simplify` command that tries it's best to simplify an expression (sometimes this will be factorising, sometime expanding and sometimes doing something else): "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAZBAMAAAAyHoooAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZUZs0Qu91E7yKJ\nmaurDqYVAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACRElEQVQ4EY2UPWgUQRiG3/Uu6523YBTSJkss\njfHQIpImR8BOQYsFRZAlIDYiFopgQEMsRNJcKUEwESxExCvEaEC8xkJi4ArRJkIEFUQsIiEhmrh+\n8/NtZvb2mCzczvfzvO/OzO4NYF7Bp49m6oqd+AK+uTzMvhOfQl/DFDhiJ34Xb+oOD7O9A3wkNgXO\n2IlPSotKTTkVXavPx72HPJGgJaM5zn9ykD92wL1Nxk+q4BznFzjIH114uVnuJmVRzZKiIFRGBT2q\njO8dcQZ6jg7FFJfSbfNnVCvfrxNe2adUeJYkInqpUxrOqjDfLw/3DoyemvuHnqf7B0O2OUTB2OCr\nASp8VjX285cWq7jU/w5ClotfBCZwHrgTVv4ycBXwm8XJEimO237zVe+JN4XdoZRp3sKnY4S4CdwA\nVtnvNr2IOFgr0DYes/0iFFZKTXgrUqZ5Cy+tH4Twuwb8Zr/HND90XRFpH/2CKDrzKIqWqbolSlVg\nU8ooEZeF+2+TlvC7bvsBe0PBCj+69P6VxSNH6sC6lMmW9NvGX6C4kfWjBZBTt7jfE7fUL53flpSp\nHiz8CPA160cbXIgPY1fc9j4i6uxpobwhZdrPwodjjIvFmutdBB5Ub+E58UtKw9/LfA0L3iy6mlKm\n/Sz8/uiJem/yvTf5MvRnWQO0yMv9Yx9qlJ5WJfbzfw008Pr9DwiZpsWeZHDu6HH7/1aZUCX2y4Aq\nbcczWPt54DcyiJm242ZXxONccJxXGnPi6XmakvyA3NGJ7/i8V/YG/h/xYKmJCV3AuwAAAABJRU5E\nrkJggg==\n",
"text/latex": [
"$$\\sin^{2}{\\left (x \\right )} + \\cos^{2}{\\left (x \\right )}$$"
],
"text/plain": [
" 2 2 \n",
"sin (x) + cos (x)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trig_id = sym.cos(x) ** 2 + sym.sin(x) ** 2\n",
"trig_id"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAPBAMAAAArJJMAAAAAHlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAACGjDitAAAACXRSTlMAVO8Qq5l2zWYZcMvdAAAACXBIWXMAAA7EAAAOxAGV\nKw4bAAAAHUlEQVQIHWNgAANGZQYGk5DJQDYbqQSr03QPsBkAJYgIYEZbtZEAAAAASUVORK5CYII=\n",
"text/latex": [
"$$1$$"
],
"text/plain": [
"1"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trig_id.simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q5: Solving equations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can can solve equations using sympy:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAO4AAAA/BAMAAAAVoumbAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIqt2Zs0QmTK73URU\n74mR/c/RAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEjElEQVRYCe1ZTYgURxR+vTPTs85M7+rBCB5k\nQYjgZTeEkOPMwbN/MEG8bCfgZS8zeHARQrK3HHePSgIOgr+gLnjIQcSRHDyJgigYEzIHQ4jorOZn\nTeLqpqq6Xk1V96sqPNR6sQ79fr7vva+7tumqmgVgI9rJrxs0jvSV0L7PlBveKf2BGqWX6G2IXexJ\nmcWlDdFDkQY+8JXNmPLZaF2N5zTXzwA41Re1ddSnO+nZsWU9onw/A0DOb/UvqgGZ20pm9aSfAZCs\niopNa3qh0//SiXLQzwCo/CPaVF6Z3XYMvzMTKop7wh0//dVwqJKG42JEw9/7goy6mTzWR12408LA\ntNU+wO0UyuzlsrwTLsY2aGR/UVq3tAaTPVMPozmId02nUGXv/xTmTOtiNPvwn2DTuvVH0NlvdsPo\nMXOaKUwATCxgzrQuxvXl+G/BpnUZZJln8cdjumxc5Zfi8DCc8wwQXy525JlSi10y3SUeF4eHMTcQ\nJZbnjZ4cK3a8xlI1nha6Ey3umsPP2HEuFSUWXYBnhc9S6T6r+JhXCd2OqDcufgZ7Kx6JEqtu8sBo\nyYIPmuxWejwrdD/hnjn8DMb/OeVFtG60GYgvWGcJygNeJHQvcC83vIwtuCLQupOrlG71BdRSrsR1\nY+qr4WWsp3IlonWTJai94ArGiF7CXpHguuPURsHLeAiQrbi0brkFd2YMTRFMp2eVboPSBR9jDzT+\nFC1oXfh+/tuiLCw+7fLs0V8OtiD6iSB4GfX54+zlZMOiS/Vk5PspDaisnyGpUrdmrkeqj+nQc6tz\n/AxTN3muVxv+D1p0QPNp18/I6sbWhO306DYsq+taSW8NlLPXct/AWhlGN34tBC9ZZQM9L6z0mWQ1\nm21SPMzzQoV//9n2wzoC6cYX2WYpW5vgyEU+DgGIEwF/xX9tty+12wf5TU2qY8LIETcbH+ZVZxZs\nDIVjD1EF1fOQDDKXvAZ6Xhi/B3E7JSVFMpRuswUwl33vSfFAuiW+j47+JSVF0qlr2+3a2yGyOMW9\nr7NVApO6derWHBOlNyn6synP5Y/d246fQGpeV4MY5SbSNBvNn1zQQt1VkDz4TprrQjwFKzgDn+t1\nbH+jQQwZmKiIvoCJV0SapxQk/rxsZTV3NWMpJHfpUhOKZwjWh2zTSKR5SkFy2yiXYWQnPRizrMgm\nVMYK3f4IML2gJ0a+guTBN6dbWbXqOiBsz14Zm66CrPuc2iq2KVgHhNwrKXoFm0FW3RuDQgUmHJCk\n1N8gt2AlZNU9XahQCQckObUpRc47ErLpVrv5AhU7IOTMo1O0ErLpflqswIwDkpSS/aYRsug2urAF\ndXLWASHzFrCDHT0Qsuh+A/ARXQgOSFaMd6Fk0VUQrRtdHh7t0boOCAu2D3/bjX7OKojWrbCtTC9X\nIkMHhAWz6+vZj0WYGFkF0bojYijvvW6omTX7vqt5lgdfeSw07ylklGQbjQ3+dwpA5654KnksDPmE\nZu/mIItXZsx84CjOfrVTv68EllPtN+GGM55dVsnwTnyqhSJyQ4thWJucH/XP7c9HQACvLnr+DxL0\npmQ5jRIdAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left\\{- \\frac{3}{2} + \\frac{\\sqrt{17}}{2}, - \\frac{\\sqrt{17}}{2} - \\frac{3}{2}\\right\\}$$"
],
"text/plain": [
"⎧ 3 √17 √17 3⎫\n",
"⎨- ─ + ───, - ─── - ─⎬\n",
"⎩ 2 2 2 2⎭"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(x ** 2 + 3 * x - 2, x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can create instances of the `Eq` (equality) class to solve equations with none 0 right hand side:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAI8AAAAYBAMAAAAxLrNbAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB+ElEQVQ4Ea2UzUsbQRjGn8nHutnEOCgUj2ta\nvIWI9A/YQ1UoKMGDp9KkOXgpktzsUVoo8SDN0dhLBE+elB5b0X9AFHoQScVcehChJEHpB4V1Ziez\nX1mD4M7lfd7neec3EyYJINbKAe2pxxXFiNYeR+jtVo3UTTigfOw2FBCgdUICqXpIoBUfJ7b8tuGz\nrHa++S3Itr2hU1sKMQ/tt8/iLZlCOR/g29YSXgmt6aLmGvhjp46IUqRbTtunUlu7+8KUoNd58rdv\nDEivIfo/wJdW2jTbXhB7x6CPlujcCxp9OjOpSyDbbuvxIkjm+WLJyYRSfV8UktWxQEGKQ+9V18/D\nBs1uUDzBO33dDyoUmaPUrcWfSNFayLFClY5msL63bBCUn3iDMt2RiawfpOjVl8M1fGXvicSenbBz\nNq/q9Slh/KIUny1JNqtsrR/xZpjfwr1oWkeXGyO625Y3egEcNiAm3Dmyno43BZqyHvLkyB1JkEk5\nSEx48lOwM6DwK1ar1t3PEWmxV6I5RKgzKkHXwCdjO9LGhJNxdQw88zr4giQDFhqHmHMlErQKrRv/\nl2zHKq4QiH1c/r7mcYAmCmxoLDN65p6VoPhFM0+mJ7Kr3l0J0zT9oLHSpeGd4p0E9ScDnPOAjBgB\n5kArWiPh/LuqlaQ+8KSHhvHMDzZ6B/hKaqzmE1xpAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$x^{2} + 3 x - 2 = y$$"
],
"text/plain": [
" 2 \n",
"x + 3⋅x - 2 = y"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"eqn = sym.Eq(x ** 2 + 3 * x - 2, y)\n",
"eqn"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAVUAAAAyBAMAAAAepFVLAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEImZRO/dIma7q80y\ndlRAyO8oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE/klEQVRoBc2ZT4gbVRzHf5NkM5tkMzv0sMKW\nskNEsFhpdBHZrdhcPMpuwVZKQVPFBdtDg6WrvWjwJHjYvVaERqpSFmRzqmxzaEDoxUMDPSiIZKH0\nIoj9o213q8Tf+zfzZnxvMk5eIQ923u/9/nzeN4/MmzdZAGx7quQ6xu18TYjLHWsIc0z7yR2XK1vz\nTEq0K/u3jfEEbPUkQ9o7YfRt8RnC7qSjs+A8CnINwexdhizeDdAA1qXN0bT2t+GBAJqDHe5S5nRb\noFnfH03razXrcQA0BVtqUuZcK0ATa0Q8hL4DpmCfVKlI41pnPMqll5G1chgXaVrrB+9KX6JRtQrY\nE9IKmTcMriuHPSmtcDRY2FHXFTgskdbsYGgLVpFYHwJc3PZdYa3pYYm0nvenTWgMXL3W9LBEWr9O\nKNFPOw5wpuGPwuuaHpZEq932p01ofAbOP0FqSOsIMLXWxbevNoO5srXATmbl5heCGmMwtdawor1k\n+EPYJ42uX6pUPGkcb8bDpk69WKnoAEm0vkqK31cSnCMAa7hJtJRRlTMGhuexSWTtqsqIL4FWq455\nZbxdgub0mD27iOezlwGKQWiIpYD9zkroeSyLd2RLh+Bab3i6BIBME2MfbckJQiuUUasHcEAOxtoK\nGNdKD0wZnK6rA0yv08haTZcAMENCnl4rQI4vs57hRxQwWSvmve7nRo3SMvWsRP3S+Ge0JxtbYN3s\nwTmXBkLrClCQsoeYClhEK1s8FYa9a2QeqmLcV8d+H2xBxlmGPvNFtD7LMxN0dcyJwMJa6ZdEA9ps\nYOCZmjpKVrHcw4uHWj/OtuECywtrte6oqyNeHSysdS5SJQ+LeHjb+xX1WFdWsJ3uAj2poIBVD/15\n/HO6qNWd6AF5GmU6nSsnOp0WmvTegnKbmH41wDQFECe2eNhznc57nc5Vmkmfb79QUwO73YOZF2hC\n9JL7fBldn+LfHkCtsORO/c1ywuuaX49WKsZ6WHhd1fs4B17vAbzUVdD5S9NJDP22sfHXd3AIykQ8\ntrBWvu+xkPZK7wwVLKTV2tUCALLkAJ99U51xDGV5LHQc4AsotNggrPVGlXmHXHWwkNap+zGUg10S\nPK3O6Neg5LLQDsAC8LfeyLr+odEqv3cjRAcLaXVitObY2Q05qja3DreYf//gMsw+f7jBRmJds988\nvgxwbltVi74V/jlZWAcTWul5zH5Lw0J34Q6NRZ6xZxe+pO7sQ/herj3EB0KrHJNte/5CF8cO/WjD\nYEKrDJBtDsPtpU3dc1U5arXgYI047Hu5FulpK7atP7lpURF8oOhmIUNS8emOe9kw2FMKgOziMM05\nq+jCxDJNv1gKVOWbhZ7MiLFxvz6K4X0kxRRMo3WiDkW2ky5tBIpyv74SDOItvOU3uwBNkmUKptFa\nuiu05vnmTyb9H+2aS7XSCnMwvo//ZzvP48EUW3mddikuZ9ygyBBMp3XJC6ZKY+XuSVWGYDqtp6Sp\n0pj5llRlCKbRmq1KU6Ux56UiUzCN1pvSVGnMsvxZTcHUWp0q+flshHYL7IYoNwZTa8UfLn4SU6Xp\np6pQ9rUagym12u9UFutpNIqa1crT3wrbHIwfBLhkzi/he0ddzJWmvzYYPBB15mD8fxsTbYEe454f\nBgvsMTXGQlEaey2A2FeHMfkEFr6a0NbvjYkivYzVIzw2uevqs8Yi4pzwFc62xkKRXsSPTRL7F6D/\n8qaZv/goAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left\\{- \\frac{1}{2} \\sqrt{4 y + 17} - \\frac{3}{2}, \\frac{1}{2} \\sqrt{4 y + 17} - \\frac{3}{2}\\right\\}$$"
],
"text/plain": [
"⎧ __________ __________ ⎫\n",
"⎪ ╲╱ 4⋅y + 17 3 ╲╱ 4⋅y + 17 3⎪\n",
"⎨- ──────────── - ─, ──────────── - ─⎬\n",
"⎪ 2 2 2 2⎪\n",
"⎩ ⎭"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(eqn, x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"We can also specify a domain for solving equations:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAAVBAMAAAAazcUaAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\nInZCK3CHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABeklEQVQoFYWTP0vDUBTFTxtjDCY2/QZaF0GQ\ngg5OrUhdtaB1cSkIDtpBZ5cgSMEpk2uLq0tXQTA4ZLUKHRyEoh/ASh3sYPXem2eMEOod7p9zfuE9\n7msBpGYwOi5e2NfWRlPkBk1Kqd4vZ1d2PMBohUqnckXNMZB2qepVSioeYL4R58hoT6NB3REhKyTE\nuVcP7+oTYGqADAMKiXOBr32Iw8mqoejKJEicg5wrniQ+lyKBWyqjsCAmJVqF9txVnOH+yFQ7q3mU\nAyXYW7PQrapayXlTyVL0mu3NRcK2/5h2aToBLvepLpc4ztjfW8SQq8T4bj7Tpc5YV8sOZTwBN57Z\nDye7jckBGnma6sy6ocz5K0/cxCFbQKbPXF1T95NliwEcABvtoleWcbyFsU9toCfsJQtziDvbkW2n\nHDS6Vu8+gbNy8z6MLFDio29z1/S8TgKnjqdnaUctNQnvoWy6VCyEi//+Iq8QddzIrnH6RwsHulQs\nAp8H89//xybwDScqVS1yhOvJAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left\\{- 3 i, 3 i\\right\\}$$"
],
"text/plain": [
"{-3⋅ⅈ, 3⋅ⅈ}"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(x ** 2 + 9, x)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAASBAMAAACQmVJ4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu1SJds0i3ZlEEO9m\nMqs+5asqAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAa0lEQVQIHWNgYGBgBGImE0MgacLgysDAVsAg\n6MDA0sBQWcDA6MDZ9YuB+wDHrL8M/AfYGX4y8CskMnwCsn2AJPeBKKAIu1cB118GPiMD3g8MPHIX\neAQYGMoZWCcwMKhnmQDNtJmTACQVgBgAel4WPlvNWewAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\emptyset$$"
],
"text/plain": [
"∅"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(x ** 2 + 9, x, domain=sym.S.Reals)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Q6 Worked example\n",
"\n",
"Let us create a python function that returns a polynomial:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def polynomial(n):\n",
" return n ** 2 - 79 * n + 1601"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(polynomial(0))"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(polynomial(1))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(polynomial(2))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(polynomial(3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It looks like this simple polynomial gives us a prime number."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAOBAMAAADd6iHDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHaJmUSrVGYizbvd\n7zLJaKAlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAmElEQVQIHSWOMQ4BQQBFn4yxIxtLUJIVDkC5\nlUwiegdQbKlCpd4j7A12ttJuq9NpuYFKvxQjEWFE9/PzX96H9mgO3WgKaGpb9vRSvIS6UWeEQRRU\njn6MVyJfLZE0Y6SFzTMi1Mg7iE9ONiF4wG75XmT6F1XM+PIfNFIC6zDPEjrLyi9QJa7l4BRVg8xR\nA070r3CbuTud4Zov0AklcvLvmhAAAAAASUVORK5CYII=\n",
"text/latex": [
"$$80$$"
],
"text/plain": [
"80"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = 0\n",
"while sym.isprime(polynomial(n)): # Keep checking values until a composite\n",
" n += 1\n",
"n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's check that the 80th value is indeed no longer prime, but that the 79th is:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(True, 1601)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p79 = polynomial(79)\n",
"sym.isprime(p79), p79"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFcAAAAVBAMAAADBdm84AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\ndiLw+n06AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABcUlEQVQoFY2Tu0sDQRDGv7iGJBoljbaJRbw0\nwnV2YiNaSRAREQKCjRHBB5JWG7GxSJU211hZpItFmoBga7Cx1D9BfOB1+s3ea48kJFPs7Tfzu9mZ\nnTsAiQWMtqklWyC1NholkT0SLPERwMnKHlRxzgl0/FkSmdznkjngEbcoIV1Xm56UmG8NKWFbhMDL\n1hcwXUAH88CuJyWmTZ1fCrwjQmeeIfz8TvUANG2INOytH25L+Jcv1ceA3buXrvok3AvhdS99lDl1\nRQ/PVW4O1dkfoFUOYHVowHnZNxwuAv/ZWFxh5giWsJjOnC4A9/qypaNvIP8YL0OjPoyLHvDk0CXw\nBuEcG2wObjB9Si6oGTXC3Q4XO6jZT+yVoWtOrvqZW6xZhsK5ykGGRbcRDiVVVlVM1hWb8OHYbYQT\nnKi5Z8CW5UBVXh14kqm9e7ZObnLmuI0zh23DzMMA06/h6Hs2Q/179k277g8M8GSPtTMz1j9Y5Gf6\nD8RaZELN1sGFAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left \\{ 1601 : 1\\right \\}$$"
],
"text/plain": [
"{1601: 1}"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.factorint(p79)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(False, 1681)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p80 = polynomial(80)\n",
"sym.isprime(p80), p80"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEMAAAAVBAMAAADvM06qAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\ndiLw+n06AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABLUlEQVQoFX2SIU/DUBDHf1vXtV3GQKKgCDIS\nQlKHnVmwE4BlCQJCECMhTILhKyBQCxYzjQGFpUEgEXwAQjIBwZS71yZ9a1pOXO/d//eud5cH1Nao\nstZWpJLTrwIk3z5RsfalvhWqt+1j80GOG5pyh+obUwgONcrMGXHwBLt6TJG3KdvdWSbrx4toDmFf\nY4N0lqXKgo00e3i/NuL6RcSfFZAVG9nR4mINqWp+5F3J4LGFOMcGgJcBrGp8M5F+sJAMAK3mh3Cv\ny7ktQ+qiwnkMzxOcQRnyqoQ/Eie9BOPx5VE8PzRByGfWi9tTulkcmjt4t/fCYo6kE3X6e125nG/X\nffxeql/8nGlBMwl+kiRziJHKXF6lTDU5g6TvpYox74XrKlny7VMjBv+83fUI/gCuQULjAQtCbAAA\nAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\left \\{ 41 : 2\\right \\}$$"
],
"text/plain": [
"{41: 2}"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.factorint(p80)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us list all the primes that we do get:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1601 True\n",
"1523 True\n",
"1447 True\n",
"1373 True\n",
"1301 True\n",
"1231 True\n",
"1163 True\n",
"1097 True\n",
"1033 True\n",
"971 True\n",
"911 True\n",
"853 True\n",
"797 True\n",
"743 True\n",
"691 True\n",
"641 True\n",
"593 True\n",
"547 True\n",
"503 True\n",
"461 True\n",
"421 True\n",
"383 True\n",
"347 True\n",
"313 True\n",
"281 True\n",
"251 True\n",
"223 True\n",
"197 True\n",
"173 True\n",
"151 True\n",
"131 True\n",
"113 True\n",
"97 True\n",
"83 True\n",
"71 True\n",
"61 True\n",
"53 True\n",
"47 True\n",
"43 True\n",
"41 True\n",
"41 True\n",
"43 True\n",
"47 True\n",
"53 True\n",
"61 True\n",
"71 True\n",
"83 True\n",
"97 True\n",
"113 True\n",
"131 True\n",
"151 True\n",
"173 True\n",
"197 True\n",
"223 True\n",
"251 True\n",
"281 True\n",
"313 True\n",
"347 True\n",
"383 True\n",
"421 True\n",
"461 True\n",
"503 True\n",
"547 True\n",
"593 True\n",
"641 True\n",
"691 True\n",
"743 True\n",
"797 True\n",
"853 True\n",
"911 True\n",
"971 True\n",
"1033 True\n",
"1097 True\n",
"1163 True\n",
"1231 True\n",
"1301 True\n",
"1373 True\n",
"1447 True\n",
"1523 True\n",
"1601 True\n"
]
}
],
"source": [
"for n in range(80):\n",
" p = polynomial(n)\n",
" print(p, sym.isprime(p))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q7"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def p1(n):\n",
" return n ** 2 + n + 41\n",
"\n",
"def p2(n):\n",
" return n ** 2 - n + 41"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us check how many of the values of our polynomials are prime"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAFMAAAAUBAMAAAADwRznAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIma7zZnddlTvRIky\nEKtZsEGBAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABZElEQVQoFY2TzUrDQBDH//lqY5PYoODVFHyA\n6AsYyaXHPIEUBPHYi4jvICJ4ExRPnoMiXjzk4t2LllLQ0osIEgULKuLHTELWZi3oHHb/M/PLsjM7\nARQP/7AGM9O8XABXx+esJLOjPDDp0r7EegVo4ppdySo+YO4DTgCo/Fl1F+oOLHJl2/Rxs/xB0TOg\nwkdNhdD6MDlUNmWOTq1yvAvMcC4OUe+j9lrmyLP0AtUPsU4B1Q1xG6H28gttCNSIsEDpDkLMxrDf\nZdRpC1QNsEbpmNFoDGpBoGYLe9SMhNCxF9j6Qe0nRnsglMoy5bKcuITSBbbT9O1O86HKzTLT9PGg\nnTer1srKArInMAK5LGCiaBaVdZqln0H1dRNnKMP1AjViHHHy5GuA3sYDsHpZZq3FT8+4Hw4APckf\nVuRNV0hJ0Ktm4yLCllCyoHHB/GiwM+qMah7CfLSLqFcIedf4ZopHy59GP8w3HNRUx4NvMeUAAAAA\nSUVORK5CYII=\n",
"text/latex": [
"$$\\left ( 40, \\quad 41\\right )$$"
],
"text/plain": [
"(40, 41)"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n1, n2 = 0, 0\n",
"\n",
"while sym.isprime(p1(n1)): # Keep checking values until a composite\n",
" n1 += 1\n",
" \n",
"while sym.isprime(p2(n2)): # Keep checking values until a composite\n",
" n2 += 1\n",
" \n",
"n1, n2"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(True, False)"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(p1(39)), sym.isprime(p1(40))"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(True, False)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.isprime(p2(40)), sym.isprime(p2(41))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q8\n",
"\n",
"First let us verify the algrebraic equality:"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAJEAAAAWBAMAAAAyQ2NwAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACOElEQVQ4Ea2UP2gTURzHv3eJuUviJUc3cTlS\nLBRaEsQGBLUH6mqC0kEQvKo4OWSxdjxEXCy5jqKDWRx0MJ21yEEma8RbHHSwQRwcBBtRrGI5f/fe\nO7l31VJo3vDe+35/v/fh9/7cAbxNLLhitsdBtTP+HhFiedHOfxsRycwOR0MCCpujIhWboyJNpED3\n65WKpV8at1N+UlbOLuP29GTSAgxH1lgPw7DWDrIfU76QT1xgycz5WMMdG4ikaGM4EE/5eAXI4ARQ\nl+yHXOn1WRdYgNYyBlB9Lnkov/Z4UVoCC5jEb6Aq2YIEXHShRO9Gq7G7IilaKQw34nk8Kk39By1Z\njnU0JknagIxyDcovBoYyfmpuhqztTQM+U03m2JHT5+KLTZLKLw7Nw3OgfOeknHYdnr2dA0yzrb0O\nnBtNPf4AkiTvFUqdhoX8V066V/TRkHYgqDptd3+zUH3UWUX2pzAl0iZynxrOX5LrmViPS9JfPqO2\nysD7fHLfnK/e1YcwiApM9fvP+/1eNI1OvLwCY5jYHbrAMRZMdcUWM2bdwgYyvggma6LNGFt04gVx\n4rgGbOkpSiS9GjN7yPkoBy4T0t1lBlST1oJBXyx7BR/oQag8T+ofOMD76GdTstB1LR5L1pSncxrQ\ny8z5nER/E9V/y/OkvusAF9ylAA0TUwY7Ovk94TDaHTxFm2JRTcoKssc7EoOLM2SqV+eBg8DJdyIh\nrunyl15A0aPAzTnqmPwHYwcrJu2QssvQrf/n/QGEFKCH0VZWpAAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$n^{2} - 79 n + 1601$$"
],
"text/plain": [
" 2 \n",
"n - 79⋅n + 1601"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = sym.symbols('n')\n",
"\n",
"def p3(n):\n",
" return (n - 40) ** 2 + (n - 40) + 41\n",
"\n",
"sym.expand(p3(n))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"We see that these equalities are equal. Furthermore if $0 \\leq N \\leq 40$, then $1\\leq -(N - 40)\\leq 40$, thus the right hand side corresponds to $p_2$. Similarly for $41 \\leq N \\leq 79$ then $1 \\leq N - 40 \\leq 39$ corresponds to $p_1$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q9"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADoAAAAVBAMAAADlb+D4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\ndiLw+n06AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA4UlEQVQoFWNgYGBUZMAGFl0GiTK7YpMDih1b\nACQYPyDLVkM5QJqpAchmTYAKgKlCKAdIszoA2aiyUEkQBZaglizzpQtgo8E02FD2BrAAmGDlSUDQ\nYM9MWwAWABMvmRqQ6CYGhtVZQD5ziwsQeCww4IeYDKHZfaFBAtYBJOYbQFhguh3IRraXoZ0ZIgui\nwfaCgwQixsD8kxXMAtMYocHz4SGDfQMDA4jGElaFAgwszkDtQBqLLMjceSACCDBMBosGgEmoLGr8\nAv0O8TI0fhlaoWqhFCOMe+wAiMWJI10FMzAAANXmMqcmO/ntAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$\\left\\{- i, i\\right\\}$$"
],
"text/plain": [
"{-ⅈ, ⅈ}"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(x ** 2 + 1)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$$\\left\\{- \\frac{1}{2} \\sqrt{- 8 a + 2809} + \\frac{53}{2}, \\frac{1}{2} \\sqrt{- 8 a + 2809} + \\frac{53}{2}\\right\\}$$"
],
"text/plain": [
"⎧ _____________ _____________ ⎫\n",
"⎪ ╲╱ -8⋅a + 2809 53 ╲╱ -8⋅a + 2809 53⎪\n",
"⎨- ─────────────── + ──, ─────────────── + ──⎬\n",
"⎪ 2 2 2 2 ⎪\n",
"⎩ ⎭"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = sym.symbols('a') # We need to create a new variable\n",
"sym.solveset(x ** 2 - 53 * x + 2 * a, x)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAEAAAAAVBAMAAAAEBPWpAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkQ3Ynvq81UMrtE\ndiLw+n06AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAx0lEQVQoFWNgYGBUZMABFl0GSTC74pAGCh9b\nACQYP+BWwNQAlGNNQFYwzQDK40wGyTmAiAQgAQXMRfVQBebqn4FiYDlkBQwM92Em8FJRAXsDzAUg\nGtUKsA+nLcCtgKGJgWF1FlCeucUFCDyASlFNYGD3hYYW3BA0Be1ACYJuAIcWDhOwBxTzD5ByHAGl\nnt8uwOACDE2msh+FWIMapJnzAYgEASxWgIXBknAFmOnBFq6AqQHEbIXzoQwBuMCxAyAmJ+40GczA\nAADBXDlsQs5c1gAAAABJRU5ErkJggg==\n",
"text/latex": [
"$$\\left\\{-1, 1\\right\\}$$"
],
"text/plain": [
"{-1, 1}"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.solveset(x * y - y / x, x)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAALQAAAAOBAMAAAB0sisSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIom7VJlmdt1E7xDN\nqzIhoty3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAABxElEQVQ4EW2UsUtbURTGfy/JS5O8moSCc2IG\nW4qVQF1EhPwHCUInRUIXwaVuHdqCrV0Fl9LRDl2KoKEglC4+itA1U7tJFmdRIlKipOfeSM5Dzx1+\n73C+j49773nvwaPaHG4dTs/aiJZe9lAkjNr0lVeK20u1Gr87pw2CFs22iz7mR9nEw0b0HkXCo01f\neSU7HA5vOBhewIM+pU1Jzn4hFVtgHWYSUE+i6T1eCcvQ5ddfeeS/cRRLdLpLZmCBRWh2FOoxlRSk\nehI+Wv5CSl3yfQvcwG5DoR5TkcjPbt9+RR/c46hF/spCdCnRb8bYUI+pSFQd/qytShE8WXbRlSrF\nCwuBDORsaoyqekxF7qMNC1R2XOpTx0rLRRsIZMNnU2NU1WMqcn6XSXrTsbAn0HPeqcxje4+pwFuX\nSXhOUCbdl1Kmk3FjvAc3rKYb4y3UYyqwBRMxqX+UBqPodJ3swALP4VVHoR5TIZJdFGLCAYU6uXPZ\ntbzvoftk7sF9GCsJqCfR9B6vUJSxhJCLybZpbkTX8JGfPRO5RrSPIuHRpq9GSkai5e+xXoZPL+Zh\nG76/PrERPX4nv6cxEkZt+mqkBF/lDiafLfMfGvhj0hcsBf4AAAAASUVORK5CYII=\n",
"text/latex": [
"$$3.0000000000000075$$"
],
"text/plain": [
"3.0000000000000075"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from scipy.optimize import newton\n",
"def eqn(x):\n",
" return x ** 2 - 9\n",
"\n",
"newton(eqn, 0) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To obtain, the other root, we can start our algorithm at an earlier point."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMMAAAAOBAMAAABgJ7XzAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMiKJu1SZZnZE\n76v5rQUQAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB+klEQVQ4EW2Uv2sUQRTHP5vcj0084pIDwSIk\nhYWVFiJolfsPcggRUmURYzCCq5Wdrq1NgoUSsNgqhUE9g10gHvYSEYONwhUWBhRNxPgjaHwzs+YN\nOq/47Jv3/fIeM8MslFG9MJubNLqz1AqCw3Pn8aBGr2g9pXK5TbR6sWuaupgi/mmyvjw6GQRHabY9\nqNErWo9VRorqBgPwvuwvn6c5X8zqAZwLYvAFtTGF59GizZzyETa5BWd0xPNutG1W12E+CaHeI95S\neEYt2swp0ixjFpp44Q7qN6znIRzs0fiuQD1atJlVbn6Tg2mtX2XOm0AzlVX0Q0Y8DqAzukBjV6HG\noNJ5KbvoDu0tFd6Is6cTWVV3YGImgHQ6pbKjUGNQSTM4XpBtm6b7UXsjaVU2MDETQDq9YEbsQ41B\nJe3rxFkefxiXpsMnTBwxg97KRN3/P6cVPA7rCSodlp9krYcc+KXbmIQbucyRW5w31/0f5Cpjc90l\nPKMWbeYUafUp2ZAjMU1d7CVuxDV4lIRQv8LglgL1aNFmTpGux6LPMFSUA+A1jLdlJU/vdhDyrAbM\n0yvhebRos1JpV74iu6ibpi7uE+8yOkZ/Hr0KglOMtDyo0Staj1VWkuGCZwnLfwdAY/Ful/4e0aU1\n+Q0GwKHVd3hQj1e0HqvUFu9BZVN+g38A9t5qSzbrnQ8AAAAASUVORK5CYII=\n",
"text/latex": [
"$$-3.0000000000000098$$"
],
"text/plain": [
"-3.0000000000000098"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"newton(eqn, -10) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Q10"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"theta = sym.symbols('theta')\n",
"(sym.sin(theta) ** 2 + sym.cos(theta) ** 2).simplify() == 1"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(2 * sym.cos(theta) * sym.sin(theta)).simplify() == sym.sin(2 * theta)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need to work a bit harder to check equality here, taking the difference and seeing it's equal to 0."
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJZjLNVN0i77ur\nRHZ72Yd1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAVElEQVQIHWNgEDIxZWBgSGeQmMDAsoCBOYGB\n+wAD+0cG/gMMvN8Z5BUYeP8xzDdgYP3MMF8BREJEgLLs3xm4NzCwfATpYkpgYGhnkApgYBB+d5QB\nAPogE3QldevOAAAAAElFTkSuQmCC\n",
"text/latex": [
"$$0$$"
],
"text/plain": [
"0"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"((1 - sym.cos(theta)) / 2 - sym.sin(theta / 2) ** 2).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us find out what options can be passed to `symbols`:"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = sym.symbols?"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAXBAMAAAC7cAEHAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIma7zZnddlTvRIkQ\nMqvFy5UvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA4ElEQVQoFWNgwAKYgq6XYhEGCjGtV+AUwCol\nU8bAf4CBgVGBARkwgRQ/Z1gJJIWRxYHsh0A8lyGUl4HBEUmm8wADwxGgMR8YsnoZmALgMjxP3wNl\nuAsYuB4wVCswsCE7oh4owzMBqlQMrgXIAMkweEFFULwElgmFyhhBaTAFllGBimRgyLRBRWYB7XRL\nA4KUC1B77iNkELrApsFkME1bBlWJ2wVbEWZB7YmGisD0grhx8/0UGBh8oTIooQMSY0yAyiCFKEQE\nGKJQYAhjQGlgLEABeswhVDIqwNSAaXBsg1gAnnUt8qpUaKMAAAAASUVORK5CYII=\n",
"text/latex": [
"$$\\left(-1\\right)^{n}$$"
],
"text/plain": [
" n\n",
"(-1) "
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = sym.symbols('n', integer=True)\n",
"sym.cos(n * sym.pi).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Q11"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We need to do a bit of work here to find out how we generate primes using sympy. This requires searching."
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAABIAAAAPBAMAAAAbqIIhAAAAHlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAACGjDitAAAACXRSTlMAVO8Qq5l2zWYZcMvdAAAACXBIWXMAAA7EAAAOxAGV\nKw4bAAAAJElEQVQIHWNgQABGZSAbRJiETIYSDGxAFo0JVqfpHgxgAu4UAJvvEL+2zxBOAAAAAElF\nTkSuQmCC\n",
"text/latex": [
"$$11$$"
],
"text/plain": [
"11"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sym.prime(5) # the 5th prime is 11"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# let us generate all the first 10 ** 6 primes:\n",
"primes = [sym.prime(k) for k in range(1, 10 ** 6 + 1)]"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['2', '3', '5', '7', '11']"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# let us read in the primes from file:\n",
"with open(\"primes.csv\", 'r') as f:\n",
" primes_from_file = f.read().split('\\n')\n",
"primes_from_file[:5] # Seeing the first 5"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['15485843', '15485849', '15485857', '15485863', '']"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"primes_from_file[-5:] # Seeing the last 5"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"primes_from_file[:-1] == [str(p) for p in primes] # We need to ignore the blank line"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment