edmap:=proc(f,L,a,max) # #This is a procedure that provides #a geometric interpretation of delta #and epsilon values for a function #near a point. # # f is the function (expression in x). # # L is the expected limit of the function # at the value a (real). # # a denotes the point (real). # # max is the maximum acceptable epsilon (real). # local fn,acc,A,B,XL,XR,E,con,j,k,n,xstep; with(plots):with(plottools): # #Set number of frames fn:=16: # #Set number of steps for approximation of delta acc:=100: xstep:=max/acc: # #Sequence of epsilon values E:=seq(n*max/fn, n=1..fn): #Function to convert numbers to strings for textplots con:=n->convert(evalf(n,4),string): # # #Sequence of left endpoints XL[0]:=a: j:=1: for n from 1 to fn do XL[n]:=XL[n-1]: for k from j to acc while eval(abs(subs(x=XL[n]-xstep,f)-L))<=E[n] do XL[n]:=XL[n]-xstep: j:=j+1: od: od: # #Sequence of right endpoints XR[0]:=a: j:=1: for n from 1 to fn do XR[n]:=XR[n-1]: for k from j to acc while eval(abs(subs(x=XR[n]+xstep,f)-L))<=E[n] do XR[n]:=XR[n]+xstep: j:=j+1: od: od: # #Declare array of plots A:=array(1..2,1..2): # #Create animation for upper left panel B:=seq(display([ plot([[a-max,L-E[n]],[a+max,L-E[n]]],color=green), plot([[a-max,L+E[n]],[a+max,L+E[n]]],color=green), plot([[XL[n],L-max],[XL[n],L+max]],color=blue), plot([[XR[n],L-max],[XR[n],L+max]],color=red)]),n=1..fn): # #Complete upper left panel (graph of f with animated lines) A[1,1]:=display({ plot(f,x=XL[fn]..XR[fn],color=black), plot([[a,L-max],[a,L+max]],color=black), plot([[a-max,L],[a+max,L]],color=yellow), display(B,insequence=true)}, axes=framed): # #Create upper right panel (text description of upper graph) A[1,2]:=display([seq( textplot([[0,1,`If |x-`.(con(a)).`|<`.(con(min(a-XL[n],XR[n]-a))).`, then`], [0,.9,`x is in the interval (`.(con(XL[n])).`,`.(con(XR[n])).`),`], [0,.8,`and |f(x)-`.(con(L)).`|<`.(con(E[n]))], [0,.6,`Center of the y-axis: `.(con(L))], [0,.5,`Green to yellow: `.(con(E[n]))], [0,.4,`Center of the x-axis: `.(con(a))], [0,.3,`Blue vertical line: `.(con(XL[n]))], [0,.2,`Red vertical line: `.(con(XR[n]))], [0,.1,`Minimum of |`.(con(a)).`-`.(con(XL[n])).`| and`], [0,0,`|`.(con(a)).`-`.(con(XR[n])).`| is ` .(con(min(a-XL[n],XR[n]-a)))]], align=LEFT, font=[TIMES,ROMAN,12]), n=1..fn)],insequence=true,axes=none): #Create lower left panel (delta as a function of epsilon) A[2,1]:=display({ plot([seq([E[k],a-XL[k]],k=1..fn)],color=blue), plot([seq([E[k],XR[k]-a],k=1..fn)],color=red), display([seq(plot([[E[n],0],[E[n],max]],color=black),n=1..fn)] ,insequence=true,labelfont=[SYMBOL,18],labels=[e,d])}, labelfont=[SYMBOL,18],labels=[e,d],axes=framed,xtickmarks=2): #Create lower right panel (text description of lower graph) A[2,2]:=display([seq( textplot([[0,.8,`Delta as a function of epsilon...`], [0,.7,`Black vertical line: `.(con(E[n]))], [0,.6,`Blue line height: |`.(con(a)).`-`.(con(XL[n])).`|=`.(con(a-XL[n]))], [0,.5,`Red line height: |`.(con(XR[n])).`-`.(con(a)).`|=`.(con(XR[n]-a))]], align=LEFT,font=[TIMES,ROMAN,12]),n=1..fn)],insequence=true,axes=none): display(A,insequence=true); end: