## 10352 Reputation

16 years, 72 days

## MaplePrimes Activity

### These are replies submitted by ecterrab

@snpa
Would you mind please uploading a worksheet with your question, presented, as in "After having entered this and that (shown) I enter "this" and expect XXX but receive YYY".  In that way, the question is sufficiently clear and helping you becomes simpler. To upload the worksheet please use the green arrow you see when replying or posting a question.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft.

## @michalkvasnicka  This issue in Ma...

This issue in MapleCloud is now fixed, so the problem is resolved.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

Thanks for your new post; the problem was inadvertently introduced in March during one more round of improvements in SortProducts, and is fixed in the Maplesoft Physics Updates v.1015 or newer (for Maple 2021), uploaded earlier today. Attached is what I receive, with all the terms correctly sorted.

physics_sorting_products_(reviewed).mw

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## convert/exp and DifferentialThomas...

This kind of problem is tackled using differential algebra elimination. There are three computational implementations of that: DEtools:-rifsimp, DifferentialAlgebra and, more recently, DifferentialThomas. The three use different algorithms to accomplish, basically, the same. The algorithms are extended to handle mathematical functions using the approach explained in PDEtools:-dpolyform; i.e.: representing the (non-rational) mathematical functions by (rational) differential equations and auxiliary variables.

This approach is extremely powerful but, depending on the problem, it may hang. The example you are asking about, however, does not hang if a) you tackle it using DifferentialThomas (256 seconds) or more appropriately b) you use convert/exp (0.6 seconds): Since the output of independentof could be expressed with any mathematical functions, the convert/exp step should be applied by default, directly within PDEtools:-Solve. I will test this idea and if it works as I expect put it in one of the next Maplesoft Physics Updates.

Edgardo S. Cheb-Terrab
Physics,Differential Equations and Mathematical Functions, Maplesoft

## @ArashMhasani  You are using a pro...

You are using a program you wrote, Ldiff, that I copy and paste here:

```Ldiff := proc(f, h, x)
local n, j, ld;
if not type(f, 'vector') then
ERROR("ldiff: 1st argument must be a vector")
else
n := linalg[vectdim](f)
fi;
if type(h, 'table') then
if not (linalg[vectdim](h) = 1) then
ERROR("2nd argument must be a scalar valued function")
fi
fi;
if not (type(x, 'vector') and linalg[vectdim](x) = n) then
lprint("ldiff: 3th argument is the variable vector and must be \
defined as ");
lprint("       an unassigned vector, wrong type or number of el\
ements, ");
lprint("  ");
ERROR("see last comment")
fi;
ld := 0;
for j to n do
ld := ld + diff(h, x[j])*f[j]
od;
simplify(normal(ld))
end
```

I noticed that, removing the call to simplify, it takes 263 seconds to compute Ldiff(f,z,x), the input you say in your worksheet that hangs, resulting on an expression of length 167189212 (see ?length). If you also remove the call to normal,  Ldiff(f,z,x) is computed in less than 1 sec and results in an expression of length 846930. It is then unclear the advantage of calling normal. Also, simplify includes normalization, so I would suggest you to just remove the call to normal, and in this particular case of Ldiff(f,z,x) remove also the call to simplify.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

In order to help you, it is useful (necessary) if you post a Maple worksheet (use the Green arrow you see when you post your question) with the problem formulated, including your attempt to compute the Lie derivative, using any of the existing Maple commands for that purpose mainly in the Physics (simpler) or DifferentialGeometry packages.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical functions, Maplesoft

## @nm  type(identical(x), type) retu...

type(identical(x), type) returns true, so yes it is a type.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## Clarifying...

Hi great Carl. In the first two replies I made (found above), I didn't use 'flat'. But then I saw @nm used 'flat', so I imagined that for some reason he wanted to use the 'flat' option. Hence in the third or so reply I illustrated the actual problem of how to match the type (not related to the 'flat' option of subsindets) using his (assumed to be) preference of using 'flat'.

The default of subsindets and evalindets is not flat, so if you do not indicate 'flat', the procedure being applied is applied recursively, as designed. BTW looking at what @nm was doing (application of simplify/radical?) it also seemed natural to use 'flat' since simplify/radical already recurses.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## Good opportunity...

Maybe this is a good opportunity: why don't you make a post here in Mapleprimes, where you indicate what you would have liked to find in the help system regarding this issue, including the kinds of expressions to match that you'd like to see in that page. Others may want to add expressions to be matched. Then we (at Maplesoft) can move into creating that help page, including those examples and any other that may also seem useful. In the end, the page that would have been useful for you will be there in the system for everybody.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## @nm For that reason I mentioned &qu...

For that reason I mentioned "note that denominators are represented as negative powers". You seem to have not noticed the comment. It is at the beginning of my previous reply. It is the same reply where you missed the example.

Taking that comment into account, for instance subsindets[flat](expr, And(`*`, satisfies(u -> andmap(membertype, [Or(exp(anything), exp(anything)^(-1)), anything^fraction], [op(u)]))), G) does what you want in one go. Note the use of Or, also mentioned in that reply. This language is remarkably flexible and expressive, but you need to know what is what you want to match, and for that, how the desired expression is represented.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## No....

No. I showed - in the reply you are replying to - how to match that pattern for "any number of operands, 2, 3, or other", and I showed you achieve that by not saying 2, 3, or any fixed number. In that sense, what I showed is just the equivalent of what you show in Mathematica. If you could actually refer to what you are replying and telling what part wasn't clear there? By the way I am only talking about matching in Maple, and am not interested in how you do that in Maxima, Sage, Reduce, Mathematica or others, nor am curious about comparisons. Only showing you how to do it. In Maple.

Repeating then: you need to know clearly what is what you want to match. And there is nothing like "the pattern is meant to be ..." Either it is, or it is not. And both an implicit 1 in a product,  with or without, a fixed or unlimited, or selected different numbers of more operands, are all straightforward types. Then using the tools I mentioned in the previous reply all of them look easy, as in the examples I showed (you seem to have missed them?).

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## tweak the types...

The types radical and sqrt may or not match a more general expression; you still have anything^fraction. Then you need to familiarize one bit with the representation: denominators are actually negative powers. This single example may be all you need to understand what works and why not when it doesn't:

```> op(0 .. -1, 1/sqrt(exp(x)))

`^`, exp(x), -1/2```

Then your original question asks about "a product of three operands only, where one is an exponential one is a a radical, the third one is anything". That is what  exp(anything)*anything*sqrt(anything) isThe "three operands in a product" are matched with `&*`(anything\$3), but in your expression, I do not see any product of three operands, so Maple gives up before going into the contents of any product.

Summarizing: a) you need to make more precise what is what you want to match, and b) numerators and denominators are not the same things, neither radicals sqrt or fractional powers. Perhaps this example helps:

```# Your expression
> expr := (-x + sqrt(9*x^2*exp(2*c) + 8)*exp(-c) + 99)/(4*x) + (a*sqrt(z) - 99 + sin(c*sqrt(r + 4) + 20))/3 + 10 + 1/(c + exp(-x)*sqrt(exp(x))) + sqrt(h):

# Apply some G to products of "any" number of operands, where there is an
# exponential and a fractional power

> subsindets(expr, And(`*`, satisfies(u -> andmap(membertype, [exp(anything), anything^(fraction)], [op(u)]))), G);

(-x + G(sqrt(9*x^2*exp(2*c) + 8)*exp(-c)) + 99)/(4*x) + a*sqrt(z)/3 - 23 + sin(c*sqrt(r + 4) + 20)/3 + 1/(c + G(exp(-x)*sqrt(exp(x)))) + sqrt(h)```

This reply applies as well to your next-other question about the same: it is all about the type you are matching, only, and when constructing structured types it helps using the And, Or, Not operators, together with type suffices, as shown above; frequently in conjunction with andmap and ormap. It is a very powerful approach to write types. Then use subsindets.

Note: membertype cannot be thrown over a product `*`, that is why you need to [op(u)] in the example above. To avoid these subtleties you can use the undocumented `tools/membertype`, that you can throw over anything that has any kind of structure (ie non-atomic objects, or for which op returns something)

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## @Rouben Rostamian  Indeed. I notice...

Indeed. I noticed that yesterday, when replying here, and tracked the problem in the Maplesoft database. Unfortunately it is not something I can fix, but can tell you what is at the root: if you use 1D-Math display for input lines, as you do in this worksheet, the input does not go through the new latex command (I call that the "library side") and is done in the GUI directly using the {lstlisting} environment; and there, things like \{ \} are displayed "as such". Until this problem is fixed in the GUI (not something I can distribute within the Maplesoft Physics Updates) you have two options:

1. use 2D-Math display for input lines, and the translation of that input will go to the library side (the new latex command) and be translated properly without this issue.
2. remain using 1D-Math display for input lines but then you need to remove, manually, the `\` that preceedes `{` and `}`; as said until this is fixed in the GUI which I suppose will happen in 2021.2 or Maple 2022.

My suggestion: go with 1. The 2D-math display for input lines is currently pretty good. When your worksheet is already using 1D-Math display of input, you can still get 2D-Math display by right-clicking the input line followed by "Convert To > 2D-Math input".

On your comments: thanks, Rouben. And indeed I also put special care in making the .tex more readable.

Best!

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## on writing your `print/F` routine....

The Physics Typesetting is too advanced to be used as a template and relies on internal Physics subroutines. But giving a look for instance to `print/casesplit/ans` you can get the idea: s is a Typesetting structure representing "how it is going to  look"t is the actual thing being displayed (so not how it looks), then Typesetting:-mcomplete(s, t) looks the way you want (like s), and copy & paste correctly (like t). So all you need is to experiment a bit with creating a Typesetting structure that looks the way you want. For that, you can use the palettes.

Example: use the Fenced palette to produce <A, B> with good typesetting, then mark it with the mouse, right-click > 2D-Math > convert to atomic variable, then lprint it, and you will get this:

``#mrow(mfenced(mrow(mi("A"),mo("&comma;"),mi("B")),open = "&lang;",close = "&rang;"),mo("&InvisibleTimes;"))``

Indeed, copy that cryptic stuff and paste it, press enter, and you see the nice <A, B>. You can even play around adding or removing stuff to see how you can tweak it.

Next remove those enclosing `` and # and suffix all functions with Typesetting:-. You will now get a Maple Typesetting function, that displays the same way:

`Typesetting:-mrow(Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mi("A"),Typesetting:-mo("&comma;"),Typesetting:-mi("B")),open = "&lang;",close = "&rang;"),Typesetting:-mo("&InvisibleTimes;")`

Now that you have how it should look you insert this block in your print/foo to produce that s. Then construct the t, that is the easy part - say for f([a,b,c]) ,t is just that, f([a,b,c]). Taking that `print/casesplit/ans` as template, next is to return using Typesetting:-mcomplete. And you get what you want. After one or two you see you can produce excellent print/foo routines with ease.

Finally, a tip for taking advantage of typesetting already coded, that you see there. Suppose you want to reproduce the typesetting of a Ket. Go with this:

```> lprint(Typesetting:-Typeset(Ket(A)));

Typesetting:-mcomplete(Typesetting:-mfenced(Typesetting:-mrow(Typesetting:-mspace(width = "0.3em"),Typesetting:-mi("A"),Typesetting:-mspace(width = "0.3em")),open = "&verbar;",close = "&rang;"),Typesetting:-_Hold([Physics:-Ket(A)]))
```

That is mostly all you need. You see the s and the t you can use as you see used in print/casesplit/ans.

It's been some years now that I am about to write a new Physics export, an Applet so that one could insert "how it should look" and "what it is" and get a related print/... routine ready for use. Such a thing would be useful in Physics where the notation can be rather intricate.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

## @itsme What I can tell for sure: if...

What I can tell for sure: if it is doable in current Mathematica, it can either be done with ease, rigth away, using Physics, or the developments necessary for that can only be a small few.

But the most important thing: I have a working style that is about 'curiosity' and 'hands-on', some people call it 'experimental'. The references (arxiv and etc.) are of course relevant, but not a match for that working style. References only after I can experiment with the problem. Focusing one or two things at a time render results faster than focusing many (I can do that but any reply becomes a "papiro"). Then, in that way, my experience at least is that achievements start to pile rapidly and in surprising ways.

To move forward then I'd need from you a worksheet with the steps you know how to do, and where is that you get stuck - plus what is what you'd expect. As you did in this post at the beginning.

Answering the question you present at the end, see ?print, and where you read "there is a limited facility ..." read "There is an extremely powerful facility ...". The page is out-of-date; currently, a mixture of `print/foo` & the Typesetting package has transformed `print/foo` into a marvel.

Edgardo S. Cheb-Terrab
Physics, Differential Equations and Mathematical Functions, Maplesoft

 1 2 3 4 5 6 7 Last Page 1 of 51
﻿