Carl Love

Carl Love

23928 Reputation

25 Badges

9 years, 309 days
Natick, Massachusetts, United States
My name was formerly Carl Devore.

MaplePrimes Activity


These are answers submitted by Carl Love

I assume that you mean a memory limit, so that you can access your virtual memory. The command is (for example, to increase to 16 GB)

kernelopts(datalimit= 16*Unit(gibibyte));

However, having read your other recent post, I know that a lack of memory is not the true cause of your troubles. Get your bugs worked out on a smaller version of your problem first!

Addressing the OP's direct question: No, there is no limitation on set size. If you have the RAM for it, the Maple kernel can handle it. The Maple kernel will give you an explicit error message if it runs into any memory limitation.

I am assuming that by "create" you mean "plot". And I am assuming that your question could be rephrased as "How can one plot a function with a restriction on the abscissae ('x values') or on the ordinates ('y values')?" If those are not what you meant, please let me know.

There are many ways to do it. Here are just a few. Which one you choose may depend on what types of algebraic manipulation you need to do to the function before or after plotting (such as, how you decided on 0.2 and 1.3).

Method 1a: piecewise, abscissa-oriented:

f:= piecewise(Or(And(x>=0.19740,x=3.3390, x

plot(f, x= 0..2*Pi, discont);

Method 1b: piecewise, ordinate-oriented:

f:= piecewise(tan(x) >= .2 and tan(x) < 1.3, tan(x), undefined);

plot(f, x= 0..2*Pi, discont);

Method 2a: restricted plot, abscissa-oriented:

plots:-display(
   [plot(tan(x), x= 0.19740..0.91510), plot(tan(x), x= 3.3390..4.0567)]
   ,view= [0..2*Pi, DEFAULT]
);

Method 2b: restricted plot, ordinate-oriented:

plot(tan(x), x= 0..2*Pi, y= 0.2..1.3, discont);

Your expression contains five pairs of square brackets which should be parentheses. If this expression is the output of a Maple command, then the input must have had inappropriate square brackets.

Markiyan's answer is fine, but here is another way. I prefer to build each frame of an animation, and then animate it, rather than merging animations. I think this gives more flexibility for changes, and avoids some repetition of arguments.

ball:= Pt-> plots:-pointplot([Pt], color= blue, symbol= solidcircle, symbolsize= 20):
balls:= ()-> plots:-display(ball ~ ([args])):  # One frame
BallData:= [[1+sin, 1-sin], [sin,sin]]:  # All data in one place.
plots:-animate(balls, BallData(t), t= 0..2*Pi, scaling= constrained, frames= 100);

You have asterisks (*) after the word unapply. Get rid of those.

g := unapply*(funktion1, x, y);

                     ^

Also, change linalg:-inverse to LinearAlgebra:-MatrixInverse, or simply use (-1) as exponent. I guess your Jacobian is from the VectorCalculus package. You should explicitly reference the package. 

Preben's answer shows adequtely how to get the right answer (and I am surprised that fsolve can do it). Here, I answer the other question: What went wrong in the original attempts?

The expression

    add(length(i), i = 1 .. n)

(outside of a procedure) gives an error (unable to execute add) because the value of n is unknown.

The expression

   sum(length(i), i = 1 .. n)

gives the wrongs answer because length(i) is evaluated before values of i are substituted (whereas add delays the evaluation). Since i is a symbol with one character, length(i) is 1. Hence the equation

   (sum(length(i), i = 1 .. n) = 2893

simplifies to n = 2893.

 

My first approach would be to take the series definition given at ?JacobiTheta and truncate the series. Given that your nome has modulius << 1, five terms of the series should be more than enough.  For example,

restart;
nome:= evalhf(0.1*exp(0.1*Pi*I)):
z:= evalf[15](expand(Pi*I*(a+b*I))):
Nterms:= 5:
JT1:= (z,q)-> 2*q^(1/4)*(add((-1)^n*q^(n*(n+1))*sin((2*n+1)*z), n= 0..Nterms-1)):
CodeTools:-Usage(
   plot3d(argument(JT1(z,nome))
      ,b= -4..4, a= -4..4
      ,grid= [300,300]
      ,shading= zhue
      ,style= surface
      ,axes= box
      ,orientation= [-90,0,0]
   )
);

memory used=4.56MiB, alloc change=10.98MiB, cpu time=515.00ms, real time=524.00ms (On an Intel i7)

My experience going from 3 to 5 terms is that each additional term contributes one more level to the fractal "forking".

I'm very pleased to know that evalhf now works with complex numbers. The page ?evalhf,fcnlist needs to be updated to include argument, Re, and Im, and perhaps others.

Replace the line

Dist := int(Density, t);

with

Dist := unapply( int(Density, t), t);

This will make Dist an operator, so that the expression Dist(t-1) makes sense.

The plot command will accept a list of points defining a curve. Each point is represented as a list with two elements. For example:

plot( [ [0,0], [1,1], [1,2], [2,3] ] );

The list can be arbitrarily long.

Three points:

  1. This problem is different than the one in the original post: The linear term in f has been changed from -3x to -x.
  2. The new equation has infinitely many real solutions.
  3. In this case, allvalues sets the global _ValuesMayBeLost to true, so the answers it gives may not include all values.

"fi" and "end if" mean exactly the same thing, but you can't have them both. I suggest removing the "fi". Do the same thing two lines below that. Also, you need to remove the ";" at the end of the first line.

The type ?even is predefined, and ?select is a command. Putting them togther, letting L be your list above, the command is

select(type, L, even)

 

For those who like fewer words, the following does the same thing:

select(`::`, L, even)

There is a simple command to insert the backslashes! But I didn't find it until I had given up looking for such in the extremely bloated StringTools package (and I looked at every command there). The old original sprintf command has a format option, %a, that formats anything so that it can be reparsed.

restart;
p:= "Einstein said, \"Everyone's....\"....";
           p:=  "Einstein said, "Everyone's...."...."
sprintf("%a", p);
           ""Einstein said, \"Everyone's....\"....""

Of course, you see that it added the backslashes. But also note the extra quotes at beginning and end. These are so that it will parse as a string literal, rather than as a string containing other Maple code.

assign(b,parse(%));
b;
             "Einstein said, "Everyone's...."...."

I had thought about the issue of capping before I posted my previous answer. The capping is the most difficult part, and I thought that it would've been a waste to have spent time on it if if turned out that the whole tubeplot idea didn't meet your needs. I had considered plottools:-cylinder, but it is quite difficult (though not impossible) to use because it only generates cylinders with axes parallel to the z-axis. So they would have to be individually rotated at random. I also considered representing each cap as a parametric surface; it's a lot of analytic geometry to get the parameters right.

It turns out that the caps can be generated with tubeplot, if you're willing to accept caps that are not perfectly flat; rather, they are slightly conical, like cylinders of hard candy wrapped in paper which is twisted at the ends. The radius of the tube can vary (with the same parameter, t, that is used as the parameter of the tube's curve), and we simply need to make it go abruptly to 0 at both ends. I do this with a step function created with piecewise.

restart;
Npts:= 12:
Gen:= (N,R)-> RandomTools:-Generate(list(float(range= 1..R), N)):
x,x1,y,y1,z,z1:= seq(Gen(Npts,20), k= 1..6):
R:= Gen(Npts,3):  # random radius parameter
candy:= piecewise(t <= 0, 0, t < 1, 1, 0):
P:=(x,x1,y,y1,z,z1,R)->
   [x+(x1-x)*t, y+(y1-y)*t, z+(z1-z)*t, radius= R*candy]
:
S:=(x,x1,y,y1,z,z1,R)->
   plots:-tubeplot(P(x,x1,y,y1,z,z1,R), t= 0..1, tubepoints= 20)
:
plots:-display([seq](S(x[k],x1[k],y[k],y1[k],z[k],z1[k],R[k]), k= 1..Npts));

First 347 348 349 350 351 352 Page 349 of 352