Differences between revisions 84 and 117 (spanning 33 versions)
 ⇤ ← Revision 84 as of 2017-03-18 14:37:51 → Size: 63362 Editor: mforets Comment: fix DeprecationWarning in Root Finding Using Bisection ← Revision 117 as of 2020-08-11 14:10:09 → ⇥ Size: 63144 Editor: kcrisman Comment: Deletions are marked like this. Additions are marked like this. Line 27: Line 27: raise ValueError, "f must have a sign change in the interval (%s,%s)"%(a,b) raise ValueError("f must have a sign change in the interval (%s,%s)"%(a,b)) Line 31: Line 31: def _(f = cos(x) - x, a = float(0), b = float(1), eps=(-3,[-16..-1])): def _(f = cos(x) - x, a = float(0), b = float(1), eps=(-3,(-16, -1))): Line 33: Line 33: print "eps = %s"%float(eps) print("eps = %s" % float(eps)) Line 37: Line 37: print "f must have opposite sign at the endpoints of the interval" print("f must have opposite sign at the endpoints of the interval") Line 40: Line 40: print "root =", c         print "f(c) = %r"%f(x=c)         print "iterations =", len(intervals) print("root =", c)         print("f(c) = %r" % f(x=c))         print("iterations =", len(intervals)) Line 69: Line 69: for i in xrange(maxiter): for i in range(maxiter): Line 79: Line 79: def _(f = x^2 - 2, c = float(0.5), eps=(-3,(-16..-1)), interval=float(0.5)): def _(f = x^2 - 2, c = float(0.5), eps=(-3,(-16, -1)), interval=float(0.5)): Line 81: Line 81: print "eps = %s"%float(eps) print("eps = %s"%float(eps)) Line 83: Line 83: print "root =", z     print "f(c) = %r"%f(x=z) print("root = {}".format(z))     print("f(c) = %r" % f(x=z)) Line 86: Line 86: print "iterations =", n print("iterations = {}".format(n)) Line 125: Line 125: tanf = f(x0i) + df(x0i)*(x-x0i) tanf = f(x=x0i) + df(x=x0i)*(x-x0i) Line 127: Line 127: print 'Tangent line is y = ' + tanf._repr_() print('Tangent line is y = ' + tanf._repr_()) Line 138: Line 138: #find_maximum_on_interval and find_minimum_on_interval are deprecated #use find_local_maximum find_local_minimum instead#see http://trac.sagemath.org/2607 for details -RRubalcaba Line 150: Line 146: midys = [func(x_val) for x_val in midxs] midys = [func(x=x_val) for x_val in midxs] Line 156: Line 152: min_y = min(0, sage.numerical.optimize.find_local_minimum(func,a,b))    max_y = max(0, sage.numerical.optimize.find_local_maximum(func,a,b)) min_y = min(0, find_local_minimum(func,a,b))    max_y = max(0, find_local_maximum(func,a,b)) Line 159: Line 155: pretty_print(html('$\int_{a}^{b}{f(x) dx} {\\approx} \sum_i{f(x_i) \Delta x}$'))    print "\n\nSage numerical answer: " + str(integral_numerical(func,a,b,max_points = 200))    print "Midpoint estimated answer: " + str(RDF(dx*sum([midys[q] for q in range(n)]))) pretty_print(html(r'$\int_{a}^{b}{f(x) dx} {\approx} \sum_i{f(x_i) \Delta x}$'))    print("\n\nSage numerical answer: " + str(integral_numerical(func,a,b,max_points = 200)))    print("Midpoint estimated answer: " + str(RDF(dx*sum([midys[q] for q in range(n)])))) Line 170: Line 166: # by Nick Alexander (based on the work of Marshall Hampton)#find_maximum_on_interval and find_minimum_on_interval are deprecated #use find_local_maximum find_local_minimum instead#see http://trac.sagemath.org/2607 for details -RRubalcaba Line 183: Line 174: t = sage.calculus.calculus.var('t') t = var('t') Line 214: Line 205: # html('

Numerical integrals with the midpoint rule

') pretty_print(html('

Numerical integral with the {} rule

'.format(endpoint_rule))) Line 222: Line 213: sum_html = "%s \cdot \\left[ %s \\right]" % (dx, ' + '.join([ "f(%s)" % cap(i) for i in xs ]))    num_html = "%s \cdot \\left[ %s \\right]" % (dx, ' + '.join([ str(cap(i)) for i in ys ])) sum_html = "%s \\cdot \\left[ %s \\right]" % (dx, ' + '.join([ "f(%s)" % cap(i) for i in xs ]))    num_html = "%s \\cdot \\left[ %s \\right]" % (dx, ' + '.join([ str(cap(i)) for i in ys ])) Line 228: Line 219: html(r'''
\begin{align*}   \int_{a}^{b} {f(x) \, dx} & = %s \\\   \sum_{i=1}^{%s} {f(x_i) \, \Delta x}      & = %s \\\   & = %s \\\   & = %s .    \end{align*}
''' % (numerical_answer, number_of_subdivisions, sum_html, num_html, estimated_answer)) pretty_print(html(r'''
\begin{align*}   \int_{a}^{b} {f(x) \, dx} & = %s \\\   \sum_{i=1}^{%s} {f(x_i) \, \Delta x} & = %s \\\   & = %s \\\   & = %s . \end{align*}
'''                       % (numerical_answer, number_of_subdivisions, sum_html, num_html, estimated_answer))) Line 269: Line 257: except TypeError, msg:        print msg[-200:]        print "Unable to make sense of f,g, or a as symbolic expressions." except TypeError as msg:        print(msg[-200:])        print("Unable to make sense of f,g, or a as symbolic expressions.") Line 386: Line 374: vertical_alignment="bottom" if f(x0) < 0 else "top" ) vertical_alignment="bottom" if f(x=x0) < 0 else "top" ) Line 402: Line 390: fi = RR(f(xi))        fpi = RR(df(xi)) fi = RR(f(x=xi))        fpi = RR(df(x=xi)) Line 438: Line 426: vertical_alignment="bottom" if f(xip1) < 0 else "top" ) vertical_alignment="bottom" if f(x=xip1) < 0 else "top" ) Line 454: Line 442: html( t ) pretty_print(html( t )) Line 458: Line 446: == Coordinate Transformations (FIXME in Jupyter) == == Coordinate Transformations == Line 478: Line 466: u_percent=slider(0,1,0.05,label="u", default=.7),         v_percent=slider(0,1,0.05,label="v", default=.7), u_percent=slider(0,1,0.05,label="u", default=.7),         v_percent=slider(0,1,0.05,label="v", default=.7), Line 509: Line 497: jacobian=abs(T.diff().det()).simplify_full() jacobian(u,v)=abs(T.diff().det()).simplify_full() Line 520: Line 508: pretty_print(table([[uvplot,xyplot]])) show(graphics_array([uvplot,xyplot])) Line 534: Line 522: dot = point((x0,f(x0)),pointsize=80,rgbcolor=(1,0,0))@interactdef _(order=(1..12)): dot = point((x0,f(x=x0)),pointsize=80,rgbcolor=(1,0,0))@interactdef _(order=[1..12]): Line 539: Line 527: pretty_print(html('$f(x)\;=\;%s$'%latex(f)))    pretty_print(html('$\hat{f}(x;%s)\;=\;%s+\mathcal{O}(x^{%s})$'%(x0,latex(ft),order+1))) pretty_print(html(r'$f(x)\;=\;%s$'%latex(f)))    pretty_print(html(r'$\hat{f}(x;%s)\;=\;%s+\mathcal{O}(x^{%s})$'%(x0,latex(ft),order+1))) Line 561: Line 549: def delta_epsilon(f = input_box(default=(x^2-x)/(x-1)), a=input_box(default=1), L = input_box(default=1), delta=input_box(label="δ",default=0.1), epsilon=input_box(label="ε",default=0.1), xm=input_box(label="xmin",default=-1), xM=input_box(label="xmax",default=4)): def delta_epsilon(f = input_box(default=(x^2-x)/(x-1), label="$f$"), a=input_box(default=1, label="$a$"), L = input_box(default=1, label="$L$"), delta=input_box(label=r"$\delta$",default=0.1), epsilon=input_box(label=r"$\varepsilon$",default=0.1), xm=input_box(label=r"$x_{min}$",default=-1), xM=input_box(label=r"$x_{max}$",default=4)): Line 583: Line 571: pretty_print(html('

A graphical illustration of $\lim_{x -> 0} \sin(x)/x =1$

'))    pretty_print(html('Below is the unit circle, so the length of the red line is |sin(x)|'))    pretty_print(html('and the length of the blue line is |tan(x)| where x is the length of the arc.'))    pretty_print(html('From the picture, we see that |sin(x)| $\le$ |x| $\le$ |tan(x)|.'))    pretty_print(html('It follows easily from this that cos(x) $\le$ sin(x)/x $\le$ 1 when x is near 0.'))    pretty_print(html('As $\lim_{x ->0} \cos(x) =1$, we conclude that $\lim_{x -> 0} \sin(x)/x =1$.')) pretty_print(html(r'

A graphical illustration of $\lim_{x -> 0} \sin(x)/x =1$

'))    pretty_print(html(r'Below is the unit circle, so the length of the red line is |sin(x)|'))    pretty_print(html(r'and the length of the blue line is |tan(x)| where x is the length of the arc.'))    pretty_print(html(r'From the picture, we see that |sin(x)| $\le$ |x| $\le$ |tan(x)|.'))    pretty_print(html(r'It follows easily from this that cos(x) $\le$ sin(x)/x $\le$ 1 when x is near 0.'))    pretty_print(html(r'As $\lim_{x ->0} \cos(x) =1$, we conclude that $\lim_{x -> 0} \sin(x)/x =1$.')) Line 609: Line 597: def quads(q = selector(quadrics.keys()), a = slider(0,5,1/2,default = 1)): def quads(q = selector(list(quadrics)), a = slider(0,5,1/2,default = 1)): Line 611: Line 599: if a==0 or q=='Cone': html('
$'+latex(f)+' \$'+ '(degenerate)
')    else: html('
$'+latex(f)+'$
') if a==0 or q=='Cone': pretty_print(latex(f), "   (degenerate)")    else: pretty_print(latex(f)) Line 640: Line 628: pretty_print(html("

The midpoint rule for a function of two variables

")) pretty_print(html(r"

The midpoint rule for a function of two variables

")) Line 655: Line 643: pretty_print(html("$$\int_{"+str(R16(y_start))+"}^{"+str(R16(y_end))+"} "+ "\int_{"+str(R16(x_start))+"}^{"+str(R16(x_end))+"} "+func+"\ dx \ dy$$"))    pretty_print(html('

Numerical approximation: ' + str(num_approx)+'

')) pretty_print(html(r"$\int_{"+str(R16(y_start))+r"}^{"+str(R16(y_end))+r"} "+ r"\int_{"+str(R16(x_start))+r"}^{"+str(R16(x_end))+r"} "+latex(SR(func))+r"\ dx \ dy$"))    pretty_print(html(r'

Numerical approximation: ' + str(num_approx)+r'

')) Line 672: Line 660: from numpy import linspace from numpy import linspace, asanyarray, diff Line 724: Line 712: y_val = map(scaled_ff,x_val) y_val = [*map(scaled_ff,x_val)] Line 727: Line 715: pretty_print(html("$$\sum_{i=1}^{i=%s}w_i\left(%s\\right)= %s\\approx %s =\int_{-1}^{1}%s \,dx$$"%(n, pretty_print(html(r"$$\sum_{i=1}^{i=%s}w_i\left(%s\right)= %s\approx %s =\int_{-1}^{1}%s \,dx$$"%(n, Line 730: Line 718: print "Trapezoid: %s, Simpson: %s, \nMethod: %s, Real: %s"%tuple(error_data) print("Trapezoid: %s, Simpson: %s, \nMethod: %s, Real: %s" % tuple(error_data)) Line 768: Line 756: path = parametric_plot( position(t).list(), (t, start, stop), color = "black" ) path = parametric_plot( position.list(), (t, start, stop), color = "black" ) Line 772: Line 760: velocity = derivative(position(t), t)acceleration = derivative(velocity(t), t) velocity = derivative(position, t)acceleration = derivative(velocity, t) Line 777: Line 765: dT = derivative(tangent(t), t) dT = derivative(tangent, t) Line 798: Line 786: pos_tzero = position(t0) pos_tzero = position(t=t0) Line 802: Line 790: speed_component = speed(t0)    tangent_component = speed_deriv(t0)    normal_component = sqrt( acceleration(t0).norm()^2 - tangent_component^2 ) speed_component = speed(t=t0)    tangent_component = speed_deriv(t=t0)    normal_component = sqrt( acceleration(t=t0).norm()^2 - tangent_component^2 ) Line 810: Line 798: tan = arrow(pos_tzero, pos_tzero + tangent(t0), rgbcolor=(0,1,0) )    vel = arrow(pos_tzero, pos_tzero + velocity(t0), rgbcolor=(0,0.5,0))    nor = arrow(pos_tzero, pos_tzero + normal(t0), rgbcolor=(0.5,0,0))    acc = arrow(pos_tzero, pos_tzero + acceleration(t0), rgbcolor=(1,0,1))    tancomp = arrow(pos_tzero, pos_tzero + tangent_component*tangent(t0), rgbcolor=(1,0,1) )    norcomp = arrow(pos_tzero, pos_tzero + normal_component*normal(t0), rgbcolor=(1,0,1)) tan = arrow(pos_tzero, pos_tzero + tangent(t=t0), rgbcolor=(0,1,0) )    vel = arrow(pos_tzero, pos_tzero + velocity(t=t0), rgbcolor=(0,0.5,0))    nor = arrow(pos_tzero, pos_tzero + normal(t=t0), rgbcolor=(0.5,0,0))    acc = arrow(pos_tzero, pos_tzero + acceleration(t=t0), rgbcolor=(1,0,1))    tancomp = arrow(pos_tzero, pos_tzero + tangent_component*tangent(t=t0), rgbcolor=(1,0,1) )    norcomp = arrow(pos_tzero, pos_tzero + normal_component*normal(t=t0), rgbcolor=(1,0,1)) Line 837: Line 825: print "Position vector defined as r(t)=", position(t)    print "Speed is ", N(speed(t0))    print "Curvature is ", N(curvature) print("Position vector defined as r(t)={}".format(position))    print("Speed is {}".format(N(speed(t=t0))))    print("Curvature is {}".format(N(curvature))) Line 848: Line 836: == Vector Calculus, 3-D Motion (FIXME) == == Vector Calculus, 3-D Motion == Line 869: Line 857: assume(t, 'real') Line 886: Line 875: path = parametric_plot3d( position(t).list(), (t, start, stop), color = "black" ) path = parametric_plot3d( position.list(), (t, start, stop), color = "black" ) Line 890: Line 879: velocity = derivative( position(t), t)acceleration = derivative(velocity(t), t) velocity = derivative( position, t)acceleration = derivative(velocity, t) Line 895: Line 884: dT = derivative(tangent(t), t) dT = derivative(tangent, t) Line 898: Line 887: ## dB = derivative(binormal(t), t) ## dB = derivative(binormal, t) Line 919: Line 908: pos_tzero = position(t0) pos_tzero = position(t=t0) Line 923: Line 912: speed_component = speed(t0)    tangent_component = speed_deriv(t0)    normal_component = sqrt( acceleration(t0).norm()^2 - tangent_component^2 ) speed_component = speed(t=t0)    tangent_component = speed_deriv(t=t0)    normal_component = sqrt( acceleration(t=t0).norm()^2 - tangent_component^2 ) Line 932: Line 921: tan = arrow3d(pos_tzero, pos_tzero + tangent(t0), rgbcolor=(0,1,0) )    vel = arrow3d(pos_tzero, pos_tzero + velocity(t0), rgbcolor=(0,0.5,0))    nor = arrow3d(pos_tzero, pos_tzero + normal(t0), rgbcolor=(0.5,0,0))    bin = arrow3d(pos_tzero, pos_tzero + binormal(t0), rgbcolor=(0,0,0.5))    acc = arrow3d(pos_tzero, pos_tzero + acceleration(t0), rgbcolor=(1,0,1))    tancomp = arrow3d(pos_tzero, pos_tzero + tangent_component*tangent(t0), rgbcolor=(1,0,1) )    norcomp = arrow3d(pos_tzero, pos_tzero + normal_component*normal(t0), rgbcolor=(1,0,1)) tan = arrow3d(pos_tzero, pos_tzero + tangent(t=t0), rgbcolor=(0,1,0) )    vel = arrow3d(pos_tzero, pos_tzero + velocity(t=t0), rgbcolor=(0,0.5,0))    nor = arrow3d(pos_tzero, pos_tzero + normal(t=t0), rgbcolor=(0.5,0,0))    bin = arrow3d(pos_tzero, pos_tzero + binormal(t=t0), rgbcolor=(0,0,0.5))    acc = arrow3d(pos_tzero, pos_tzero + acceleration(t=t0), rgbcolor=(1,0,1))    tancomp = arrow3d(pos_tzero, pos_tzero + tangent_component*tangent(t=t0), rgbcolor=(1,0,1) )    norcomp = arrow3d(pos_tzero, pos_tzero + normal_component*normal(t=t0), rgbcolor=(1,0,1)) Line 962: Line 951: print "Position vector: r(t)=", position(t)    print "Speed is ", N(speed(t0))    print "Curvature is ", N(curvature)    ## print "Torsion is ", N(torsion)    print    print "Right-click on graphic to zoom to 400%"    print "Drag graphic to rotate" print("Position vector: r(t)=", position)    print("Speed is ", N(speed(t=t0)))    print("Curvature is ", N(curvature))    ## print("Torsion is ", N(torsion))    print()    print("Right-click on graphic to zoom to 400%")    print("Drag graphic to rotate") Line 1044: Line 1033: pretty_print(html('\n
$\lim_{(x,?)\\rightarrow(x_0,y_0)} f(x,y) =%s$'%str(limit_x)+' and $\lim_{(?,y)\\rightarrow(x_0,y_0)} f(x,y) =%s$
'%str(limit_y))) pretty_print(html(r'
$\lim_{(x,?)\rightarrow(x_0,y_0)} f(x,y) =%s$'%str(limit_x)+r' and $\lim_{(?,y)\rightarrow(x_0,y_0)} f(x,y) =%s$
'%str(limit_y))) Line 1055: Line 1044: Line 1081: Line 1069: pretty_print(html('Enter $(x_0 ,y_0 )$ above and see what happens as the number of contour levels $\\rightarrow \infty$.')) pretty_print(html(r'Enter $(x_0 ,y_0 )$ above and see what happens as the number of contour levels $\rightarrow \infty$.')) Line 1094: Line 1082: pretty_print(table([[surface],['hi']])) show(surface) Line 1263: Line 1251: order=(1..10)): order=[1..10]): Line 1395: Line 1383: == Lateral Surface Area (FIXME in Jupyter) == == Lateral Surface Area == Line 1400: Line 1388: Note that this works in Sage cell, but causes a zip file error in Jupyter Line 1467: Line 1457: == Parametric surface example (FIXME in Jupyter) == == Parametric surface example == Line 1469: Line 1459: Note that this works in Sage cell, but causes a zip file error in Jupyter. Line 1517: Line 1509: u(t) = u    v(t) = v    w(t) = w

# Sage Interactions - Calculus

## Root Finding Using Bisection

by William Stein ## Newton's Method

Note that there is a more complicated Newton's method below.

by William Stein ## A contour map and 3d plot of two inverse distance functions

by William Stein ## A simple tangent line grapher

by Marshall Hampton ## Numerical integrals with the midpoint rule

by Marshall Hampton ## Numerical integrals with various rules

by Nick Alexander (based on the work of Marshall Hampton) ## Some polar parametric curves

by Marshall Hampton. This is not very general, but could be modified to show other families of polar curves. ## Function tool

Enter symbolic functions f, g, and a, a range, then click the appropriate button to compute and plot some combination of f, g, and a along with f and g. This is inspired by the Matlab funtool GUI. ## Newton-Raphson Root Finding

by Neal Holtz

This allows user to display the Newton-Raphson procedure one step at a time. It uses the heuristic that, if any of the values of the controls change, then the procedure should be re-started, else it should be continued. ## Coordinate Transformations

by Jason Grout  ## Taylor Series

by Harald Schilly ## Illustration of the precise definition of a limit

by John Perry

I'll break tradition and put the image first. Apologies if this is Not A Good Thing. ## A graphical illustration of sin(x)/x -> 1 as x-> 0

by Wai Yan Pong ## Quadric Surface Plotter

by Marshall Hampton. This is pretty simple, so I encourage people to spruce it up. In particular, it isn't set up to show all possible types of quadrics. ## The midpoint rule for numerically integrating a function of two variables

by Marshall Hampton ## Gaussian (Legendre) quadrature

by Jason Grout

The output shows the points evaluated using Gaussian quadrature (using a weight of 1, so using Legendre polynomials). The vertical bars are shaded to represent the relative weights of the points (darker = more weight). The error in the trapezoid, Simpson, and quadrature methods is both printed out and compared through a bar graph. The "Real" error is the error returned from scipy on the definite integral.  ## Vector Calculus, 2-D Motion

By Rob Beezer

A fast_float() version is available in a worksheet ## Vector Calculus, 3-D Motion

by Rob Beezer

Available as a worksheet ## Multivariate Limits by Definition

by John Travis  ## Directional Derivatives

This interact displays graphically a tangent line to a function, illustrating a directional derivative (the slope of the tangent line). ## 3D graph with points and curves

By Robert Marik

This sagelet is handy when showing local, constrained and absolute maxima and minima in two variables. Available as a worksheet ## Approximating function in two variables by differential

by Robert Marik ## Taylor approximations in two variables

by John Palmieri

This displays the nth order Taylor approximation, for n from 1 to 10, of the function sin(x2 + y2) cos(y) exp(-(x2+y2)/2). ## Volumes over non-rectangular domains

by John Travis ## Lateral Surface Area

by John Travis

Note that this works in Sage cell, but causes a zip file error in Jupyter ## Parametric surface example

by Marshall Hampton

Note that this works in Sage cell, but causes a zip file error in Jupyter. ## Line Integrals in 3D Vector Field

by John Travis interact/calculus (last edited 2020-08-11 14:10:09 by kcrisman)