MaplePrimes Posts

MaplePrimes Posts are for sharing your experiences, techniques and opinions about Maple, MapleSim and related products, as well as general interests in math and computing.

Latest Post
  • Latest Posts Feed
  • Apart from the online description of this new Maple 16 feature here, there is also the help-page for subexpressionmenu.

    I don't know of a complete listing of its current functionality, but the key thing is that it acts in context. By that I mean that the choice of displayed actions depends on the kind of subexpression that one has selected with the mouse cursor.

    Apart from arithmetic operations, rearrangements and some normalizations of equations, and plot previews, one of the more interesting pieces of functionality is the various trigonometric substitutions. Some of the formulaic trig substitutions provide functionality that has otherwise been previously (I think) needed in Maple.

    In Maple 16 it is now much easier to do some trigonometric identity solving, step by step.

    Here is an example executed in a worksheet. (This was produced by merely selecting subexpressions of the output at each step, and waiting briefly for the new Smart Popup menus to appear automatically. I did not right-click and use the traditional context-sensitive menus. I did not have to type in any of the red input lines below: the GUI inserts them as a convenience, for reproduction. This is not a screen-grab movie, however, and doesn't visbily show my mouse cursor selections. See the 2D Math version further below for an alternate look and feel.)

    expr:=sin(3*a)=3*sin(a)-4*sin(a)^3:

    expr;

    sin(3*a) = 3*sin(a)-4*sin(a)^3

    # full angle reduction identity: sin(3*a)=-sin(a)^3+3*cos(a)^2*sin(a)
    -sin(a)^3+3*cos(a)^2*sin(a) = 3*sin(a)-4*sin(a)^3;

    -sin(a)^3+3*cos(a)^2*sin(a) = 3*sin(a)-4*sin(a)^3

    # subtract -sin(a)^3 from both sides
    (-sin(a)^3+3*cos(a)^2*sin(a) = 3*sin(a)-4*sin(a)^3) -~ (-sin(a)^3);

    3*cos(a)^2*sin(a) = 3*sin(a)-3*sin(a)^3

    # divide both sides by 3
    (3*cos(a)^2*sin(a) = 3*sin(a)-3*sin(a)^3) /~ (3);

    cos(a)^2*sin(a) = sin(a)-sin(a)^3

    # divide both sides by sin(a)
    (cos(a)^2*sin(a) = sin(a)-sin(a)^3) /~ (sin(a));

    cos(a)^2 = (sin(a)-sin(a)^3)/sin(a)

    # normal 1/sin(a)*(sin(a)-sin(a)^3)
    cos(a)^2 = normal(1/sin(a)*(sin(a)-sin(a)^3));

    cos(a)^2 = 1-sin(a)^2

    # Pythagoras identity: cos(a)^2=1-sin(a)^2
    1-sin(a)^2 = 1-sin(a)^2;

    1-sin(a)^2 = 1-sin(a)^2

     

    The very first step above could also be done as a pair of simpler sin(x+y) reductions involving sin(2*a+a) and sin(a+a), depending on what one allows onself to use. There's room for improvement to this whole approach, but it looks like progress.

    Download trigident1.mw

    In a Document, rather than using 1D Maple notation in a Worksheet as above, the actions get documented in the more usual way, similar to context-menus, with annotated arrows between lines.

    expr := sin(3*a) = 3*sin(a)-4*sin(a)^3:

    expr

    sin(3*a) = 3*sin(a)-4*sin(a)^3

    (->)

    2*cos(a)*sin(2*a)-sin(a) = 3*sin(a)-4*sin(a)^3

    (->)

    4*cos(a)^2*sin(a)-sin(a) = 3*sin(a)-4*sin(a)^3

    (->)

    4*cos(a)^2*sin(a) = 4*sin(a)-4*sin(a)^3

    (->)

    cos(a)^2*sin(a) = sin(a)-sin(a)^3

    (->)

    cos(a)^2 = (sin(a)-sin(a)^3)/sin(a)

    (->)

    cos(a)^2 = 1-sin(a)^2

    (->)

    1-sin(a)^2 = 1-sin(a)^2

    (->)

    1 = 1

    ``

    Download trigident2.mw

     

    I am not quite sure what is the best way to try and get some of the trig handling in a more programmatic way, ie. by using the "names" of the various transformational formulas. But some experts here may discover such by examination of the code. Ie,

    eval(SubexpressionMenu);
    
    showstat(SubexpressionMenu::TrigHandler);
    

    The above can leads to noticing the following (undocumented) difference, for example,

    > trigsubs(sin(2*a));
                  
                                     1       2 tan(a)
    [-sin(-2 a), 2 sin(a) cos(a), --------, -----------,
                                  csc(2 a)            2
                                            1 + tan(a)
    
        -1/2 I (exp(2 I a) - exp(-2 I a)), 2 sin(a) cos(a), 2 sin(a) cos(a)]
    
    > trigsubs(sin(2*a),annotate=true);
    
    ["odd function" = -sin(-2 a), "double angle" = 2 sin(a) cos(a),
    
                                   1                       2 tan(a)
        "reciprocal function" = --------, "Weierstrass" = -----------,
                                csc(2 a)                            2
                                                          1 + tan(a)
    
        "Euler" = -1/2 I (exp(2 I a) - exp(-2 I a)),
    
        "angle reduction" = 2 sin(a) cos(a),
    
        "full angle reduction" = 2 sin(a) cos(a)]
    

    And that could lead one to try constructions such as,

    > map(rhs,indets(trigsubs(sin(a),annotate=true),
    >                identical("double angle")=anything));
    
                                 {2 sin(a/2) cos(a/2)}
    

    Since the `annotate=true` option for `trigsubs` is not documented in Maple 16 there is more potential here for useful functionality.

    At first I wanted to post this message as a response to a question

    http://www.mapleprimes.com/questions/136153-AnimateDisplay 

    But for some reason the message is not loaded.

    Look at the example of animation of astroid. First you need to create animation frames as separate graphical structure (in my example - it is E[k] ). And only then by  plots [display]

    It appears the wikipedia entry for Maple (software) is deeply in need of an overhaul to reflect new graphic modifications and for better eye candy. 

    Not that it really matters but the graphics there are rather primitive and outdated. 

    When using "plotsetup(png,...)" the third rotational angle is ignored.  Attached are a worksheet and the corresponding three plots that demonstrate this bug.

    The explosion of cloud this - cloud that, is rather obvious now.

     

    SO, I decided to check-out the cloud feature to my Maple? One problem, I cannot see - what is in it?

    • Yes, I understand, you use the cloud palette in Maple.
    • It shows the group, who the document / notebook is from, what it's title is? And such.
    • _
    • BUT, is there a web page - listing? hidden somewhere, on MaplePrimes or someplace on Maplesoft's service? (

    Some Maplesoft users have been receiving emails that indicate a new patch for Maple software is available. Recipients of this message receive an attachment called Maple_Patch.zip which they are asked to extract using the password MapleSecuirityUpdate1707. Please be advised that this patch did not originate from Maplesoft and should not be opened under any circumstances. Maplesoft is currently investigating further. Please contact

    Hello,

    I am experiencing wrong results using the PolynomialIdeals package in Maple 16 (see radical_error.mw). Creating the same ideal with different generators, the radicals computed differ which of course is wrong:

    with(PolynomialIdeals);
    J := <t*(a+A), A*(b+B+t), b*(a+A), B*a-A*(b+t), (variables = {A, B, a, b, t})>:
    J2 := <t*(a+A), A*(b+B+t), b*(a+A), B*(a+A...

    The MRB constant can be computed in Maple by evalf(sum((-1)^n*(n^(1/n)-1),n=1..infinity)).

    On my laptop restart; st := time(); evalf(sum((-1)^n*(n^(1/n)-1), n = 1 .. infinity), 500); time()-st gives a timming of 37.908 seconds.

    Using the procedure posted at the bottom of this message st := time(); A037077(500); time()-st gives a much faster timing of 1.903 seconds.

    My fastest timing for 500 digits of MRB comes from my...

    Here is a hacked-up and short `convert/identifier` procedure.

    The shortness of the procedure should is a hint that it's not super robust. But it can be handy, in some simple display situations.

    If I had made into a single procedure (named `G`, or whatever) then I could have declared its first parameter as x::uneval and thus avoided the need for placing single-right (uneval) quotes around certain examples. But for fun I wanted it to be an extension of `convert`. And while I could code special-evaluation rules on my `convert` extension I suppose that there no point in doing so since `convert` itself doesn't have such rules.

    For the first two examples below I also typed in the equivalent expressions in 2D Math input mode, and then used the right-click context-menu to convert to Atomic Identifier. Some simple items come out the same, while some other come out with a different underlying structure and display.

     

    restart:

    `convert/identifier`:=proc(x)
       cat(`#`,convert(convert(:-Typesetting:-Typeset(x),`global`),name));
    end proc:

    convert( 'sqrt(4)', identifier);

    `#msqrt(mn("4"))`

    eval(value(%));
    lprint(%);

    `#msqrt(mn("4"))`

    `#msqrt(mn("4"))`

    `#msqrt(mn("4"))`

    `#msqrt(mn("4"))`

    lprint(%);

    `#msqrt(mn("4"))`

    convert( 'int(BesselJ(0,Pi*sqrt(t)),t)', identifier);

    `#mrow(mo("&int;"),mrow(msub(mi("J",fontstyle = "normal",msemantics = "BesselJ"),mn("0")),mo("&ApplyFunction;"),mfenced(mrow(mi("&pi;"),mo("&InvisibleTimes;"),msqrt(mi("t"))))),mspace(width = "0.3em"),mo("&DifferentialD;"),mi("t"))`

    eval(value(%));
    #lprint(%);

    `#mrow(mo("&int;"),mrow(msub(mi("J",fontstyle = "normal",msemantics = "BesselJ"),mn("0")),mo("&ApplyFunction;"),mfenced(mrow(mi("&pi;"),mo("&InvisibleTimes;"),msqrt(mi("t"))))),mspace(width = "0.3em"),mo("&DifferentialD;"),mi("t"))`

    `#mrow(mo("&int;"),msub(mo("J"),mn("0")),mfenced(mrow(mi("&pi;",fontstyle = "normal"),mo("&InvisibleTimes;"),msqrt(mi("t")))),mo("&InvisibleTimes;"),mo("&DifferentialD;"),mi("t"))`

    `#mrow(mo("&int;"),msub(mo("J"),mn("0")),mfenced(mrow(mi("&pi;",fontstyle = "normal"),mo("&InvisibleTimes;"),msqrt(mi("t")))),mo("&InvisibleTimes;"),mo("&DifferentialD;"),mi("t"))`

    #lprint(%);

    convert( Vector[row](['Zeta(0.5)', a.b.c, 'limit(sin(x)/x,x=0)', q*s*t]), identifier);

    Vector[row](4, {(1) = Zeta(.5), (2) = a.b.c, (3) = limit(sin(x)/x, x = 0), (4) = q*s*t})

    eval(value(%));
    #lprint(%);

    Vector[row](4, {(1) = Zeta(.5), (2) = a.b.c, (3) = limit(sin(x)/x, x = 0), (4) = q*s*t})

     

    Download atomic1.mw

    As it stands this hack may be useful in a pinch for demos and purely visual effect, but unless it's robustified then it won't allow you to programmatically generate atomic names which match and inter-operate computationally with those from the context-menu conversion. Identifiers (names) with similar typeset appearance still have to match exactly if they are to be properly compared, added, subtracted with each other.

    Extra points for commenting that the round-brackets (eg. in function-application) are displayed as black while the rest is in blue by default, if you have a workaround.  That also happens when using the usual context-menu driven convert-to-atomic-identifier of the Standard GUI.

    Extra points for noticing that function names like `sin` are italicized and not in an upright font, if you have a workaround. How to discern which instances of fontstyle="normal" should be removed?

    Points off for commenting that this whole hack doesn't provide anything new or extra for getting around automatic simplification.  :)

    This is a one-liner hack. But maybe together we could turn it into something that closely matched what the context-menu generates.

    Many of us know that issuing plotting commands produces various kinds of plot data structure, the details of which are documented on the plot,structure help-page. That page covers most of the details, and a thorough read can reveal that the numeric data of a plot is often stored within such structures as either Array or Matrix.

    But what about the result of a call to

    MapleNet 16 is now available. New features include the ability to programmatically execute Maple documents from your MapleNet application and support for the Symbolic Computation Software Composability Protocol (SCSCP) framework, which promotes interoperability with special-purpose computer algebra systems. For more details, see What’s New in MapleNet 16.

     

    eithne

    My list of problems solved with Clickable-Calculus syntax-free techniques now numbers 154, spread over eight subject areas. Recently, Maplesoft posted to its website 44 of these problems, along with videos of their point-and-click solutions. Not only do these solutions demonstrate Maple functionalities, but they also have a pedagogic message, that is resequencing skills and concepts. They show how Maple can be used to obtain a solution, then show how Maple can be used to implement...

    Someone asked me the other week whether a color gradient could be easily applied to a high density point-plot, either vertically or horizontally graded.

    Without thinking, I said, "Sure, easy." But when I got to a computer, and gave it a little thought, I realized that it's not that easy to do it efficiently. And it really ought to be, even for tens of thousands of points.

    There is a help-page plot,color which briefly describes some things that can be done with coloring plots. As of Maple 16, it mentions a "color data structure" which can be created by calls to the new ColorTools package. There is an example on that page for a single color, but not for several colors concurrently. Using Colortools to get a list of colors, for many points, can be done. (And there ought to be such an example.) But for the case of many data points that uses quite a lot of memory, and is slow.

    Also, there is no 2D plotting equivalent to the 3D plotting colorfunc functionality. There ought to be. And just as the 3D colorfunc should be fixed to take three arguments (x,y, & z) any new 2D colorfunc should be made to take two arguments (x & y).

    So, how can we apply a color gradient on a 25000 2D-point-plot, shaded by y-value? One way is to notice that the various 2D and 3D plot data structures can now store an efficient m-by-3 (or m-by-n-by-3) C_order, float[8] Array for the purpose of representing the chosen colors. (That is not documented, but can be learned by observation and inspection of various example plot structures.) We know that such an Array is relatively memory-light, and can be produced very quickly.

    What this task has become is a 2D version of this method of inserting a custom made color sequence into a 3D plot, but more efficient on account of using a float[8] Array.

    To get some decent timings the attached worksheet uses the time[real] command. Timings are computed both immediately after computation (same execution block) as well as after plot rendering (next execution block).

    It takes about 1 sec for the Maple 16.01 64bit Standard GUI on Windows 7 to throw up and render the plot, for both methods.

    It takes 3.4 sec, and a 108 MB increase in allocated memory, to compute the plot data structure result using ColorTools and a list. But it takes only 0.45 sec, and a 20.5 MB increase in allocated memory, to compute an equivalent plot data structure using the float[8] Array. (Timings on an Intel i7-960.)

    [worksheet upload is misbehaving. So inlining the code.]

    restart:
    N:=25000:
    
    xy:=LinearAlgebra:-RandomMatrix(N,2,generator=0.0..1.0,
                                    outputoptions=[datatype=float[8]]):
    
    str:=time[real]():
    
    plots:-pointplot(xy,
                        color=[seq(ColorTools:-Color([xy[i,2],0,0]),i=1..N)],
                        symbolsize=4);
    

    time[real]()-str;
    
                                 3.323
    
    time[real]()-str; # in new execution group
    
                                 4.400
    kernelopts(bytesalloc);
    
                               107646976
    
    
    restart:
    N:=25000:
    
    xy:=LinearAlgebra:-RandomMatrix(N,2,generator=0.0..1.0,
                                    outputoptions=[datatype=float[8]]):
    
    str:=time[real]():
    
    p:=plots:-pointplot(xy,color=red,symbolsize=4):
    
    c:=Array(1..N*3,(i)->`if`(irem(i,3)=1,xy[(i+2)/3,2],0),
             datatype=float[8],order=C_order):
    
    subsindets(p,specfunc(anything,COLOUR),z->'COLOUR'('RGB',c));
    
    
    time[real]()-str;
    
                                 0.483
    
    time[real]()-str; # in new execution group
    
                                 1.357
    kernelopts(bytesalloc);
    
                                20545536
    

    See http://mathematica.stackexchange.com/ and compare with MaplePrimes.

    On a calculus 2 test I was given to review the students were asked to find the derivative of arccosh(x)*sqrt(1-x^2).  Maple gives the answer -arccosh(x)*x/sqrt(1-x^2)+sqrt(1-x^2)/(sqrt(x-1)*sqrt(x+1)).   This is the same answer, in a slightly...

    First 98 99 100 101 102 103 104 Last Page 100 of 297