In [ ]:
from sympy import *
init_printing()
x, y, z = symbols('x,y,z')


## Solve¶

Equation solving is both a common need also a common building block for more complicated symbolic algorithms.

Here we introduce the solve function

In [ ]:
solve(x**2 - 4, x)


Solve takes two arguments, an equation like $x^2 - 4$ and a variable on which we want to solve, like $x$.

Solve returns the values of the variable, $x$, for which the equation, $x^2 - 4$ equals 0.

### Exercise¶

What would the following code produce? Are you sure?

In [ ]:
solve(x**2 - 9 == 0, x)


## Symbolic use of solve¶

Results of solve don't need to be numeric, like [-2, 2]. We can use solve to perform algebraic manipulations. For example if we know a simple equation for the area of a square

area = height * width



we can solve this equation for any of the variables. For example how would we solve this system for the height, given the area and width?

In [ ]:
height, width, area = symbols('height,width,area')
solve(area - height*width, height)


Note that we would have liked to have written

solve(area == height * width, height)



But the == gotcha bites us. Instead we remember that solve expects an expression that is equal to zero, so we rewrite the equation

area = height * width



into the equation

0 = height * width - area



and that is what we give to solve.

### Exercise¶

Compute the radius of a sphere, given the volume. Reminder, the volume of a sphere of radius r is given by

$$V = \frac{4}{3}\pi r^3$$
In [ ]:
# Solve for the radius of a sphere, given the volume


You will probably get several solutions, this is fine. The first one is probably the one that you want.

## Substitution¶

We often want to substitute in one expression for another. For this we use the subs method

In [ ]:
x**2

In [ ]:
# Replace x with y
(x**2).subs({x: y})


### Exercise¶

Subsitute $x$ for $sin(x)$ in the equation $x^2 + 2\cdot x + 1$

In [ ]:
# Replace x with sin(x)


## Subs + Solve¶

We can use subs and solve together to plug the solution of one equation into another

In [ ]:
# Solve for the height of a rectangle given area and width

soln = solve(area - height*width, height)[0]
soln

In [ ]:
# Define perimeter of rectangle in terms of height and width

perimeter = 2*(height + width)

In [ ]:
# Substitute the solution for height into the expression for perimeter

perimeter.subs({height: soln})


### Exercise¶

In the last section you solved for the radius of a sphere given its volume

In [ ]:
V, r = symbols('V,r', real=True)
4*pi/3 * r**3

In [ ]:
solve(V - 4*pi/3 * r**3, r)[0]


Now lets compute the surface area of a sphere in terms of the volume. Recall that the surface area of a sphere is given by

$$4 \pi r^2$$
In [ ]:
(?).subs(?)


Does the expression look right? How would you expect the surface area to scale with respect to the volume? What is the exponent on $V$?

## Plotting¶

SymPy can plot expressions easily using the plot function. By default this links against matplotlib.

In [ ]:
%matplotlib inline

In [ ]:
plot(x**2)


### Exercise¶

In the last exercise you derived a relationship between the volume of a sphere and the surface area. Plot this relationship using plot.

In [ ]:
plot(?)


## Low dependencies¶

You may know that SymPy tries to be a very low-dependency project. Our user base is very broad. Some entertaining aspects result. For example, textplot.

In [ ]:
textplot(x**2, -3, 3)


### Exercise¶

Play with textplot and enjoy :)