In attempting to show students Taylor polynomials of successive degrees, we tried defining the first few via the loop
for k from 1 to 8 by 1 do tp[k]:=convert(taylor(f,x=0,k+1),polynom) end do;
This worked.
Next we hoped to plot the polynomials one after the other in the same window, but the animate command
animate(tp[s],x=-10..10,s=0..8, view=[-10..10,-3..3],frames = 9);
produces an empty plot.
We’ve found a very elaborate workaround but it seems the basic idea - step from one member of an indexed list to another - ought to work.
Animate requires s to be a real parameter, not integer. Use instead
plots[display] ([seq(plot(tp[s], x= -10..10, -3..3), s= 0..8)] ,insequence= true );
or, in Maple 7, the more elegant syntax
plots[display] ([seq](plot(tp[s], x= -10..10, -3..3), s= 0..8) ,insequence= true );
While I applaud your efforts to show your students the mechanics of creating
these animations, you may be interested in also showing them my worksheet
"Animation of Taylor series converging to their generating functions"
available
at the Maple Applications Center http://www.mapleapps.com.
This produces labelled animations several orders of magnitude faster than your example above, handles discontinuities, and most of the full range of plot options.
For example
f:= x-> exp(cos(x))*tan(x)+cos(2*x)+sin(Pi*x); TaylorAnim(f, Pi, 0..2*Pi, 50, -10..10, discont= true);
animates the complicated, discontinuous function f and its first 50 Taylor polynomials
expanded at x=Pi with view window [0..2*Pi, -10..10]
using 1.3 seconds and neglible
memory on a Pentium II 400 MHz.
The comments in my code give several pointers on how to produce these high-speed animations.
Animate works best when the animation variable is continuous. It is possible to achieve this for your situation but it’s not intuitive or simple.
I prefer to create a list of plots and then animate these with the display command. For example,
> f := 2*cos(x); > > for k from 1 to 8 by 1 do > tp[k]:=convert(taylor(f,x=0,k+1),polynom) > end do; > > P := [seq( plot([f,tp[k]],x=-10..10,y=-3..3), k=1..8 )]: > display( P, insequence=true );
plots[display]( [seq( plot(tp[k], x=-10..10, title=sprintf("degree %d",k)), k=1..8)], insequence=true, view=[-10..10,-3..3]);
The animate command is not very versatile. I almost never use it. Instead, create plot structures for each of your functions:
for k from 1 by 1 to 8 do pl[k]:=plot(tp[k],x=-10..10,view=[-10..10,-3..3]): od:
Then use display with the option insequence=true
with(plots): display([seq(pl[k],k=1..8)],insequence=true);
You might want to look at "Animations for the Calculus Classroom" in the Maple Applications Centre for some further examples.