acer

29130 Reputation

29 Badges

18 years, 65 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are questions asked by acer

How could one simplify the following expression, preferably over z in large parts of the complex plane, and with few calls under different assumptions, and preferably gracefully.

expr := 2*Pi*(-z)^(1/2)-z^(1/2)*(2*ln(-z^(1/2))-ln(z));

I am curious whether anyone here can come up with a way to simplify the expression x1 to 15*Pi/32 in fewer exact, symbolic steps. The following was performed in Maple 2016.2 for Linux.

restart;

x1 := arcsin(1/2*(2+(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2));

arcsin((1/2)*(2+(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2))

x2 := evalc(convert(x1,expln));

arctan((2+(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2)/(2-(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2))

x3 := convert(x2, expln);

((1/2)*I)*(ln(1-I*(2+(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2)/(2-(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2))-ln(1+I*(2+(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2)/(2-(2+(2+2^(1/2))^(1/2))^(1/2))^(1/2)))

# non-Pro wolframalpha can simplify x3 to 15*Pi/32 (but not x2 or x1).
#

x4 := combine(x3);

((1/2)*I)*ln(-(I*2^(1/2)*((2+2^(1/2))*(2+(2+2^(1/2))^(1/2)))^(1/2)+I*(2*2^(1/2)+4)^(1/2)+I*2^(1/2)+(-1+I))/(I*2^(1/2)*((2+2^(1/2))*(2+(2+2^(1/2))^(1/2)))^(1/2)+I*(2*2^(1/2)+4)^(1/2)+I*2^(1/2)+1+I))

x5 := simplify(x4);

((1/2)*I)*(-ln(2)+ln(-(2+(2+2^(1/2))^(1/2))^(1/2)*(I*2^(1/2)*(2+2^(1/2))^(1/2)-I*2^(1/2)+1-I)))

x6 := expand(x5);

-((1/2)*I)*ln(2)+((1/4)*I)*ln(2+(2+2^(1/2))^(1/2))+((1/2)*I)*ln(-I*2^(1/2)*(2+2^(1/2))^(1/2)+I*2^(1/2)+(-1+I))

x7 := combine(x6);

-((1/4)*I)*(ln(-(1/2)*(2+2^(1/2))^(1/2)*(I*2^(1/2)+(-1-I)))+(2*I)*Pi)

simplify(x7,constant);

(15/32)*Pi

# It's a pity that last step worked while this next is inadequate.
simplify(x7);

-((1/4)*I)*ln(-(2+2^(1/2))^(1/2)*(I*2^(1/2)+(-1-I)))+((1/4)*I)*ln(2)+(1/2)*Pi

# Another way, using x7
simplify(evalc(x7));

(15/32)*Pi

# Another way, using x7
simplify(combine(expand(x7)));

(15/32)*Pi

 

Download simplify_example.mw

I'd like to be able to get a quicker low accuracy computation of the argument of the complex-valued JacobiTheta1 function.

I only need as much accuracy as to get a decent plot, which means... I don't know... about 1e-3 relative accuracy?

If I can get a formula or approach that is "evalhf'able" then I can construct a procedure which does this action and writes results inplace to a float[8] Matrix.

The naive approach in the code below takes about 6min...

The code below, which is a PLOT structure, seems to be one of the more efficient forms of specifying individual colors for each point in a 2D point plot.

My central question is: what plotting command will construct this?

PLOT(CURVES(Matrix([seq([i,i],i=0..4)],datatype=float[8])),
     STYLE(POINT), AXESLABELS("", ""), VIEW(0 .. 10, 0 .. 10),
     COLOUR(HSV,
            Array(1..15,[0.0,1,1,0.2,1,1,0.4,1,1,0.6,1,1,0.3,1,1],
                  datatype=float[8])
            )
     );

I know that I can call `plot` and pass the m-by-2 Matrix of point data, and specify style=point. But how can I pass in such a nice, efficient float[8] Array to specify the points' colors? I know that the float[8] Array is leaner than a long sequence of HFloats. But even in the simpler case of just two points: how can one pass the `color` option just once to specify the colors to be used for each of the points?

Oh, in case anyone's interested, another old-fashioned (but terser) was to get such a float[8], C_order Array is with the `hfarray` command.

Suppose that I wanted to produce a 2D plot which was coloured in the region between two functions.

I mean not just between two curves, but between two functions. I would like to make the curves appear as smooth as Maple knows how, but without getting any jaggedness due to using a high grid in an implicitpot.

Consider this example. These two curves are displayed as being quite smooth (using adaptive plotting or whatever `plot` knows to use). How best can the regions between these two curves be filled, without having to recourse perhaps to a rough implicit plot?

plot([x^2-1, -x-1], x=-1.5..1.5, y=-1.5..1.5, color=black);



A simple trick with a product provides a defined implicit region that `implicitplot` can handle. But there can be small gaps, or irregularities, because the formulas for the curves are being solved in a complicated way and no longer being used as mere functions.

plots:-implicitplot( (y - (x^2-1))*(y - (-x-1)),
                     x=-1.5..1.5, y=-1.5..1.5,
                     filledregions=true, gridrefine=4,
                     coloring=[COLOUR(RGB,.8,.8,.9),"white"],
                     axes=boxed, labels=["x","y"],
                     view=[-1.5..1.5,-1.5..1.5] );



Another technique is to overlay two simpler implicit plots, colouring and layering them carefully so as to give the impression that only the inner regions had been coloured. The problem here is that the intersections all have to be computed and the problem split up piecemeal (which I did not do) so that the layered colouring is adjusted to whichever curve lies on top. Without that care, then something like this happens, with odd subregions appearing uncoloured.

plots:-display(
   plots:-implicitplot( x^2-1 >= y, x=-1.5..1.5, y=-1.5..1.5,
                        filledregions=true, gridrefine=4,
                        coloring=["white","white"] ),
   plots:-implicitplot( -x-1 >= y, x=-1.5..1.5, y=-1.5..1.5,
                        filledregions=true, gridrefine=2,
                        coloring=[COLOUR(RGB,.8,.8,.9),"white"] ),
               axes=boxed, labels=["x","y"], view=[-1.5..1.5,-1.5..1.5]);



Did I miss something obvious? Is there some other calling sequence or command that makes this much easier (and smoother, by default)?

1 2 3 Page 1 of 3