#!/usr/bin/env python # coding: utf-8 # 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[ ]: get_ipython().run_line_magic('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 :)