acer

32333 Reputation

29 Badges

19 years, 323 days
Ontario, Canada

Social Networks and Content at Maplesoft.com

MaplePrimes Activity


These are replies submitted by acer

@Ronan Yes, there are some other cases. Some of those relate to whether bounds are supplied (in the form of inequalities). That can sometimes make a problem more difficult.

The are also a few oddball (but thankfully, relatively rare) cases in which passing the real option can help. The real option is documented as being for polynomial problems, including with parameters present. But, curiously, I've seen rare non-polynomial (& non-trig) examples where passing it can help. Yet I've also seen some other non-polynomial examples where passing it hinders success.

If you walk through Calculus1:-Roots you can see that it tries a variety of tricks, including multiple calls to solve, both with and without various options, to try and squeeze out as much as it can. It also attempts to verify exact roots via resubstituition -- though that can sometimes be quite expensive.

As you suggest, it's a broad topic. It's also quite difficult in general. And even some "short" examples can be difficult.

Concatenation produces instances of the global names.

restart;
proc() local xy:=4;
       assign(cat(x,y)=7);
       xy;
end proc();

             4

xy;

             7

So even if you had all your Sij declared local then you still wouldn't be able normally to reference them via concatenation. (You'd be referencing the globals.)

So likely either your code is actually referencing the globals (later), or you already have that many explicit statements (which usually takes as much effort to produce as that many local declarations).

I am suspicious of your claim that the rest of the code is not useful for us -- with the implication that representative code of how these names get subsequently used is not germane to your Question.

ps. There are tools for programmatically constructing (and deconstructing) procedures. You could use these to programmatically (re)generate the procedure with the desired locals declared. But such a contrived solution should not be made without clearly justifying the need.

Please don't submit another duplicate of this query, in a separate Question thread.

@mahasafy You have to first obtain the GeM package. I am guessing that you mean the package at this GeM site.

Have you done that yet?

Is it a .mpl file or a .mla file?

Let's suppose that you download it as a file on this folder on your machine. (Change this, if the location on your machine is different!)

If it is file named GeM.mpl file, put this as a command at the start of your worksheet.

   read "C:/Users/mhasafy/GeM.mpl":

If it is a file named GeM.mla, put this as a command at the start of your worksheet.

   libname := "C:/Users/mhasafy/GeM.mla", libname:

Then run the rest of your commands, starting with,

  with(GeM);

@ You claim that, "If cos(i) isn't imaginary, then i•sin(i) must be."

That is not true.

The values of those two quantities are shown in my Answer. Both are purely real.

You should be able to find many derivations of those in a web search, for explanation or separate confirmation if you need it.

@rcorless There have been a few prior reports of the Animation toolbar not appearing in some people's Maple 2021.1 GUI.

@mmcdara In my opinion this is not a very good solution. It only happens to work because on the order in which the product is being stored (after uniquification) in memory.

It is fragile, because it can be broken by any intermediate creation of the (new) product with the undesired lexical ordering.

restart;

phi := (1+sqrt(5))/2;

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

_phi := `#mi("φ")`;

`#mi("φ")`

n*_phi:

plots:-pointplot([seq([n, sin(n*phi)], n = 1000 .. 2000)],
                 symbol = point, axes = boxed, size=[250,250],
                 labels = [n, sin(_phi*n)],
                 labeldirections = [horizontal, vertical]);

 

Download fragile_1.mw

It can also be broken by any subsequent reordering of the product (DAG). This matters because (rather horribly) the typeset facility only stores the expression and does not prevent further evaluation.

restart;

phi := (1+sqrt(5))/2;

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

_phi := `#mi("φ");`;

`#mi("φ");`

P := plots:-pointplot([seq([n, sin(n*phi)], n = 1000 .. 2000)],
                 symbol = point, axes = boxed, size=[250,250],
                 labels = [n, sin(_phi*n)],
                 labeldirections = [horizontal, vertical]);

sort(n*_phi,order=plex(n,_phi)):

P;

Download fragile_1a.mw

In a similar vein, the OP's original can be (magically) made to work by a fortuitous interjection. But this even more weak and fragile because the typeset syntax does not prevent subsequent evaluation -- here stripping off the uneval quotes and wrecking the label.

restart;

phi := (1+sqrt(5))/2:

phi*n:

plots:-pointplot([seq([n, sin(n*phi)], n = 1000 .. 2000)],
                 symbol = point, axes = boxed, size=[250,250],
                 labels = [n, typeset('sin(n*phi)')],
                 labeldirections = [horizontal, vertical]);

%;

Download fragile_2.mw

I don't think that either of these should be particulalrly recommended, since neither are generally robust.

Since you are obviously having trouble with provided answers because your version is quite old, why don't you bother to tell us explicitly which version you are using?!

Please explain what you mean by providing your example explicitly.

If you mean that you want to compute the area between the envelope curve and the x-axis then please state that.

You wrote that your example is too complicated to solve. That might mean that it is too complicated to be handled purely symbolically, but it's difficult to tell what you mean without seeing it.

You can upload and attach a worksheet using the green up-arrow in the Mapleprimes editor.

Upload a worksheet that contains the definition of f.

That may show us whether f is evalhf'able or compilable. It might even be that performance of individual computations of f(x,y) could be improved.

@jalal If I've correctly understood your followup query then here is one way:

TESTQCMal_ac.mw

@opus64 The phrase "does not contain" is a structural reference. It means that c[n]*(e+f[n]) is not structurally present as a subexpression. Yes, it may be mathematically present, but that's not the same.

That is why I used simplify with side-relations to do a temporary substitution. (There are other ways to get temprary substitutions of compound terms, eg. using freeze & thaw.)

Some notes, which you may (or may not) find useful: Download struct_note.mw

For your farther goal of automatic handling in cases where you don't specify the subexpression (but it gets handled automagically), it might be much better if you could provide one or more much more involved examples. Your first example is so simple that several simplistic coding attempts could find that target subexpression but still fail on some or most or all or your later examples. It's best to provide a hard example for stuff like this, not an easy one.

Show an example of what you are trying to accomplish.

@mmead Thanks for the worksheet. (Providing detailed requirements almost always helps more.)

It might be possible to do something cleaner (for you to use) with objects. If I get something I'll show it. Alas, my time is limited these days.

@mmcdara Using the single command implicitdiff is more direct than your use of five different commands (alias, diff, isolate, map, and factor). 

It's also easier to remember, to type in. Being simpler also makes its use less error-prone and more straightforward to reuse.

These advantages are the central reason why many single commands exist in Maple and other programming languages.

First 121 122 123 124 125 126 127 Last Page 123 of 591