Differences between revisions 57 and 117 (spanning 60 versions)
 ⇤ ← Revision 57 as of 2013-04-24 18:45:37 → Size: 58970 Editor: travis Comment: ← 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 29: Line 29: html("

Double Precision Root Finding Using Bisection

")@interactdef _(f = cos(x) - x, a = float(0), b = float(1), eps=(-3,(-16..-1))): pretty_print(html("

Double Precision Root Finding Using Bisection

"))@interactdef _(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 35: Line 35: time c, intervals = bisect_method(f, a, b, eps) c, intervals = bisect_method(f, a, b, 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(c)         print "iterations =", len(intervals) print("root =", c)         print("f(c) = %r" % f(x=c))         print("iterations =", len(intervals)) Line 57: Line 57: http://sagenb.org/home/pub/2824/ https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2824-Double%20Precision%20Root%20Finding%20Using%20Newton's%20Method.sagews Line 69: Line 69: for i in xrange(maxiter): for i in range(maxiter): Line 77: Line 77: html("

Double Precision Root Finding Using Newton's Method

")@interactdef _(f = x^2 - 2, c = float(0.5), eps=(-3,(-16..-1)), interval=float(0.5)): pretty_print(html("

Double Precision Root Finding Using Newton's Method

"))@interactdef _(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)     time z, iterates = newton_method(f, c, eps)     print "root =", z     print "f(c) = %r"%f(x=z) print("eps = %s"%float(eps))     z, iterates = newton_method(f, c, eps)     print("root = {}".format(z))     print("f(c) = %r" % f(x=z)) Line 86: Line 86: print "iterations =", n     html(iterates) print("iterations = {}".format(n))     pretty_print(html(iterates)) Line 99: Line 99: http://sagenb.org/home/pub/2823/ https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2823.sagews Line 118: Line 118: html('

Tangent line grapher

') pretty_print(html('

Tangent line grapher

')) 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 129: Line 129: fmax = f.find_maximum_on_interval(prange[0], prange[1])[0]    fmin = f.find_minimum_on_interval(prange[0], prange[1])[0] fmax = f.find_local_maximum(prange[0], prange[1])[0]    fmin = f.find_local_minimum(prange[0], prange[1])[0] Line 146: Line 146: midys = [func(x_val) for x_val in midxs] midys = [func(x=x_val) for x_val in midxs] Line 152: Line 152: min_y = find_minimum_on_interval(func,a,b)[0]    max_y = find_maximum_on_interval(func,a,b)[0]    html('

Numerical integrals with the midpoint rule

')    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)[0])    print "Midpoint estimated answer: " + str(RDF(dx*sum([midys[q] for q in range(n)]))) min_y = min(0, find_local_minimum(func,a,b)[0])    max_y = max(0, find_local_maximum(func,a,b)[0])    pretty_print(html('

Numerical integrals with the midpoint rule

'))    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)[0]))    print("Midpoint estimated answer: " + str(RDF(dx*sum([midys[q] for q in range(n)])))) Line 166: Line 166: # by Nick Alexander (based on the work of Marshall Hampton) Line 176: Line 174: t = sage.calculus.calculus.var('t') t = var('t') Line 190: Line 188: x = find_maximum_on_interval(func, q*dx + a, q*dx + dx + a)[1] x = find_local_maximum(func, q*dx + a, q*dx + dx + a)[1] Line 193: Line 191: x = find_minimum_on_interval(func, q*dx + a, q*dx + dx + a)[1] x = find_local_minimum(func, q*dx + a, q*dx + dx + a)[1] Line 204: Line 202: min_y = min(0, find_minimum_on_interval(func,a,b)[0])    max_y = max(0, find_maximum_on_interval(func,a,b)[0])    # html('

Numerical integrals with the midpoint rule

') min_y = min(0, find_local_minimum(func,a,b)[0])    max_y = max(0, find_local_maximum(func,a,b)[0])    pretty_print(html('

Numerical integral with the {} rule

'.format(endpoint_rule))) Line 215: 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 221: 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*}
\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 242: Line 237: html('$r=' + latex(b+sin(a1*t)^n1 + cos(a2*t)^n2)+'$') pretty_print(html('$r=' + latex(b+sin(a1*t)^n1 + cos(a2*t)^n2)+'$')) Line 262: 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 329: Line 324: html('
$f = %s$
'%latex(f))    html('
$g = %s$
'%latex(g))    html('
$h = %s = %s$
'%(lbl, latex(h))) pretty_print(html('
$f = %s$
'%latex(f)))    pretty_print(html('
$g = %s$
'%latex(g)))    pretty_print(html('
$h = %s = %s$
'%(lbl, latex(h)))) Line 379: Line 374: vertical_alignment="bottom" if f(x0) < 0 else "top" ) vertical_alignment="bottom" if f(x=x0) < 0 else "top" ) Line 395: Line 390: fi = RR(f(xi))        fpi = RR(df(xi)) fi = RR(f(x=xi))        fpi = RR(df(x=xi)) Line 431: Line 426: vertical_alignment="bottom" if f(xip1) < 0 else "top" ) vertical_alignment="bottom" if f(x=xip1) < 0 else "top" ) Line 447: Line 442: html( t ) pretty_print(html( t )) Line 471: 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 502: Line 497: jacobian=abs(T.diff().det()).simplify_full() jacobian(u,v)=abs(T.diff().det()).simplify_full() Line 510: Line 505: html("$T(u,v)=%s$"%(latex(T(u,v))))    html("Jacobian: $%s$"%latex(jacobian(u,v)))    html("A very small region in $xy$ plane is approximately %0.4g times the size of the corresponding region in the $uv$ plane"%jacobian(u_val,v_val).n())    html.table([[uvplot,xyplot]])}}} pretty_print(html("$T(u,v)=%s$"%(latex(T(u,v)))))    pretty_print(html("Jacobian: $%s$"%latex(jacobian(u,v))))    pretty_print(html("A very small region in $xy$ plane is approximately %0.4g times the size of the corresponding region in the $uv$ plane"%jacobian(u_val,v_val).n()))    show(graphics_array([uvplot,xyplot]))}}} Line 526: 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 531: Line 527: html('$f(x)\;=\;%s$'%latex(f))    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 545: Line 541: html("

Limits: ε-δ

")html("This allows you to estimate which values of δ guarantee that f is within ε units of a limit.")html("
• Modify the value of f to choose a function.
• ")html("
• Modify the value of a to change the x-value where the limit is being estimated.
• ")html("
• Modify the value of L to change your guess of the limit.
• ")html("
• Modify the values of δ and ε to modify the rectangle.
")html("If the blue curve passes through the pink boxes, your values for δ and/or ε are probably wrong.")@interactdef 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)): pretty_print(html("

Limits: ε-δ

"))pretty_print(html("This allows you to estimate which values of δ guarantee that f is within ε units of a limit."))pretty_print(html("
• Modify the value of f to choose a function.
• "))pretty_print(html("
• Modify the value of a to change the x-value where the limit is being estimated.
• "))pretty_print(html("
• Modify the value of L to change your guess of the limit.
• "))pretty_print(html("
• Modify the values of δ and ε to modify the rectangle.
"))pretty_print(html("If the blue curve passes through the pink boxes, your values for δ and/or ε are probably wrong."))@interactdef 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 575: Line 571: html('

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

')    html('Below is the unit circle, so the length of the red line is |sin(x)|')    html('and the length of the blue line is |tan(x)| where x is the length of the arc.')     html('From the picture, we see that |sin(x)| $\le$ |x| $\le$ |tan(x)|.')    html('It follows easily from this that cos(x) $\le$ sin(x)/x $\le$ 1 when x is near 0.')    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 601: 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 603: 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 631: Line 627: sin,cos = math.sin,math.cos html("

The midpoint rule for a function of two variables

") pretty_print(html(r"

The midpoint rule for a function of two variables

")) Line 647: Line 643: html("$$\int_{"+str(R16(y_start))+"}^{"+str(R16(y_end))+"} "+ "\int_{"+str(R16(x_start))+"}^{"+str(R16(x_end))+"} "+func+"\ dx \ dy$$")    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 664: Line 660: from numpy import linspace from numpy import linspace, asanyarray, diff Line 716: Line 712: y_val = map(scaled_ff,x_val) y_val = [*map(scaled_ff,x_val)] Line 719: Line 715: html("$$\sum_{i=1}^{i=%s}w_i\left(%s\\right)= %s\\approx %s =\int_{-1}^{1}%s \,dx$$"%(n,        latex(f), approximation, integral, latex(scaled_func))) pretty_print(html(r"$$\sum_{i=1}^{i=%s}w_i\left(%s\right)= %s\approx %s =\int_{-1}^{1}%s \,dx$$"%(n,        latex(f), approximation, integral, latex(scaled_func)))) Line 722: 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 728: Line 724: == Vector Calculus, 2-D Motion FIXME == == Vector Calculus, 2-D Motion == Line 760: Line 756: path = parametric_plot( position(t).list(), (t, start, stop), color = "black" ) path = parametric_plot( position.list(), (t, start, stop), color = "black" ) Line 764: Line 760: velocity = derivative( position(t) )acceleration = derivative(velocity(t)) velocity = derivative(position, t)acceleration = derivative(velocity, t) Line 767: Line 763: speed_deriv = derivative(speed) speed_deriv = derivative(speed, t) Line 769: Line 765: dT = derivative(tangent(t)) dT = derivative(tangent, t) Line 790: Line 786: pos_tzero = position(t0) pos_tzero = position(t=t0) Line 794: 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 802: 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 829: 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 861: Line 857: assume(t, 'real') Line 878: Line 875: path = parametric_plot3d( position(t).list(), (t, start, stop), color = "black" ) path = parametric_plot3d( position.list(), (t, start, stop), color = "black" ) Line 882: Line 879: velocity = derivative( position(t), t)acceleration = derivative(velocity(t), t) velocity = derivative( position, t)acceleration = derivative(velocity, t) Line 887: Line 884: dT = derivative(tangent(t), t) dT = derivative(tangent, t) Line 890: Line 887: ## dB = derivative(binormal(t), t) ## dB = derivative(binormal, t) Line 911: Line 908: pos_tzero = position(t0) pos_tzero = position(t=t0) Line 915: 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 924: 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 954: 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 968: Line 965: == Multivariate Limits by Definition FIXME == == Multivariate Limits by Definition == Line 971: Line 968: http://www.sagenb.org/home/pub/2828/ http://sagenb.mc.edu/home/pub/97/ Line 981: Line 978: ## An updated version of this worksheet may be available at http://sagenb.mc.edu Line 986: Line 982: var('x,y,z')Rmin=1/10 Line 988: Line 985: @interactdef _(f=input_box(default=(x^3-y^3)/(x^2+y^2)),R=slider(0.1/10,Rmax,1/10,2),x0=(0),y0=(0)): @interact(layout=dict(top=[['f'],['x0'],['y0']], bottom=[['in_3d','curves','R','graphjmol']]))def _(f=input_box((x^2-y^2)/(x^2+y^2),width=30,label='$f(x)$'),        R=slider(Rmin,Rmax,1/10,Rmax,label=',   $R$'),        x0=input_box(0,width=10,label='$x_0$'),        y0=input_box(0,width=10,label='$y_0$'),        curves=checkbox(default=false,label='Show curves'),        in_3d=checkbox(default=false,label='3D'),        graphjmol=checkbox(default=true,label='Interactive graph')):    if graphjmol:        view_method = 'jmol'    else:        view_method = 'tachyon' Line 997: Line 1005: Line 999: Line 1007: limit = plot3d(g,(t,0,2*pi),(r,1/100,R),transformation=cylinder,rgbcolor=(0,1,0)) collapsing_surface = plot3d(g,(t,0,2*pi),(r,1/100,R),transformation=cylinder,rgbcolor=(0,1,0)) Line 1001: Line 1009: show(surface+limit)    print html('Enter $(x_0 ,y_0 )$ above and see what happens as R approaches zero.')    print html('The surface has a limit as $(x,y)$ approaches ('+str(x0)+','+str(y0)+') if the green region collapses to a point') G = surface+collapsing_surface    pretty_print(html('Enter $(x_0 ,y_0 )$ above and see what happens as $R \\rightarrow 0$.'))    pretty_print(html('The surface has a limit as $(x,y) \\rightarrow$ ('+str(x0)+','+str(y0)+') if the green region collapses to a point.'))# If checked, add a couple of curves on the surface corresponding to limit as x->x0 for y=x^(3/5),# and as y->y0 for x=y^(3/5). Should make this more robust but perhaps using # these relatively obtuse curves could eliminate problems.    if curves:        curve_x = parametric_plot3d([x0-t,y0-t^(3/5),f(x=x0-t,y=y0-t^(3/5))],(t,Rmin,Rmax),color='red',thickness=10)        curve_y = parametric_plot3d([x0+t^(3/5),y0+t,f(x=x0+t^(3/5),y=y0+t)],(t,Rmin,Rmax),color='red',thickness=10)        R2 = Rmin/4        G += arrow((x0-Rmin,y0-Rmin^(3/5),f(x=x0-Rmin,y=y0-Rmin^(3/5))),(x0-R2,y0-R2^(3/5),f(x=x0-R2,y=y0-R2^(3/5))),size=30 )        G += arrow((x0+Rmin^(3/5),y0+Rmin,f(x=x0+Rmin^(3/5),y=y0+Rmin)),(x0+R2^(3/5),y0+R2,f(x=x0+R2^(3/5),y=y0+R2)),size=30 )         limit_x = limit(f(x=x0-t,y=y0-t^(3/5)),t=0)        limit_y = limit(f(x=x0+t^(3/5),y=y0+t),t=0)        text_x = text3d(limit_x,(x0,y0,limit_x))        text_y = text3d(limit_y,(x0,y0,limit_y))        G += curve_x+curve_y+text_x+text_y              pretty_print(html('The red curves represent a couple of trajectories on the surface. If they do not meet, then'))        pretty_print(html('there is also no limit. (If computer hangs up, likely the computer can not do these limits.)'))        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)))            if in_3d:        show(G,stereo="redcyan",viewer=view_method)    else:        show(G,perspective_depth=true,viewer=view_method) Line 1025: Line 1060: Rmax=2@interactdef _(f=input_box(default=(x^3-y^3)/(x^2+y^2)),      N=slider(5,100,1,10,label='Number of Contours'),      x0=(0),y0=(0)):    print html('Enter $(x_0 ,y_0 )$ above and see what happens as the number of contour levels increases.')    print html('A surface will have a limit in the center of this graph provided there is not a sudden change in color there.') var('x,y,z,u')@interact(layout=dict(top=[['f'],['x0'],['y0']], bottom=[['N'],['R']]))def _(f=input_box(default=(x*y^2)/(x^2+y^4),width=30,label='$f(x)$'),        N=slider(5,100,1,10,label='Number of Contours'),        R=slider(0.1,1,0.01,1,label='Radius of circular neighborhood'),        x0=input_box(0,width=10,label='$x_0$'),        y0=input_box(0,width=10,label='$y_0$')):    pretty_print(html(r'Enter $(x_0 ,y_0 )$ above and see what happens as the number of contour levels $\rightarrow \infty$.'))    pretty_print(html('A surface will have a limit in the center of this graph provided there is not a sudden change in color there.'))# Need to make certain the min and max contour lines are not huge due to asymptotes. If so, clip and start contours at some reasonable# values so that there are a nice collection of contours to show around the desired point. Line 1035: Line 1076: surface += parametric_plot([R*cos(u),R*sin(u)],[0,2*pi],color='black')# Nice to use if f=x*y^2/(x^2 + y^4) # var('u')# surface += parametric_plot([u^2,u],[u,-1,1],color='black') Line 1036: Line 1081: show(limit_point+surface)}}} # show(limit_point+surface)    show(surface)}}} Line 1113: Line 1160: html(r'Function $f(x,y)=%s$ '%latex(f(x,y))) pretty_print(html(r'Function $f(x,y)=%s$ '%latex(f(x,y)))) Line 1127: Line 1174: html(r'
$\quad f(%s,%s)\quad $$\quad %s \quad f(%s,%s)\quad$$\quad %s$
\              '%(latex(x0),latex(y0),z0.n())) pretty_print(html(r'\              '%(latex(x0),latex(y0),z0.n()))) Line 1161: Line 1208: html('Points x0 and y0 are values where the exact value of the function \ pretty_print(html('Points x0 and y0 are values where the exact value of the function \ Line 1163: Line 1210: and approximation by differential at shifted point are compared.') and approximation by differential at shifted point are compared.')) Line 1181: Line 1228: html(r'Function $f(x,y)=%s \approx %s$ '%(latex(f(x,y)),latex(tangent(x,y))))  html(r' $f %s = %s$'%(latex((x0,y0)),latex(exact_value_ori)))  html(r'Shifted point $%s$'%latex(((x0+deltax),(y0+deltay))))  html(r'Value of the function in shifted point is $%s$'%f(x0+deltax,y0+deltay))  html(r'Value on the tangent plane in shifted point is $%s$'%latex(approx_value))  html(r'Error is $%s$'%latex(abs_error)) pretty_print(html(r'Function $f(x,y)=%s \approx %s$ '%(latex(f(x,y)),latex(tangent(x,y)))))  pretty_print(html(r' $f %s = %s$'%(latex((x0,y0)),latex(exact_value_ori))))  pretty_print(html(r'Shifted point $%s$'%latex(((x0+deltax),(y0+deltay)))))  pretty_print(html(r'Value of the function in shifted point is $%s$'%f(x0+deltax,y0+deltay)))  pretty_print(html(r'Value on the tangent plane in shifted point is $%s$'%latex(approx_value)))  pretty_print(html(r'Error is $%s$'%latex(abs_error))) Line 1204: Line 1251: order=(1..10)): order=[1..10]): Line 1223: Line 1270: html('$F(x,y) = e^{-(x^2+y^2)/2} \\cos(y) \\sin(x^2+y^2)$') pretty_print(html('$F(x,y) = e^{-(x^2+y^2)/2} \\cos(y) \\sin(x^2+y^2)$')) Line 1233: Line 1280: http://www.sagenb.org/home/pub/2829/ https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2829.sagews Line 1341: Line 1388: Note that this works in Sage cell, but causes a zip file error in Jupyter Line 1381: Line 1430: html(r'Lateral Surface $\approx$ %s'%str(line_integral_approx)) pretty_print(html(r'Lateral Surface $\approx$ %s'%str(line_integral_approx))) Line 1410: Line 1459: Note that this works in Sage cell, but causes a zip file error in Jupyter. Line 1429: Line 1480: http://www.sagenb.org/home/pub/2827/ https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2827-$%20%5Cint_%7BC%7D%20%5Cleft%20%5Clangle%20M,N,P%20%5Cright%20%5Crangle%20dr%20$%20=%20$%20%25s%20$.sagews Line 1458: Line 1509: u(t) = u    v(t) = v    w(t) = w Line 1465: Line 1519: html(r'

$\int_{C} \left \langle M,N,P \right \rangle dr$ = $%s$

'%latex(line_integral)) pretty_print(html(r'

$\int_{C} \left \langle M,N,P \right \rangle dr$ = $%s$

'%latex(line_integral)))

# Sage Interactions - Calculus

by William Stein

## Newton's Method

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

by William Stein

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.

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

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

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

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

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).

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)