Introduction

In this section we learn to do the following:

  • Import SymPy and set up pretty printing
  • Use mathematical operations like sqrt and sin
  • Make SymPy Symbols
  • Take derivatives of expressions
  • Simplify expressions

Preamble

Just like NumPy and Pandas replace functions like sin, cos, exp, and log to powerful numeric implementations, SymPy replaces sin, cos, exp and log with powerful mathematical implementations.

In [ ]:
from sympy import *
init_printing()  # Set up fancy printing
In [ ]:
import math
math.sqrt(2)
In [ ]:
sqrt(2)  # This `sqrt` comes from SymPy
In [ ]:
cos(0)

Exercise

Use the function acos on -1 to find when cosine equals -1. Try this same function with the math library. Do you get the same result?

In [ ]:
# Call acos on -1 to find where on the circle the x coordinate equals -1
In [ ]:
# Call `math.acos` on -1 to find the same result using the builtin math module.  
# Is the result the same?  
# What do you think `numpy.acos` give you?

Symbols

Just like the NumPy ndarray or the Pandas DataFrame, SymPy has the Symbol, which represents a mathematical variable.

We create symbols using the function symbols. Operations on these symbols don't do numeric work like with NumPy or Pandas, instead they build up mathematical expressions.

In [ ]:
x, y, z = symbols('x,y,z')
alpha, beta, gamma = symbols('alpha,beta,gamma')
In [ ]:
x + 1
In [ ]:
log(alpha ** beta) + gamma
In [ ]:
sin(x)**2 + cos(x)**2

Exercise

Use symbols to create two variables, mu and sigma.

In [ ]:
?, ? = symbols('?')

Exercise

Use exp, sqrt, and Python's arithmetic operators like +, -, *, ** to create the standard bell curve with SymPy objects

$$ e^{\frac{(x - \mu)^2}{ \sigma^2}} $$
In [ ]:
exp(?)

Derivatives

One of the most commonly requested operations in SymPy is the derivative. To take the derivative of an expression use the .diff method

In [ ]:
(x**2).diff(x)
In [ ]:
sin(x).diff(x)
In [ ]:
(x**2 + x*y + y**2).diff(x)
In [ ]:
(x**2 + x*y + y**2).diff(y)

Exercise

In the last section you made a normal distribution

In [ ]:
mu, sigma = symbols('mu,sigma')
In [ ]:
bell = exp((x - mu)**2 / sigma**2)
bell

Take the derivative of this expression with respect to $x$

In [ ]:
?.diff(?)

Exercise

There are three symbols in that expression. We normally are interested in the derivative with repspect to x, but we could just as easily ask for the derivative with respect to sigma. Try this now

In [ ]:
# Derivative of bell curve with respect to sigma

Exercise

The second derivative of an expression is just the derivative of the derivative. Chain .diff( ) calls to find the second and third derivatives of your expression.

In [ ]:
#  Find the second and third derivative of `bell`

Functions

SymPy has a number of useful routines to manipulate expressions. The most commonly used function is simplify.

In [ ]:
expr = sin(x)**2 + cos(x)**2
expr
In [ ]:
simplify(expr)

Exercise

In the last section you found the third derivative of the bell curve

In [ ]:
bell.diff(x).diff(x).diff(x)

You might notice that this expression has lots of shared structure. We can factor out some terms to simplify this expression.

Call simplify on this expression and observe the result.

In [ ]:
# Call simplify on the third derivative of the bell expression

Sympify

The sympify function transforms Python objects (ints, floats, strings) into SymPy objects (Integers, Reals, Symbols).

note the difference between sympify and simplify. These are not the same function.

In [ ]:
sympify('r * cos(theta)^2')

It's useful whenever you interact with the real world, or for quickly copy-pasting an expression from an external source.