In [4]:
from sympy import *
init_printing()
x, y, z = symbols('x,y,z')
In [7]:
solve(x**2 - 4, x)
Out[7]:
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.
In [ ]:
solve(x**2 - 9 == 0, x)
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 [10]:
height, width, area = symbols('height,width,area')
solve(area - height*width, height)
Out[10]:
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.
In [11]:
# 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.
In [14]:
x**2
Out[14]:
In [13]:
# Replace x with y
(x**2).subs({x: y})
Out[13]:
In [21]:
# Replace x with sin(x)
In [25]:
# Solve for the height of a rectangle given area and width
soln = solve(area - height*width, height)[0]
soln
Out[25]:
In [26]:
# Define perimeter of rectangle in terms of height and width
perimeter = 2*(height + width)
In [27]:
# Substitute the solution for height into the expression for perimeter
perimeter.subs({height: soln})
Out[27]:
In [34]:
V, r = symbols('V,r', real=True)
4*pi/3 * r**3
Out[34]:
In [36]:
solve(V - 4*pi/3 * r**3, r)[0]
Out[36]:
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 [49]:
(?).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$?
In [41]:
%matplotlib inline
In [42]:
plot(x**2)
Out[42]:
In [ ]:
plot(?)
In [50]:
textplot(x**2, -3, 3)