Differences between revisions 44 and 88 (spanning 44 versions)
Revision 44 as of 2012-03-16 06:46:28
Size: 57805
Editor: jason
Comment:
Revision 88 as of 2017-03-18 15:01:26
Size: 63134
Editor: mforets
Comment: fix DeprecationWarning and an AttributeError in Numerical integrals with the midpoint rule
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
{{{#!html
<script type="text/javascript" src="http://aleph.sagemath.org/static/jquery.min.js"></script>
<script type="text/javascript" src="http://aleph.sagemath.org/embedded_sagecell.js"></script>
    <script>
$(function() {
    var makecells = function() {
        sagecell.makeSagecell({
            inputLocation: '#interact1',
            evalButtonText: 'Interact'});
    }
    sagecell.init(makecells);
})</script>

}}}
Line 24: Line 10:
{{{#!html
<div id="interact1"><script type="text/code">
{{{#!sagecell
Line 44: Line 29:
html("<h1>Double Precision Root Finding Using Bisection</h1>")
@interact
def _(f = cos(x) - x, a = float(0), b = float(1), eps=(-3,(-16..-1))):
pretty_print(html("<h1>Double Precision Root Finding Using Bisection</h1>"))
@interact
def _(f = cos(x) - x, a = float(0), b = float(1), eps=(-3,(-16, -1))):
Line 50: Line 35:
         time c, intervals = bisect_method(f, a, b, eps)          c, intervals = bisect_method(f, a, b, eps)
Line 56: Line 41:
         print "f(c) = %r"%f(c)          print "f(c) = %r"%f(x=c)
Line 64: Line 49:
</script></div>
Line 73: 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

{{{#!sagecell
Line 93: Line 77:
html("<h1>Double Precision Root Finding Using Newton's Method</h1>")
@interact
def _(f = x^2 - 2, c = float(0.5), eps=(-3,(-16..-1)), interval=float(0.5)):
pretty_print(html("<h1>Double Precision Root Finding Using Newton's Method</h1>"))
@interact
def _(f = x^2 - 2, c = float(0.5), eps=(-3,(-16, -1)), interval=float(0.5)):
Line 98: Line 82:
     time z, iterates = newton_method(f, c, eps)      z, iterates = newton_method(f, c, eps)
Line 103: Line 87:
     html(iterates)      pretty_print(html(iterates))
Line 115: Line 99:
http://sagenb.org/home/pub/2823/

{{{
https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2823.sagews

{{{#!sagecell
Line 133: Line 117:
{{{
html('<h2>Tangent line grapher</h2>')
{{{#!sagecell
pretty_print(html('<h2>Tangent line grapher</h2>'))
Line 141: Line 125:
    tanf = f(x0i) + df(x0i)*(x-x0i)     tanf = f(x=x0i) + df(x=x0i)*(x-x0i)
Line 145: 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 153: Line 137:
{{{ {{{#!sagecell
Line 162: Line 146:
    midys = [func(x_val) for x_val in midxs]     midys = [func(x=x_val) for x_val in midxs]
Line 168: Line 152:
    min_y = find_minimum_on_interval(func,a,b)[0]
    max_y = find_maximum_on_interval(func,a,b)[0]
    html('<h3>Numerical integrals with the midpoint rule</h3>')
    html('$\int_{a}^{b}{f(x) dx} {\\approx} \sum_i{f(x_i) \Delta x}$')
    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('<h3>Numerical integrals with the midpoint rule</h3>'))
    pretty_print(html('$\int_{a}^{b}{f(x) dx} {\\approx} \sum_i{f(x_i) \Delta x}$'))
Line 181: Line 165:
{{{ {{{#!sagecell
Line 183: Line 167:
#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 206: Line 193:
            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 209: Line 196:
            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 220: Line 207:
    min_y = min(0, find_minimum_on_interval(func,a,b)[0])
    max_y = max(0, find_maximum_on_interval(func,a,b)[0])
    min_y = min(0, find_local_minimum(func,a,b)[0])
    max_y = max(0, find_local_maximum(func,a,b)[0])
Line 254: Line 241:
{{{ {{{#!sagecell
Line 258: Line 245:
    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 267: Line 254:
{{{ {{{#!sagecell
Line 345: Line 332:
    html('<center><font color="red">$f = %s$</font></center>'%latex(f))
    html('<center><font color="green">$g = %s$</font></center>'%latex(g))
    html('<center><font color="blue"><b>$h = %s = %s$</b></font></center>'%(lbl, latex(h)))
    pretty_print(html('<center><font color="red">$f = %s$</font></center>'%latex(f)))
    pretty_print(html('<center><font color="green">$g = %s$</font></center>'%latex(g)))
    pretty_print(html('<center><font color="blue"><b>$h = %s = %s$</b></font></center>'%(lbl, latex(h))))
Line 365: Line 352:
{{{ {{{#!sagecell
Line 467: Line 454:
== Coordinate Transformations == == Coordinate Transformations (FIXME in Jupyter) ==
Line 471: Line 458:
{{{ {{{#!sagecell
Line 473: Line 460:
# polar coordinates
#(x,y)=(u*cos(v),u*sin(v)); (u_range,v_range)=([0..6],[0..2*pi,step=pi/12])

# weird example
(x,y)=(u^2-v^2,u*v+cos(u*v)); (u_range,v_range)=([-5..5],[-5..5])

thickness=4
square_length=.05
Line 476: Line 472:
def trans(x=input_box(u^2-v^2, label="x=",type=SR), \
         y=input_box(u*v+cos(u*v), label="y=",type=SR), \
         t_val=slider(0,10,0.2,6, label="Length of curves"), \
def trans(x=input_box(x, label="x",type=SR),
         y=input_box(y, label="y",type=SR),
Line 481: Line 476:
         u_range=input_box(range(-5,5,1), label="u lines"),
         v_range=input_box(range(-5,5,1), label="v lines")):
     thickness=4
     u_val = min(u_range)+(max(u_range)-min(u_range))*u_percent
     v_val = min(v_range)+(max(v_range)-min(v_range))*v_percent
     t_min = -t_val
     t_max = t_val
     g1=sum([parametric_plot((i,v), (v,t_min,t_max), rgbcolor=(1,0,0)) for i in u_range])
     g2=sum([parametric_plot((u,i), (u,t_min,t_max), rgbcolor=(0,0,1)) for i in v_range])
     vline_straight=parametric_plot((u,v_val), (u,t_min,t_max), rgbcolor=(0,0,1), linestyle='-',thickness=thickness)
     uline_straight=parametric_plot((u_val, v), (v,t_min,t_max),rgbcolor=(1,0,0), linestyle='-',thickness=thickness)
 
     (g1+g2+vline_straight+uline_straight).save("uv_coord.png",aspect_ratio=1, figsize=[5,5], axes_labels=['$u$','$v$'])
     xuv = fast_float(x,'u','v')
     yuv = fast_float(y,'u','v')
     xvu = fast_float(x,'v','u')
     yvu = fast_float(y,'v','u')
     g3=sum([parametric_plot((partial(xuv,i),partial(yuv,i)), (v,t_min,t_max), rgbcolor=(1,0,0)) for i in u_range])
     g4=sum([parametric_plot((partial(xvu,i),partial(yvu,i)), (u,t_min,t_max), rgbcolor=(0,0,1)) for i in v_range])
     uline=parametric_plot((partial(xuv,u_val),partial(yuv,u_val)),(v,t_min,t_max),rgbcolor=(1,0,0), linestyle='-',thickness=thickness)
     vline=parametric_plot((partial(xvu,v_val),partial(yvu,v_val)), (u,t_min,t_max), rgbcolor=(0,0,1), linestyle='-',thickness=thickness)
     (g3+g4+vline+uline).save("xy_coord.png", aspect_ratio=1, figsize=[5,5], axes_labels=['$x$','$y$'])
     print jsmath("x=%s, \: y=%s"%(latex(x), latex(y)))
     print "<html><table><tr><td><img src='cell://uv_coord.png'/></td><td><img src='cell://xy_coord.png'/></td></tr></table></html>"
         t_val=slider(0,10,0.2,6, label="Length"),
         u_range=input_box(u_range, label="u lines"),
         v_range=input_box(v_range, label="v lines")):

    x(u,v)=x
    y(u,v)=y
    u_val = min(u_range)+(max(u_range)-min(u_range))*u_percent
    v_val = min(v_range)+(max(v_range)-min(v_range))*v_percent
    t_min = -t_val
    t_max = t_val
    uvplot=sum([parametric_plot((i,v), (v,t_min,t_max), color='red',axes_labels=['u','v'],figsize=[5,5]) for i in u_range])
    uvplot+=sum([parametric_plot((u,i), (u,t_min,t_max), color='blue',axes_labels=['u','v']) for i in v_range])
    uvplot+=parametric_plot((u,v_val), (u,t_min,t_max), rgbcolor=(0,0,1), linestyle='-',thickness=thickness)
    uvplot+=parametric_plot((u_val, v), (v,t_min,t_max),rgbcolor=(1,0,0), linestyle='-',thickness=thickness)
    pt=vector([u_val,v_val])
    du=vector([(t_max-t_min)*square_length,0])
    dv=vector([0,(t_max-t_min)*square_length])
    uvplot+=polygon([pt,pt+dv,pt+du+dv,pt+du],color='purple',alpha=0.7)
    uvplot+=line([pt,pt+dv,pt+du+dv,pt+du],color='green')

    T(u,v)=(x,y)
    xuv = fast_float(x,'u','v')
    yuv = fast_float(y,'u','v')
    xvu = fast_float(x,'v','u')
    yvu = fast_float(y,'v','u')
    xyplot=sum([parametric_plot((partial(xuv,i),partial(yuv,i)), (v,t_min,t_max), color='red', axes_labels=['x','y'],figsize=[5,5]) for i in u_range])
    xyplot+=sum([parametric_plot((partial(xvu,i),partial(yvu,i)), (u,t_min,t_max), color='blue') for i in v_range])
    xyplot+=parametric_plot((partial(xuv,u_val),partial(yuv,u_val)),(v,t_min,t_max),color='red', linestyle='-',thickness=thickness)
    xyplot+=parametric_plot((partial(xvu,v_val),partial(yvu,v_val)), (u,t_min,t_max), color='blue', linestyle='-',thickness=thickness)
    jacobian=abs(T.diff().det()).simplify_full()
    t_vals=[0..1,step=t_val*.01]
    vertices=[(x(*c),y(*c)) for c in [pt+t*dv for t in t_vals]]
    vertices+=[(x(*c),y(*c)) for c in [pt+dv+t*du for t in t_vals]]
    vertices+=[(x(*c),y(*c)) for c in [pt+(1-t)*dv+du for t in t_vals]]
    vertices+=[(x(*c),y(*c)) for c in [pt+(1-t)*du for t in t_vals]]
    xyplot+=polygon(vertices,color='purple',alpha=0.7)
    xyplot+=line(vertices,color='green')
    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()))
    pretty_print(table([[uvplot,xyplot]]))
Line 513: Line 525:
{{{ {{{#!sagecell
Line 523: Line 535:
    html('$f(x)\;=\;%s$'%latex(f))
    html('$\hat{f}(x;%s)\;=\;%s+\mathcal{O}(x^{%s})$'%(x0,latex(ft),order+1))
    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)))
Line 536: Line 548:
{{{
html("<h2>Limits: <i>ε-δ</i></h2>")
html("This allows you to estimate which values of <i>δ</i> guarantee that <i>f</i> is within <i>ε</i> units of a limit.")
html("<ul><li>Modify the value of <i>f</i> to choose a function.</li>")
html("<li>Modify the value of <i>a</i> to change the <i>x</i>-value where the limit is being estimated.</li>")
html("<li>Modify the value of <i>L</i> to change your guess of the limit.</li>")
html("<li>Modify the values of <i>δ</i> and <i>ε</i> to modify the rectangle.</li></ul>")
html("If the blue curve passes through the pink boxes, your values for <i>δ</i> and/or <i>ε</i> are probably wrong.")
{{{#!sagecell
pretty_print(html("<h2>Limits: <i>ε-δ</i></h2>"))
pretty_print(html("This allows you to estimate which values of <i>δ</i> guarantee that <i>f</i> is within <i>ε</i> units of a limit."))
pretty_print(html("<ul><li>Modify the value of <i>f</i> to choose a function.</li>"))
pretty_print(html("<li>Modify the value of <i>a</i> to change the <i>x</i>-value where the limit is being estimated.</li>"))
pretty_print(html("<li>Modify the value of <i>L</i> to change your guess of the limit.</li>"))
pretty_print(html("<li>Modify the values of <i>δ</i> and <i>ε</i> to modify the rectangle.</li></ul>"))
pretty_print(html("If the blue curve passes through the pink boxes, your values for <i>δ</i> and/or <i>ε</i> are probably wrong."))
Line 563: Line 575:
{{{ {{{#!sagecell
Line 567: Line 579:
    html('<h3>A graphical illustration of $\lim_{x -> 0} \sin(x)/x =1$</h3>')
    html('Below is the unit circle, so the length of the <font color=red>red line</font> is |sin(x)|')
    html('and the length of the <font color=blue>blue line</font> 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('<h3>A graphical illustration of $\lim_{x -> 0} \sin(x)/x =1$</h3>'))
    pretty_print(html('Below is the unit circle, so the length of the <font color=red>red line</font> is |sin(x)|'))
    pretty_print(html('and the length of the <font color=blue>blue line</font> 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$.'))
Line 589: Line 601:
{{{ {{{#!sagecell
Line 604: Line 616:
{{{ {{{#!sagecell
Line 623: Line 635:
sin,cos = math.sin,math.cos
html("<h1>The midpoint rule for a function of two variables</h1>")

pretty_pr
int(html("<h1>The midpoint rule for a function of two variables</h1>"))
Line 639: Line 651:
    html("$$\int_{"+str(R16(y_start))+"}^{"+str(R16(y_end))+"} "+ "\int_{"+str(R16(x_start))+"}^{"+str(R16(x_end))+"} "+func+"\ dx \ dy$$")
    html('<p style="text-align: center;">Numerical approximation: ' + str(num_approx)+'</p>')
    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('<p style="text-align: center;">Numerical approximation: ' + str(num_approx)+'</p>'))
Line 650: Line 662:
{{{
from scipy.special.orthogonal import p_roots
{{{#!sagecell
import scipy
import numpy

from scipy.special.orthogonal import p_roots, t_roots, u_roots
Line 660: Line 674:
            'Chebyshev': {'w': 1/sqrt(1-x**2), 'xmin': -1, 'xmax': 1, 'func': t_roots},
                'Chebyshev2': {'w': sqrt(1-x**2), 'xmin': -1, 'xmax': 1, 'func': u_roots},
                'Trapezoid': {'w': 1, 'xmin': -1, 'xmax': 1, 'func': lambda n: (linspace(-1r,1,n), numpy.array([1.0r]+[2.0r]*(n-2)+[1.0r])*1.0r/n)},
                'Simpson': {'w': 1, 'xmin': -1, 'xmax': 1, 'func': lambda n: (linspace(-1r,1,n), numpy.array([1.0r]+[4.0r,2.0r]*int((n-3.0r)/2.0r)+[4.0r,1.0r])*2.0r/(3.0r*n))}}
     'Chebyshev': {'w': 1/sqrt(1-x**2), 'xmin': -1, 'xmax': 1, 'func': t_roots},
     'Chebyshev2': {'w': sqrt(1-x**2), 'xmin': -1, 'xmax': 1, 'func': u_roots},
     'Trapezoid': {'w': 1, 'xmin': -1, 'xmax': 1,          'func': lambda n: (linspace(-1r,1,n), numpy.array([1.0r]+[2.0r]*(n-2)+[1.0r])*1.0r/n)},
     'Simpson': {'w': 1, 'xmin': -1, 'xmax': 1,          'func': lambda n: (linspace(-1r,1,n),
            
numpy.array([1.0r]+[4.0r,2.0r]*int((n-3.0r)/2.0r)+[4.0r,1.0r])*2.0r/(3.0r*n))}}
Line 667: Line 684:
    return polygon([(center-width2,0),(center+width2,0),(center+width2,height),(center-width2,height)],**kwds)     return polygon([(center-width2,0),
        
(center+width2,0),(center+width2,height),(center-width2,height)],**kwds)
Line 671: Line 689:
def weights(n=slider(1,30,1,default=10),f=input_box(default=3*x+cos(10*x)),show_method=["Legendre", "Chebyshev", "Chebyshev2", "Trapezoid","Simpson"]): def weights(n=slider(1,30,1,default=10),f=input_box(default=3*x+cos(10*x),type=SR),
    
show_method=["Legendre", "Chebyshev", "Chebyshev2", "Trapezoid","Simpson"]):
Line 680: Line 699:
    scaled_ff = fast_float(scaled_func)     scaled_ff = fast_float(scaled_func, 'x')
Line 688: Line 707:
    stems = sum(line([(x,0),(x,scaled_ff(x))],rgbcolor=(1-y,1-y,1-y),thickness=2,markersize=6,alpha=y) for x,y in coords_scaled)
    points = sum([point([(x,0),(x,scaled_ff(x))],rgbcolor='black',pointsize=30) for x,_ in coords])
    stems = sum(line([(x,0),(x,scaled_ff(x))],rgbcolor=(1-y,1-y,1-y),
        
thickness=2,markersize=6,alpha=y) for x,y in coords_scaled)
    points = sum([point([(x,0),
        
(x,scaled_ff(x))],rgbcolor='black',pointsize=30) for x,_ in coords])
Line 694: Line 715:
    show(graph,xmin=plot_min,xmax=plot_max)     show(graph,xmin=plot_min,xmax=plot_max,aspect_ratio="auto")
Line 702: Line 723:
    html("$$\sum_{i=1}^{i=%s}w_i\left(%s\\right)= %s\\approx %s =\int_{-1}^{1}%s \,dx$$"%(n,latex(f.subs(x="x_i")), approximation, integral, latex(scaled_func)))     pretty_print(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))))
Line 715: Line 737:
{{{ {{{#!sagecell
Line 746: Line 768:
velocity = derivative( position(t) )
acceleration = derivative(velocity(t))
velocity = derivative(position(t), t)
acceleration = derivative(velocity(t), t)
Line 749: Line 771:
speed_deriv = derivative(speed) speed_deriv = derivative(speed, t)
Line 751: Line 773:
dT = derivative(tangent(t)) dT = derivative(tangent(t), t)
Line 822: Line 844:
== Vector Calculus, 3-D Motion == == Vector Calculus, 3-D Motion (FIXME) ==
Line 827: Line 849:
{{{ {{{#!sagecell
Line 864: Line 886:
velocity = derivative( position(t) )
acceleration = derivative(velocity(t))
velocity = derivative( position(t), t)
acceleration = derivative(velocity(t), t)
Line 867: Line 889:
speed_deriv = derivative(speed) speed_deriv = derivative(speed, t)
Line 869: Line 891:
dT = derivative(tangent(t)) dT = derivative(tangent(t), t)
Line 872: Line 894:
## dB = derivative(binormal(t)) ## dB = derivative(binormal(t), t)
Line 953: Line 975:
http://www.sagenb.org/home/pub/2828/

{{{
http://sagenb.mc.edu/home/pub/97/

{{{#!sagecell
Line 963: Line 985:
## An updated version of this worksheet may be available at http://sagenb.mc.edu
Line 968: Line 989:
var('x,y,z')
Rmin=1/10
Line 970: Line 992:
@interact
def _(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 979: Line 1012:
    
Line 981: Line 1014:
    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 983: Line 1016:
    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('\n<center><font color="red">$\lim_{(x,?)\\rightarrow(x_0,y_0)} f(x,y) =%s$</font>'%str(limit_x)+' and <font color="red">$\lim_{(?,y)\\rightarrow(x_0,y_0)} f(x,y) =%s$</font></center>'%str(limit_y)))
        
    if in_3d:
        show(G,stereo="redcyan",viewer=view_method)
    else:
        show(G,perspective_depth=true,viewer=view_method)
Line 990: Line 1050:
{{{ {{{#!sagecell
Line 1007: Line 1068:
Rmax=2
@interact
def _(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('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 1017: Line 1084:
    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 1018: Line 1089:
    show(limit_point+surface)}}} # show(limit_point+surface)
    pretty_print(table([[surface],['hi']]))
}}}
Line 1027: Line 1100:
{{{ {{{#!sagecell
Line 1080: Line 1153:
{{{
%hide
%auto
{{{#!sagecell
Line 1097: Line 1168:
 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 1111: Line 1182:
              html(r'<tr><td>$\quad f(%s,%s)\quad $</td><td>$\quad %s$</td>\
              </tr>'%(latex(x0),latex(y0),z0.n()))
              pretty_print(html(r'<tr><td>$\quad f(%s,%s)\quad $</td><td>$\quad %s$</td>\
              </tr>'%(latex(x0),latex(y0),z0.n())))
Line 1141: Line 1212:
{{{ {{{#!sagecell
Line 1145: Line 1216:
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 1147: Line 1218:
and approximation by differential at shifted point are compared.') and approximation by differential at shifted point are compared.'))
Line 1165: Line 1236:
  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 1179: Line 1250:
{{{ {{{#!sagecell
Line 1207: Line 1278:
    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 1217: Line 1288:
http://www.sagenb.org/home/pub/2829/

{{{
https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2829.sagews

{{{#!sagecell
Line 1320: Line 1391:
== Lateral Surface Area == == Lateral Surface Area (FIXME in Jupyter) ==
Line 1324: Line 1395:
http://www.sagenb.org/home/pub/2826/

{{{
http://sagenb.mc.edu/home/pub/89/

{{{#!sagecell
Line 1331: Line 1402:
##
Line 1333: Line 1405:
@interact
def _(f=input_box(default=6-4*x^2-y^2*2/5,label='$f(x,y) = $'),
        g=input_box(default=-2+sin(x)+sin(y),label='$g(x,y) = $'),
        u=input_box(default=cos(t),label='$u(t) = $'),
        v=input_box(default=2*sin(t),label='$v(t) = $'),
        a=input_box(default=0,label='$a = $'
),
        b=input_box(default=3*pi/2,label='$b = $'),
@interact(layout=dict(top=[['f','u'],['g','v']],
left=[['a'],['b'],['in_3d'],['smoother']],
bottom=[['xx','yy']]))

def _(f=input_box(default=6-4*x^2-y^2*2/5,label='Top = $f(x,y) = $',width=30),
        g=input_box(default=-2+sin(x)+sin(y),label='Bottom = $g(x,y) = $',width=30),
        u=input_box(default=cos(t),label='   $ x = u(t) = $',width=20),
        v=input_box(default=2*sin(t),label='   $ y = v(t) = $',width=20),
        a=input_box(default=0,label='$a = $',width=10
),
        b=input_box(default=3*pi/2,label='$b = $',width=10),
Line 1342: Line 1416:
        smoother=checkbox(default=false)):         in_3d = checkbox(default=true,label='3D'),
smoother=checkbox(default=false),
        auto_update=true
):
Line 1344: Line 1420:
    ds = sqrt(derivative(u(t),t)^2+derivative(v(t),t)^2)     ds = sqrt(derivative(u,t)^2+derivative(v,t)^2)
Line 1348: Line 1424:
    A = (f(x=u(t),y=v(t))-g(x=u(t),y=v(t)))*ds.simplify_trig().simplify()     A = (f(x=u,y=v)-g(x=u,y=v))*ds.simplify_trig().simplify()
Line 1353: Line 1429:
    line_integral = integral(A,t,a,b) # If you want Sage to try, uncomment the lines below.

# line_integral = integrate(A,t,a,b)
# html(r'<align=center size=+1>Lateral Surface Area = $ %s $ </font>'%latex(line_integral))
Line 1355: Line 1435:
       
    html(r'<h4 align=center>Lateral Surface Area = $ %s $ </h4>'%latex(line_integral))

    html(r'<h4 align=center
>Lateral Surface $ \approx $ %s</h2>'%str(line_integral_approx))

    pretty_print(html(r'<font align=center size=+1>Lateral Surface $ \approx $ %s</font>'%str(line_integral_approx)))
Line 1365: Line 1443:
    G += parametric_plot3d([u,v,g(x=u(t),y=v(t))],(t,a,b),thickness=2,color='red')
    G += parametric_plot3d([u,v,f(x=u(t),y=v(t))],(t,a,b),thickness=2,color='red')
    G += parametric_plot3d([u,v,g(x=u,y=v)],(t,a,b),thickness=2,color='red')
    G += parametric_plot3d([u,v,f(x=u,y=v)],(t,a,b),thickness=2,color='red')
Line 1375: Line 1453:
        G += parametric_plot3d([u(w),v(w),s*f(x=u(w),y=v(w))+(1-s)*g(x=u(w),y=v(w))],(s,0,1),thickness=lat_thick,color='yellow',opacity=0.9)
    show(G,spin=true)
        G += parametric_plot3d([u(t=w),v(t=w),s*f(x=u(t=w),y=v(t=w))+(1-s)*g(x=u(t=w),y=v(t=w))],(s,0,1),thickness=lat_thick,color='yellow',opacity=0.9)
             if in_3d:
        
show(G,stereo='redcyan',spin=true)
    else:
        show(G,perspective_depth=true,spin=true)
Line 1381: Line 1463:
== Parametric surface example == == Parametric surface example (FIXME in Jupyter) ==
Line 1383: Line 1465:
{{{ {{{#!sagecell
Line 1402: Line 1484:
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

{{{#!sagecell
Line 1438: Line 1520:
    html(r'<h2 align=center>$ \int_{C} \left \langle M,N,P \right \rangle dr $ = $ %s $ </h2>'%latex(line_integral))     pretty_print(html(r'<h2 align=center>$ \int_{C} \left \langle M,N,P \right \rangle dr $ = $ %s $ </h2>'%latex(line_integral)))

Sage Interactions - Calculus

goto interact main page

Root Finding Using Bisection

by William Stein

bisect.png

Newton's Method

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

by William Stein

https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2824-Double%20Precision%20Root%20Finding%20Using%20Newton's%20Method.sagews

newton.png

A contour map and 3d plot of two inverse distance functions

by William Stein

https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2823.sagews

mountains.png

A simple tangent line grapher

by Marshall Hampton

tangents.png

Numerical integrals with the midpoint rule

by Marshall Hampton

num_int.png

Numerical integrals with various rules

by Nick Alexander (based on the work of Marshall Hampton)

num_int2.png

Some polar parametric curves

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

polarcurves1.png

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.

funtool.png

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.

newtraph.png

Coordinate Transformations (FIXME in Jupyter)

by Jason Grout

coordinate-transform-1.png coordinate-transform-2.png

Taylor Series

by Harald Schilly

taylor_series_animated.gif

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.

snapshot_epsilon_delta.png

A graphical illustration of sin(x)/x -> 1 as x-> 0

by Wai Yan Pong

sinelimit.png

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.

quadrics.png

The midpoint rule for numerically integrating a function of two variables

by Marshall Hampton

numint2d.png

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.

quadrature1.png quadrature2.png

Vector Calculus, 2-D Motion

By Rob Beezer

A fast_float() version is available in a worksheet

motion2d.png

Vector Calculus, 3-D Motion (FIXME)

by Rob Beezer

Available as a worksheet

motion3d.png

Multivariate Limits by Definition

by John Travis

http://sagenb.mc.edu/home/pub/97/

3D_Limit_Defn.png

3D_Limit_Defn_Contours.png

Directional Derivatives

This interact displays graphically a tangent line to a function, illustrating a directional derivative (the slope of the tangent line).

directional derivative.png

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

3Dgraph_with_points.png

Approximating function in two variables by differential

by Robert Marik

3D_differential.png

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

taylor-3d.png

Volumes over non-rectangular domains

by John Travis

https://cloud.sagemath.com/projects/19575ea0-317e-402b-be57-368d04c113db/files/pub/2801-2901/2829.sagews

3D_Irregular_Volume.png

Lateral Surface Area (FIXME in Jupyter)

by John Travis

http://sagenb.mc.edu/home/pub/89/

Lateral_Surface.png

Parametric surface example (FIXME in Jupyter)

by Marshall Hampton

parametric_surface.png

Line Integrals in 3D Vector Field

by John Travis

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

3D_Line_Integral.png

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