nm

11438 Reputation

20 Badges

13 years, 75 days

MaplePrimes Activity


These are questions asked by nm

I want to replace   expression that contains function whose first argument is always R0 with r0.

I can do it when the function is  f(R0) or f(R0,x) but I do not know how to tell Maple to do the replacement of the first argument, if the function has 0 or more arguments beyond R0.  This is what I tried

restart;

#this works
expr:=A+f(R0);
evalindets(expr, 'anyfunc(identical(R0))', Z-> subsop(1 = r0, Z ));

A+f(R0)

A+f(r0)

#this also works, when there is one argument after R0
expr:=A+f(R0,x);
evalindets(expr, 'anyfunc(identical(R0),anything)', Z-> subsop(1 = r0, Z ));

A+f(R0, x)

A+f(r0, x)

#but how to do it for any number of arguments after R0? This does not work
expr:=A+f(R0,x,y);
evalindets(expr, 'anyfunc(identical(R0),anything)', Z-> subsop(1 = r0, Z ));

A+f(R0, x, y)

A+f(R0, x, y)

#I do not want to keep adding anything to match the number of argument, as I do not know how many there could be
expr:=A+f(R0,x,y);
evalindets(expr, 'anyfunc(identical(R0),anything,anything)', Z-> subsop(1 = r0, Z ));

A+f(R0, x, y)

A+f(r0, x, y)

 

Download oct_11_2022_anyfunc.mw

I do not want to keep writing anything,anything,anything, for as many times as there could be more arguments.  I wan to say something like

evalindets(expr, 'anyfunc(identical(R0),anything_zero_or_more_arguments)', Z-> subsop(1 = r0, Z ));

Is there a better way to do this whole thing than what I am doing?

Update

Just after I posted this question, I found another structured type that worked

expr:=A+f(R0,x,y,z,h);
evalindets(expr, 'patfunc(identical(R0),anything)', Z-> subsop(1 = r0, Z ));

So patfunc works for zero or more argument after R0, which is what I wanted.

Given that types are core part of Maple, I find it so amazing that the help page "Definition of a Structured Type in Maple"  has so little examples and description of all these types in it. I can't figure what 80% of the types there do, since there are no examples.

Maplesoft should really do a better job on this page and add much much more examples and description. After all, strong typing is what is supposed to be the strength of Maple. But looking at this help page, it does not give one this impression at all.

I want to solve for y in   exp(sqrt(y))= tanh(x) and get y=ln( tanh(x)^2).  But unable to figure what options or assumptions Maple needs.

For reference, here is Mathematica solution that I'd like to duplicate in Maple

Here is my Maple attempts, which uses same assumptions, but Maple solution converts the tanh(x) into exponentials which is much more complicated to look at. I tried to also simplify the answer to tanh(x) but no success so far.

Any ideas what else to try for solve? 

I know that PDEtools:-Solve does the job. Which is why I find this strange. I thought that both PDEtools:-Solve and solve end up using same core code at one point. May be I should switch all my code to use PDEtools:-Solve?  Should not solve here have given same answer as PDEtools:-Solve?

Maple 2022.1 on windows 10.

eq:=sqrt(exp(y))=tanh(x);

(exp(y))^(1/2) = tanh(x)

sol:=solve(eq,y) assuming y::real, x>0

ln((-1+(exp(x))^2)^2/((exp(x))^2+1)^2)

simplify(sol)  assuming real, x>0;
convert(%,trigh)

2*ln(exp(2*x)-1)-2*ln(exp(2*x)+1)

2*ln(cosh(2*x)+sinh(2*x)-1)-2*ln(cosh(2*x)+sinh(2*x)+1)

sol:=PDEtools:-Solve(eq,y) assuming y::real, x>0

y = 2*ln(tanh(x))

 

Download oct_9_2022_simplifcation.mw

mint gives messages such as

 These local variables were assigned a value, but otherwise unused:  i

even though it does say what proc this is in, it does not give the line number where such problem is at.

So if a proc is long, say 100 or 200 lines, it is very hard to find the location of such things visually all the time.  Searching for "i" is not too useful.

Tried different options but there are no line numbers given for these messages.

"C:\Program Files\Maple 2022\bin.X86_64_WINDOWS\mint.exe" -i 2  foo.mpl

Using  -i 4 gives much more information, but no line numbers.

Are there other things to try? I think mint should be improved and list line number for each warning and message such as also These local variables were assigned a value, but otherwise unused: 

It should give lines numbers where this happened to make it easier to locate in the editor.

Maple 2022.1 windows 10.

 

Do you think the following messages  by mint should have been the same? this is just some made up example with no purpose other than to show the messages.

foo:=proc(x)
local z,a:=1,la;
   patmatch(x,a*x,'la');   
   map(z->assign(z),la);
end proc;

boo:=proc(y,x)
local Z,RHS;   
   RHS:=y(x);
   subs(y(x)=Z,RHS);
end proc;

Looking at the above, foo() has z used but never assigned a value, right?  And in boo(), Z is used but never assigned a value.

but mint gives slighlty different message

"C:\Program Files\Maple 2022\bin.X86_64_WINDOWS\mint.exe" -i 2  A.mpl

Procedure foo( x ) on lines 2 to 6
  These local variables were never used:  z

Procedure boo( y, x ) on lines 8 to 12
  These local variables were used but never assigned a value:  Z

Should not these two messages have been the same?

When running mint on a single .mpl file, I often get this warning

These names were used as global names but were not declared:  main_module

When having this code in the mpl file

o:=Object(main_module:-person_type);

The problem is that main_module is a module that lives in separate mpl file.

It is a differerent module in its own ,mpl file which inside it contains the person_type definition. (another module of type object)

I know I can ignore this. And have been. But my question is: how does one "declare" main_module inside this mpl file to avoid getting this warning message? Since main_module is its own module in separate file. I do not understand what does it mean to  "declare" it.

Here is the full code

A:=module()
   export boo:=proc()
      local o;
      o:=Object(main_module:-person_type);
      o:-foo();
   end proc;
end module;

And here is the command I used

"C:\Program Files\Maple 2022\bin.X86_64_WINDOWS\mint.exe" -i 2 A.mpl

Gives

Nested Procedure boo() on lines 2 to 6
  These names were used as global names but were not declared:  main_module

Later on, when I build my .mla library, all these modules are put inside the library. So it is not an issue when running the code, but I'd like to see if it is possible to add something to A.mpl to tell Maple that main_module is separate module and not to worry about it.

 

First 63 64 65 66 67 68 69 Last Page 65 of 201