nm

11643 Reputation

20 Badges

13 years, 144 days

MaplePrimes Activity


These are questions asked by nm

I think I just found one of the most serious problems in Maple I've seen (other than timelimit hanging).

This is using Maple 2024.2 on windows 10.

I'll explain in words the problem, then give worksheet below to reproduce this. I can reproduce this all the time.

I have implicit solution in y(x) to an ode.

If I first solve for y(x) from the solution, so solution is now explicit, then call odetest to check if this explicit solution is correct, and if I use assumptions on the odetest call, and then after that call odetest on the original implicit solution, then odetest fails to verify the implicit solution.

But, if I change the order, and first call odetest to verify the implicit solution first, it verifies it OK !  

So the problem ONLY happens if I change the order of calling odetest and if I use assumptions on the odetest call that was used before on the explicit solution.

This tells me that Maple remembers something from earlier call. Does it remember the assumptions used? If so, this is very risky. As some part of program might call odetest with some assumptions, and another part of the program can use no assumptions.  I thought assuming is only applied to the call it is used at only and will not affect future calls.

Is there a way then to clear all assumptions used on earlier call to Maple command before using the command again? Or to tell Maple not to remember assumptions used on a call?

This is a big problem. It took me 14 hrs of debuging to find it. Order of calls to odetest should not make it behave different.

I hope someone could find solution to this, since now I have no idea what to do as I need to use odetest on explicit and implicit solutions and I do not want the order of calling Maple command to make difference in results.

This worksheet shows the problem. 3 cases are given. Notice that when using assumptions on earlier call to odetest, how it fails to verify the implicit solution in later call.

restart;

interface(version);

`Standard Worksheet Interface, Maple 2024.2, Windows 10, October 29 2024 Build ID 1872373`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1824 and is the same as the version installed in this computer, created 2024, October 31, 14:22 hours Pacific Time.`

kernelopts('assertlevel'=2):

CASE 1. Calling odetest on explicit first with assumptions, make odetest hang when calling on implicit after

 

restart;

IMPLICIT_SOL:=ln(10*x^2 + (10*y(x) + 12)*x + 5*y(x)^2 + 8*y(x) + 4)/5 - (4*arctan((5*y(x) + 5*x + 4)/(5*x + 2)))/5 = (3*ln(2))/5 + (4*arctan(3))/5;
ode:=2*x+3*y(x)+2+(y(x)-x)*diff(y(x),x) = 0;
IC:=y(0) = -2;

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

#find explicit solution first
EXPLICIT_SOL:=solve(IMPLICIT_SOL,y(x)):

#NOw check the explicit solution. Using assumptions to see the problem
timelimit(30,  ( odetest(y(x)=EXPLICIT_SOL,[ode,IC]) assuming positive, y(x)::positive) );

Error, (in evalr) time expired

#Now odetest hangs on the implicit solution

timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

Error, (in is/internal/rename) time expired

 

 

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

y(x)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

CASE 2. Calling odetest on implicit solution first, then it DOES NOT hang !!

 

restart;

IMPLICIT_SOL:=ln(10*x^2 + (10*y(x) + 12)*x + 5*y(x)^2 + 8*y(x) + 4)/5 - (4*arctan((5*y(x) + 5*x + 4)/(5*x + 2)))/5 = (3*ln(2))/5 + (4*arctan(3))/5;
ode:=2*x+3*y(x)+2+(y(x)-x)*diff(y(x),x) = 0;
IC:=y(0) = -2;

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

#notice, no hang now, since called before
timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

[0, 0]

#NOw check the explicit solution. This will timeout which is OK
EXPLICIT_SOL:=solve(IMPLICIT_SOL,y(x)):
timelimit(30,  ( odetest(y(x)=EXPLICIT_SOL,[ode,IC]) assuming positive, y(x)::positive) );

Error, (in type/complex) time expired

#check again that odetest still verifies the implicit solution OK

timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

[0, 0]

 

CASE 3. Calling odetest with no assumptions on explicit solution, then it also does not hang

 

restart;

IMPLICIT_SOL:=ln(10*x^2 + (10*y(x) + 12)*x + 5*y(x)^2 + 8*y(x) + 4)/5 - (4*arctan((5*y(x) + 5*x + 4)/(5*x + 2)))/5 = (3*ln(2))/5 + (4*arctan(3))/5;
ode:=2*x+3*y(x)+2+(y(x)-x)*diff(y(x),x) = 0;
IC:=y(0) = -2;

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

#Now check the explicit solution. but DO NOT use assumptions
EXPLICIT_SOL:=solve(IMPLICIT_SOL,y(x)):
timelimit(30, odetest(y(x)=EXPLICIT_SOL,[ode,IC]));

Error, (in factor/remember) time expired

#check again that odetest still verifies the implicit solution OK

timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

[0, 0]

 


 

Download order_of_ode_test_makes_difference_oct_31_2024.mw

 

update NOV 2, 2024 6 AM

I found the cause.

Removing PHYSICS from libname, then the problem goes away !

So this is caused by PHYSICS package. For some reason, having Physics package in the libname causes odetest to hang/fail compared to when the physics package is not in the libname path. Worksheet below.

restart;

interface(version);

`Standard Worksheet Interface, Maple 2024.2, Windows 10, October 29 2024 Build ID 1872373`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1824 and is the same as the version installed in this computer, created 2024, October 31, 14:22 hours Pacific Time.`

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

CASE 1. without PHYSICS on libname, it works !!

 

restart;

kernelopts('assertlevel'=2):

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

libname:=libname[2]; #remove PHYSICS

"C:\Program Files\Maple 2024\lib"

libname;

"C:\Program Files\Maple 2024\lib"

IMPLICIT_SOL:=ln(10*x^2 + (10*y(x) + 12)*x + 5*y(x)^2 + 8*y(x) + 4)/5 - (4*arctan((5*y(x) + 5*x + 4)/(5*x + 2)))/5 = (3*ln(2))/5 + (4*arctan(3))/5;
ode:=2*x+3*y(x)+2+(y(x)-x)*diff(y(x),x) = 0;
IC:=y(0) = -2;

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

#find explicit solution first
EXPLICIT_SOL:=solve(IMPLICIT_SOL,y(x)):

#NOw check the explicit solution. Using assumptions to see the problem
timelimit(30,  ( odetest(y(x)=EXPLICIT_SOL,[ode,IC]) assuming positive, y(x)::positive) );

Error, (in evalr/ln) time expired

#Now try odetest  on the implicit solution

infolevel[odetest]:=5;

5

timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

odetest: Performing an implicit solution test

odetest: Performing an explicit (try soft) solution test

odetest: Performing an implicit solution (II) test

[0, 0]

 

 

CASE 2. With Physics on libname, it fails !

 

restart;

kernelopts('assertlevel'=2):

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

IMPLICIT_SOL:=ln(10*x^2 + (10*y(x) + 12)*x + 5*y(x)^2 + 8*y(x) + 4)/5 - (4*arctan((5*y(x) + 5*x + 4)/(5*x + 2)))/5 = (3*ln(2))/5 + (4*arctan(3))/5;
ode:=2*x+3*y(x)+2+(y(x)-x)*diff(y(x),x) = 0;
IC:=y(0) = -2;

(1/5)*ln(10*x^2+(10*y(x)+12)*x+5*y(x)^2+8*y(x)+4)-(4/5)*arctan((5*y(x)+5*x+4)/(5*x+2)) = (3/5)*ln(2)+(4/5)*arctan(3)

2*x+3*y(x)+2+(y(x)-x)*(diff(y(x), x)) = 0

y(0) = -2

#find explicit solution first
EXPLICIT_SOL:=solve(IMPLICIT_SOL,y(x)):

timelimit(30,  ( odetest(y(x)=EXPLICIT_SOL,[ode,IC]) assuming positive, y(x)::positive) );

Error, (in evalr/shake) time expired

#Now try odetest  on the implicit solution

infolevel[odetest]:=5;

5

timelimit(30,  odetest(IMPLICIT_SOL,[ode,IC]) );

odetest: Performing an implicit solution test

odetest: Performing an explicit (try soft) solution test

odetest: Performing an implicit solution (II) test

Error, (in is/internal/rename) time expired

 

 

Download order_of_ode_test_makes_difference_NOV_2_2024.mw

my question is: Is it safe to permanently remove Physics package from libname? Why is having physics package in libname (which is by default) causes this problem?

I do not use Physics package explicitly in my code. i.e. I do not do Physics:- calls. 

Any one knows what effect not having Physics on libname cause? Will Maple still work OK for everything if one is not calling Physics package explicitly?

What is the correct way to find all terms of the form  _Cn^m where n is non negative integer and m is exponent which can be 1?

The problem is finding _Cn with no exponent. Maple's   _Cn^anything does not match _Cn but only when there is an actual exponent present.

It is easy to find _Cn^m with m present and easy to find _Cn with no exponent, but how to combine the two is the problem. Here is an example.

Given e:=_C1^2+_C1+_C2^3+a+b; I want to obtain the set {_C1^2,_C1,_C2^3}  but I get instead {_C1, _C2, _C1^2, _C2^3} using ther following code

e:=_C1^2+_C1+_C2^3+a+b;
indets(e,   Or(  And(symbol, suffixed(_C, nonnegint)),
                 And(symbol, suffixed(_C, nonnegint))^anything  ));

If instead I do this

e:=_C1^2+_C1+_C2^3+a+b;
indets(e, And(symbol, suffixed(_C, nonnegint))^anything);

This gives {_C1^2, _C2^3} , so it did not pick the _C1 term since exponent is missing. If I do this instead

e:=_C1^2+_C1+_C2^3+a+b;
indets(e, And(symbol, suffixed(_C, nonnegint)));

This it gives {_C1, _C2} and if I do 

e:=_C1^2+_C1+_C2^3+a+b;
indets(e,   And(symbol, suffixed(_C, nonnegint))^Or(anything,identical(1)))

it gives {_C1^2, _C2^3}

What to do to obtain {_C1^2,_C1,_C2^3} 

I am trying to find all _Cn^m in an expression where m can be anything including not being there (or 1 basically) but in Maple, exponent 1 is not counted as exponent.

Update

Another input example is e:=_C1^2+_C1+ _C1*_C2^3+a+b;  This should be produce the set {_C1^2,_C1,_C2^3} 

Any trick to use for this?

Maple 2024.1

 

I was not expecting to see step-by-step for this ode, but why does it give internal error instead of saying not supported? 

Am I doing something wrong in the call? Unfortunately, this Maple internal error can't be trapped at user level. Which means the whole program terminates also.

interface(version);

`Standard Worksheet Interface, Maple 2024.1, Windows 10, June 25 2024 Build ID 1835466`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1820 and is the same as the version installed in this computer, created 2024, September 28, 18:14 hours Pacific Time.`

libname;

"C:\Users\Owner\maple\toolbox\2024\Physics Updates\lib", "C:\Program Files\Maple 2024\lib"

ode:=3*diff(y(x),x$2)+x*diff(y(x),x)-4*y(x)=0;

3*(diff(diff(y(x), x), x))+x*(diff(y(x), x))-4*y(x) = 0

Student:-ODEs:-ODESteps(ode,y(x))

Error, (in anonymous procedure called from Student:-ODEs:-ODESteps) too many levels of recursion

try
   Student:-ODEs:-ODESteps(ode,y(x));
catch:
  print("cought the error ");
end try;

Error, (in anonymous procedure called from Student:-ODEs:-ODESteps) too many levels of recursion

 


 

Download too_many_Levels_odesteps_oct_14_2024.mw

 

I never really understood Intat. Help says 

"The intat command expresses an integral evaluated at a point; it is analogous to using the D command to express a derivative evaluated at a point."

But slope at a point is clear what it is and one can visualize it.

I do not understand what integral at single point means.

If one thinks of integration as area under the curve of the function, so what does area at single point mean? Should not integration (definite) always have lower and upper limits?

But my main question is not the above. I am sure there is a valid reason for Intat, otherwise it will not be in Maple.

But my quesiton is, in the context of solution to ode, can one replace result given using Intat by Int such that the lower limit starts from zero, and using same upper limit?

ie change Intat(...., a_ = something)  by Int( ... , a_ = 0 ... something) without changing the semantics or the correctness of the solution?

Because in  Intat, the lower limit is empty, and this always bothered me. At school the teacher says definite integration should have both lower and upper limits.

I tried it few places, and odetest verifies the solution of ode when using Intat or when using Int with lower limit zero:

ode:=diff(y(x), x) = B + C*f(a*x + b*y(x));

diff(y(x), x) = B+C*f(a*x+b*y(x))

sol_1:=Intat(1/(C*f(_a*b)*b+b*B+a),_a = (a*x+b*y(x))/b)*b-x+_C1 = 0;
sol_2:=Int(1/(C*f(_a*b)*b+b*B+a),_a = 0..(a*x+b*y(x))/b)*b-x+_C1 = 0;

Intat(1/(C*f(_a*b)*b+b*B+a), _a = (a*x+b*y(x))/b)*b-x+_C1 = 0

(Int(1/(C*f(_a*b)*b+b*B+a), _a = 0 .. (a*x+b*y(x))/b))*b-x+_C1 = 0

odetest(sol_1,ode);

0

odetest(sol_2,ode);

0

 

 

Download intat_vs_int.mw

Is there a case you know, where solution of ode which has Intat, when replaced by Int with lower limit 0, will no longer verifies the ode?  I am not able to find one so far. But may be there is.
 

Update

fyi, I found case where it makes difference. Not for odetest, but when using value. When using Int(...,tau=0..upper) vs   Intat(....,tau=upper)

value was able to find the value when using Intat, but not when using Int (for this example). 

So I think I will just stick to Intat even though both verified the ode as valid solution as it is better to be able to find value for integral if possible. I knew there must be good reason why Intat was invented.

 

ode:=diff(y(x),x)= sin(x-y(x));

diff(y(x), x) = sin(x-y(x))

sol_1:=Int(1/(1 - sin(tau)), tau = 0..x - y(x)) = x + _C1;
sol_2:=Intat(1/(1 - sin(tau)), tau = x - y(x)) = x + _C1;

Int(1/(1-sin(tau)), tau = 0 .. x-y(x)) = x+_C1

Intat(1/(1-sin(tau)), tau = x-y(x)) = x+_C1

odetest(sol_1,ode);

0

odetest(sol_2,ode);

0

value(sol_1);

int(1/(1-sin(tau)), tau = 0 .. x-y(x)) = x+c__1

value(sol_2);

-2/(tan((1/2)*x-(1/2)*y(x))-1) = x+c__1

 


 

Download int_vs_intat_v2.mw

 

I have expression which can have many different functions  in it. Assume the expression is `+` type.

I do not know before what these function names are. 

Is there a way to make Maple collect on these functions automatically? Simplify does not do it. So if there is something like b*g(x)+g(x) in the expression, to simplify this to (1+b)*g(x) automatically?

I noticed if expression is   just b*g(x)+g(x) then simplify does give (1+b)*g(x) but once I add a new term, like 3+b*g(x)+g(x) then it no longer does it! which for me is very strange. I was expecting to get 3+(1+b)*g(x) 

Here is an example

restart;

T:=g(x)+b*g(x);
simplify(T);

g(x)+b*g(x)

g(x)*(b+1)

T:=3+g(x)+b*g(x);
simplify(T);

3+g(x)+b*g(x)

3+g(x)+b*g(x)

T:=3+g(x)+b*g(x)+f(x);
simplify(T);

3+g(x)+b*g(x)+f(x)

3+g(x)+b*g(x)+f(x)

 

 

Download simplification_oct_9_2024.mw

What do I need to do to get this output using another software

Ofcourse, I could go and add code to find the names of each function and then use collect. But it seems to me simplify should have done this automatically as the above shows. So I am wondering if there is an option I've overlooked which will do this more easily.

Maple 2024.1

First 21 22 23 24 25 26 27 Last Page 23 of 205