nm

11378 Reputation

20 Badges

13 years, 44 days

MaplePrimes Activity


These are questions asked by nm

To make animations, one must generate many plots. The following are two methods I know about. Which would be better? And is there a more efficient way than any of these?

This one pre-allocates an Array of the correct size needed, then fills it in in the loop. But then one has to convert the whole Array back to a list in order to animate it

restart;
nFrames := 10:
frames  := Array([seq(0,i=1..nFrames)]):
w       := 0:
for i from 1 to nFrames do
      frames[i] := plot(sin(w*t),t=-2*Pi..2*Pi);
      w         := w+1;
od:
plots:-display(convert(frames,list),insequence=true);

 

This method does not need to convert an Array to a list. But it does not pre-allocate memory needed before and has to dynamically grow the list each time, which might not be efficient

restart;
nFrames :=10:
frames  := NULL:
w       := 0:
for i from 1 to nFrames do
      frames := frames , plot(sin(w*t),t=-2*Pi..2*Pi);
      w      := w+1;
od:
plots:-display(frames,insequence=true);

For very large number of frames, I am not sure which is better. It is always best to pre-allocate memory to avoid dynamic growing list, which can be costly. But on the other hand, the first method requires converting the whole Array to a list, and I was not sure if that is done in-place or if Maple will have to copy the whole thing again to make a list.

Are there better and more efficient ways to do the above?

I am learning how to do animations in Maple, and I need to export an animation I made to animated gif file.

nTerms := 20:
lam    := evalf([BesselJZeros(0,1..nTerms)]):
c      := seq(1/lam[n]^2*BesselJ(1,lam[n]/2)/BesselJ(1,lam[n])^2,n=1..nTerms):
mySol  := proc(r,t)
   local n;
   4/Pi*sum(c[n]*BesselJ(0,lam[n]*r)*sin(lam[n]*t),n=1..nTerms);
end proc:

maxTime := 5: (*seconds*)
delay   := 0.03:
nFrames := round(maxTime/delay):
frames  := Array([seq(0,i=1..nFrames)]):

frames  := [seq( plot3d([ r, theta, mySol(r,(i*delay)) ],
                   r      = 0..1,
                   theta  = 0..2*Pi,
                   coords = cylindrical,
                   axes   = none,                    
                   title  = sprintf("%s %3.2f %s","time ",(i*delay),"seconds")
                ),
             i=0..nFrames-1)
           ]:
plots:-display(convert(frames,list),insequence=true);

And the above makes

 

I have few questions which I could not find an answer for.

How to save the above sequence of images frames (in the list frames) to an animated gif file programmatically? Currently, I use plots:-display(frames,insequence=true); and then right-click on the screen out, select export->GIF  and this does save the file as animated file.

The problem with the above method, is that I have no control on telling Maple some options. For example, I want to control the amount of delay between each frame when it is played in the web page. I also want to tell Maple for example to play this once in the gif file.

These options are suppored in Mathematica. But I do not see how to do them in Maple. In Mathematica, given a list of frames (generted from a Plot command), which is the variable "frames" in the above Maple code, then one can do this

Export["anim.gif",frames,"DisplayDurations"->Table[.2,{Length@frames}]]

Now when loading anim.gif in a browser, the delay between each frame is 0.2 seconds. The "DisplayDurations" set the delay between each frame when played in the browser  automatically.

One can also add the option

"AnimationRepetitions" -> 1

and this will make the animation play one time in the browser when first loaded. Now Maple generated animation gif file plays continuously which I do not want to, this is even though inside the notebook, Maple says it will play "single" time. But this option does not seem to be exported to the animation gif file

 

 

Is there a way to configure these options? When I right-click, and export the animation to GIF file, I see no export options to change.

I could not use the export("anim.gif",frames)  command in Maple, the generated GIF file is not animated.

thank you

I am looking at the help pages, and I see Maple code using symbols never seen in Maple language before.

I tried to do ?&under to get help on this new Maple language command/symbol, but help does not show it. I read help Neutral Operators but do not understand it.

What does the following mean in plain Maple code?

And what does the following mean using Plain Maple code:

 

Could the above be written without using these `&` things?  I am having hard time understanding what the code is doing because of these. Never used them before.

These are from help on "Definition of a Structured Type in Maple"

On the maple cloud, I see that current version is 38 for Physics 

After I installed, I typed

Physics:-Version();

It gives 
  "......\maple\toolbox\2018\Physics Updates\lib\Physics Updates.maple", 2018, May 8, 17:49 hours

I was expecting to see "38".  Why does Physics:-Version(); does not give the version number as shown on Maple cloud? Using only a date for a version number is not a good idea. There should be a number there. (date can also be included, but a number should be the official version number).

Is there another command to use to obtain Version number "38"?

Does each package shown on cloud support packageName:-Version()? I tried this command on another package I have, but I got an error saying it does not Version() 

OrthogonalExpansions:-Version();
Error, Version is not a command in the OrthogonalExpansions package
 

Yet, on cloud, it says the version number is "1" for the above package. What does the version number shown on the cloud then really mean?

I do not know what I am doing wrong. I am trying to plot each of the solutions to an ODE. One of the solutions Maple gives is  LegendreQ((1/2)*sqrt(5)-1/2, x) and the other is LegendreP((1/2)*sqrt(5)-1/2, x)

Maple can plot the  LegendreP, but gives an error plotting LegendreQ((1/2)*sqrt(5)-1/2, x)

ode:=(1-x^2)*diff(y(x),x$2)-2*x*diff(y(x),x)+y(x)=0:
sol:=dsolve(ode,y(x));

sol := y(x) = _C1*LegendreP((1/2)*sqrt(5)-1/2, x)+_C2*LegendreQ((1/2)*sqrt(5)-1/2, x)

Now when I do 

plot(LegendreQ((1/2)*sqrt(5)-1/2, x),x=-1..1);

Maple says

Warning, unable to evaluate the function to numeric values in the region; see the plotting command's help page to ensure the calling sequence is correct
 

Why is that? I tried x=-0.5..1 and x=0.5..1 and keep getting same error message. It works ok for 

plot(LegendreP((1/2)*sqrt(5)-1/2, x),x=-1..1);

Mathematica can plot both with no problem.

First 161 162 163 164 165 166 167 Last Page 163 of 200