nm

11353 Reputation

20 Badges

13 years, 20 days

MaplePrimes Activity


These are questions asked by nm

I was saying to myself today, that one nice thing in Maple, is that it has good type system so one can check type of arguments aginst wrong types being used in the call.

So I was surprised when I called ArrayTools:-AllNonZero  using list as argument, where this function is supposed to accept only Matrix,Vector or Array. And it worked.  But it gave wrong answer at the same time.

Am I doing something wrong here? Should not have this call failed to go through?

restart;
interface(warnlevel=4);
kernelopts('assertlevel'=2):

A:=[0,0,0];
ArrayTools:-AllNonZero(A)

Maple replied 

                       true

But 

A:=Array([0,0,0]);
ArrayTools:-AllNonZero(A)

Now Maple gives the expected result  false

The question is why Maple did not detect the wrong type? Should it have detected wrong type?

And why it even gave wrong answer (but this is not as important, since the call should not be allowed in first place).

btw, this applied to all the other API's listed

 

 

I found a new strange thing with odetest that I have not seen before.

Would you say that these two solutions are the same or not?

They look the same to me.  One just have all the terms on one side, that is all.

Why would Maple odetest verify the first one but not the second? I did not know that all terms have to be on one side before. Is this documented somewhere?

Please see worksheet below.

restart;

interface(version);

`Standard Worksheet Interface, Maple 2020.1, Windows 10, July 30 2020 Build ID 1482634`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 847 and is the same as the version installed in this computer, created 2020, October 17, 17:3 hours Pacific Time.`

ode:=diff(y(x), x) - 2*y(x) = 2*sqrt(y(x));
ic:=[y(0)=1];
maple_sol:=dsolve([ode,op(ic)],implicit);
odetest(maple_sol,[ode,op(ic)]) assuming x>0

diff(y(x), x)-2*y(x) = 2*y(x)^(1/2)

[y(0) = 1]

1-2*exp(x)+y(x)^(1/2) = 0

[0, 0]

#now move some terms to one side, and odetest no longer verifies it
my_sol:=y(x)^(1/2) = -1+2*exp(x);
odetest(my_sol,[ode,op(ic)]) assuming x>0

y(x)^(1/2) = -1+2*exp(x)

[diff(y(x), x)-2*y(x)+2-4*exp(x), 0]

#the solution is to put all terms on one side
my_sol:=y(x)^(1/2) = -1+2*exp(x);
odetest(rhs(my_sol)-lhs(my_sol)=0,[ode,op(ic)]) assuming x>0

y(x)^(1/2) = -1+2*exp(x)

[0, 0]

 


 

Download odetest_issue_oct_18_2020.mw

 

Using solve on this example:

restart;
eq:=x^3 - 3*x^2 + 3*x - 1=0;
solve(eq,x);

gives solution x=1, with multiplicty 3

              1, 1, 1

When using PDEtools:-Solve

restart;
eq:=x^3 - 3*x^2 + 3*x - 1=0;
solve(eq,x);
PDEtools:-Solve(eq,x);

it gives

         x = 1

How can one make it show x=1, x=1, x=1 ?

Found that only when using PDEtools:-Solve(eq,x,numeric) it gives 

           x = 1., x = 1., x = 1.

How to make it do the same without using numeric?

Maple 2020.1.1

 

What is the reason that error accepts its arguments without being inside paranthesis? This is different from all other Maple functions I've seen. For example, both these below work the same

f := proc (x) 
     if x<0 then 
        error "invalid x: %1", x; 
     else 
        x^(1/2); 
     end if 
end proc:

And

g := proc (x) 
     if x<0 then 
        error("invalid x: %1", x); 
     else 
        x^(1/2)
     end if 
end proc:

One can't do for other Maple functions. For example sin x  gives an error. It must be sin(x)

Looked at help page for error and did not see something about this difference.

The command Typesetting:-Settings(prime=x,typesetprime=true):  makes diff(y(x),x) gives the latex as y'(x) which is what I wanted.

But I'd like to also be able to turn this off.  The reason is that in my program, I could have different variables in different places, and need to be able to turn this off/on as the program runs.

I know I can change the setting, by calling the above command again, with different variable. But I was looking for a way to turn it off as well. 

Similar to Typesetting:-Suppress  

Is there a way to do that? Actually the best solution would be, is to have the effect of Typesetting:-Settings(prime=x,typesetprime=true): be local to the proc. So if this command is used inside a proc, when leaving the proc, its effect will be automatically removed, as if this command was never issued.

Only when it is issued in global context, it will remain in effect until one does a restart.   Right now, the effect of Typesetting:-Settings(prime=x,typesetprime=true): is global. Even when called from inside a proc.  But this might be hard to implement. Therefore, being just able to turn it off is good for now.

Here is an example

restart;
foo:=proc(expr,x,y)
   Typesetting:-Settings(prime=x,typesetprime=true):
   print(Physics:-Latex(expr));

   #How to turn off the effect of above Typesetting command now?
   #so the following command works as the default setting?

   print(Physics:-Latex(expr));
end proc;


expr:=diff(y(x),x)=3:
foo(expr,x,y);

 

First 109 110 111 112 113 114 115 Last Page 111 of 199