Blog

Sagemath for calculus

I have used several geogebra applets in my calculus class, but there’s always things that you wanna do that there’s no applet out there for, or you can’t modify them etc. So, I decided to write my own code for computer algebra applications in sage, and that I can share it with students so that they can play around with it, and modify it. It makes learning more fun. I have to look into interactive option for sage, then I can actually get rid of the animations. For now, I’m just going to post a few simple codes that get the work done: Use Sage Cloud (requires login) or Sage Cell server (does not require login) to run the following codes

# Use Newton's method to approximate a root of a function

def Newtons_method(f,a,n):
    var('x')
    f(x) = f
    guess = a
    fprime = f.derivative(x)
    g(x) = x-f(x)/fprime(x)
    N = n
    Sguess = [guess]
    print "Initial Guess: %20.16f"%(guess)
    for i in range(0,N):
        Nguess = g(guess)
        print "Next Guess:    %20.16f"%(Nguess)
        Sguess += [Nguess]
        guess = Nguess.n(digits=15)

    print "An estimate of the root is %20.16f"%(Sguess[N])

# Usage:
Newtons_method(x^2-57,9,5)
########################################################################

# Use Newton's method to approximate a root of a function with animation

var('x')

f(x) = x^2 - 1

xmin = 0
xmax = 3.1
ymin = -3
ymax = 9
guess = 3
fprime = f.derivative(x)
g(x) = x-f(x)/fprime(x)
N = 5
Sguess = [guess]
print "Initial Guess: %20.16f"%(guess)
P = plot(f(x), (xmin,xmax), ymin= ymin, ymax= ymax,color = "green",thickness=3)
Frames = [P]

for i in range(0,N):
    P += plot(point((guess,0),size = 20,rgbcolor=(0, 0, 1)))
    Frames += [P]
    P += plot(point((guess,f(guess)),size = 20,rgbcolor=(1, 0, 0)))
    Frames += [P]
    h = f(guess) + fprime(guess)*(x-guess)
    P += plot(h, (xmin,xmax),ymin= ymin, ymax= ymax, color = "blue")
    Frames += [P]
    Nguess = g(guess)
    print "Next Guess:    %20.16f"%(Nguess)
    Sguess += [Nguess]
    guess = Nguess.n(digits=15)

print "An estimate of the root is %20.16f"%(Sguess[N])

animate(Frames)
########################################################################

# Finding Taylor polynomial of a function with animation

var('x')
from sage.plot.colors import rainbow
n = 20
xmin = -10
xmax = 10

g = sin(x)

P = plot(g, (xmin,xmax), color = rainbow(n+1)[0],thickness=3)
Frames = []
for i in range(n):
    h = g.taylor(x, 0, i)
    P += plot(h, (xmin,xmax), color = rainbow(n+1)[i+1])
    Frames += [P]

m = 0
M = 12
a = animate(Frames,xmin=m,xmax=M,ymin=-1.5,ymax=1.5)
a
########################################################################
# Plot 3D with cross sections

var('x,y,z') 
f = x^2 + y^2
R = 4
sum([plot3d(f,(x,-R,R),(y,level,level+0.1),frame=False) for level in srange(-R,R,1)]+[implicit_plot3d(f==z,(x,-R,R),(y,-R,R),(z,-1,32),color='khaki',opacity=0.7,frame=False)])
########################################################################
# Plot 3D with level curves

var('x,y,z') 
f = x^2 + y^2
R = 4
sum([implicit_plot3d(f==level,(x,-R,R),(y,-R,R),(z,level,level+0.1),frame=False) for level in srange(0,16,2)]+[implicit_plot3d(f==z,(x,-R,R),(y,-R,R),(z,-1,16),color='khaki',opacity=0.7,frame=False)])

Leave a comment