nm

11368 Reputation

20 Badges

13 years, 39 days

MaplePrimes Activity


These are questions asked by nm

I think I've seen such a problem before but thought it was fixed.

Here is an example, where depending on what one calls the constant of integration, maple can or not, verify the solution of the ode.

This should not happen.

When calling the constant of integration C[1] or _C Maple does not verify the solution. Only when using _C1 it does.

This is a problem, since I do not use _C1 or _C2  in my solution (so not to conflict with Maple's), I use C[1] and C[2].

Is there a workaround for this? 

Example 1

ode:=diff(z(x),x)+z(x)*cos(x)=z(x)^n*sin(2*x);
mysol:=z(x) = 1/((_C1*exp(sin(x)*(n - 1))*n - _C1*exp(sin(x)*(n - 1)) + 2*sin(x)*n - 2*sin(x) + 2)/(n - 1))^(1/(n - 1));
odetest(mysol,ode);

    0

Now I just changed _C1 to C[1] 

restart;
ode:=diff(z(x),x)+z(x)*cos(x)=z(x)^n*sin(2*x);
mysol:=z(x) = 1/(( C[1]*exp(sin(x)*(n - 1))*n - C[1]*exp(sin(x)*(n - 1)) + 2*sin(x)*n - 2*sin(x) + 2)/(n - 1))^(1/(n - 1));
odetest(mysol,ode);

 

and I get 2 pages full of stuff thrown at the screen. Same when using C as constant of integration.

I could change my C[1] and C[2] to _C1 and _C2 each time just before calling odetest as workaround.

But would like to ask if this is supposed to happen and why it happens. I depend on odetest alot, as I use it to tell me if my solution is correct or not and I do not want false negatives.

I have found additional ones. May be these will help locate the problem

Example 2

restart;
ode:=diff(y(x),x) = (1+x+y(x))^(1/2);
mysol1:=y(x) = LambertW(-exp(-x/2 - 1 + C[1]/2))^2 + 2*LambertW(-exp(-x/2 - 1 + C[1]/2)) - x:
odetest(mysol1,ode);

gives

But when using _C1 instead of C[1], this is the answer

restart;
ode:=diff(y(x),x) = (1+x+y(x))^(1/2):
mysol2:=y(x) = LambertW(-exp(-x/2 - 1 + _C1/2))^2 + 2*LambertW(-exp(-x/2 - 1 + _C1/2)) - x:
odetest(mysol2,ode);

Example 3

restart;
ode:=diff(y(x),x) = f(x)*y(x)+g(x)*y(x)^k:
mysol1:=y(x) = (-exp(-(k - 1)*Int(f(x), x))*(int(g(x)*exp((k - 1)*Int(f(x), x)), x)*k - int(g(x)*exp((k - 1)*Int(f(x), x)), x) - C[1]))^(-1/(k - 1)):
odetest(mysol1,ode);

   #long output is given

Changing C[1] to _C1 gives 0 right away

restart;
ode:=diff(y(x),x) = f(x)*y(x)+g(x)*y(x)^k:
mysol2:=y(x) = (-exp(-(k - 1)*Int(f(x), x))*(int(g(x)*exp((k - 1)*Int(f(x), x)), x)*k - int(g(x)*exp((k - 1)*Int(f(x), x)), x) - _C1))^(-1/(k - 1)):
odetest(mysol2,ode);

     0

 

Example 4

restart;
ode:=3*y(x)*diff(y(x),x)+5*cot(x)*cot(y(x))*cos(y(x))^2 = 0:
mysol1:=y(x) = RootOf(10*ln(sin(x))*cos(_Z)^2 - 3*cos(_Z)*sin(_Z) + 30*C[1]*cos(_Z)^2 + 3*_Z):
odetest(mysol1,ode);

Gives pages long output. Changing C[1] to _C1 gives zero

restart;
ode:=3*y(x)*diff(y(x),x)+5*cot(x)*cot(y(x))*cos(y(x))^2 = 0:
mysol2:=y(x) = RootOf(10*ln(sin(x))*cos(_Z)^2 - 3*cos(_Z)*sin(_Z) + 30*_C1*cos(_Z)^2 + 3*_Z):
odetest(mysol2,ode);

    0

 

Example 5

restart;
ode:=x*(x-a*y(x))*diff(y(x),x) = y(x)*(y(x)-a*x);
mysol1:=y(x) = exp((-a + 1)*RootOf(x*exp(ln(x)*a + _Z*a + C[1]*a + C[1]) + exp(ln(x)*a + _Z*a + C[1]*a - _Z + C[1])*x - 1) - ln(x)*a - C[1]*(a + 1)):
odetest(mysol1,ode);

gives

Changing C[1] to _C1 gives zero

restart;
ode:=x*(x-a*y(x))*diff(y(x),x) = y(x)*(y(x)-a*x);
mysol2:=y(x) = exp((-a + 1)*RootOf(x*exp(ln(x)*a + _Z*a + _C1*a + _C1) + exp(ln(x)*a + _Z*a + _C1*a - _Z + _C1)*x - 1) - ln(x)*a - _C1*(a + 1)):
odetest(mysol2,ode);

              0

 

Example 6

restart;
ode:=x*diff(y(x),x)^2-a*y(x)*diff(y(x),x)+b = 0:
mysol1:=y(x) = x*RootOf(2*x*_Z^2*a - 2*C[1]*_Z^((2*a - 1)/(a - 1))*a - x*_Z^2 + C[1]*_Z^((2*a - 1)/(a - 1)) - b)/a + b/(RootOf(2*x*_Z^2*a - 2*C[1]*_Z^((2*a - 1)/(a - 1))*a - x*_Z^2 + C[1]*_Z^((2*a - 1)/(a - 1)) - b)*a):
odetest(mysol1,ode);

gives many pages of output. Changing C[1] to _C1 gives zero

restart;
ode:=x*diff(y(x),x)^2-a*y(x)*diff(y(x),x)+b = 0:
mysol2:=y(x) = x*RootOf(2*x*_Z^2*a - 2*_C1*_Z^((2*a - 1)/(a - 1))*a - x*_Z^2 + _C1*_Z^((2*a - 1)/(a - 1)) - b)/a + b/(RootOf(2*x*_Z^2*a - 2*_C1*_Z^((2*a - 1)/(a - 1))*a - x*_Z^2 + _C1*_Z^((2*a - 1)/(a - 1)) - b)*a):
odetest(mysol2,ode);

             0

and more. I think the above should hopefully help locate the issue.

Maple 2020.1 with Physics 708

 

I see this error once in a while

Error, (in SolveTools:-CancelInverses) assertion failed, simplify should not leak _Z variables out from RootOfs 

When I run a long script. Unfortunately, I have not been able to make a small example to reproduce it. So it is random. I've seen it about 5-6 times in the last 2-3 weeks, over 100 runs during this time.

Just wanted to see if anyone saw this before. The strange thing it is random. I can re-run the same script, or restart it from the point where it failed,  with no changes anywhere, and this error do not show up again for days, and suddenly it shows up again.

Must be related how to Maple internal cache memory happened to be arranged at that time. I noticed that a number of things in Maple seem to happen at random times, such as a random hang of the server at different times and places. I could never understand why this happens in Maple.

If there is only one thing Maplesoft could do for the next version, it will be to improve the robustness of its software.


Update March 7, 2024.

FYI, examples giving this error using Maple 2024 using different functions

interface(version);

`Standard Worksheet Interface, Maple 2024.0, Windows 10, March 01 2024 Build ID 1794891`

restart;

kernelopts('assertlevel'=2):

ode:=(exp(x)*sin(y(x))-3*x^2)+(exp(x)*cos(y(x))+y(x)^(-2/3)/3)*diff(y(x),x)=0;
DEtools:-odeadvisor(ode,y(x))

exp(x)*sin(y(x))-3*x^2+(exp(x)*cos(y(x))+(1/3)/y(x)^(2/3))*(diff(y(x), x)) = 0

Error, (in SolveTools:-CancelInverses) assertion failed, simplify should not leak _Z variables out from RootOfs

ode:=diff(y(x),x)*y(x)/(1+1/2*sqrt(1+diff(y(x),x)^2))=-x;
dsolve([ode,y(0)=3],y(x))

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

Error, (in SolveTools:-CancelInverses) assertion failed, simplify should not leak _Z variables out from RootOfs

 

 

Download leak_Z_maple_2024.mw

I have reported this to Mapesoft.

 

Whenever I call solve, I now make sure to convert the solution to a set first to get rid of duplicate solutions which could be generated.

Is there a way to tell solve to return unique solution only by default?

restart:
expr:=-1/2*ln(u)-1/4*ln(u^2+2)-ln(x)-C[1]:
sol:=solve(expr = 0,u):
nops([sol])

   8

But there are actually only 4. The other 4 are duplicated

nops(convert([sol],set))

 4

This does not happen all the time,but I noticed it few times now. Is this to be expected?

Maple 2020.1

 

I gave odetest some confusing long candidate solution to check for me. It gave an internal error

restart;
ode:=3*y(x)*cos(x)+4*x*exp(x)+2*x^3*y(x)+(3*sin(x)+3)*diff(y(x),x) = 0:
sol:=y(x) = -1/3/(exp(I*x)+I)^2*exp(((24*I*x*exp(I*x)-24*x)*polylog(2,I*exp(I*x))+(-24*I-24*exp(I*x))*polylog(3,I*exp(I*x))+(4*I*x^3-3*I*x+6*I*Re(x)-6*Im(x))*exp(I*x)-6*I*Im(x)+3*x-6*Re(x))/(3*exp(I*x)+3*I))*(1-I*exp(I*x))^(-4*x^2)*(4*int((1-I*exp(I*x))^(4*x^2)*x*(2*I*exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+6*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-6+3*I)*x)/(3*exp(I*x)+3*I))+exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+9*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-9+3*I)*x)/(3*exp(I*x)+3*I))-exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+3*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-3+3*I)*x)/(3*exp(I*x)+3*I)))/(sin(x)+1),x)-3*C[1]):

timelimit(30,odetest(sol,ode));

Error, (in tools/map) too many levels of recursion

I agree that the solution I gave it is very long and most likely is wrong solution. But that is besides the point. The problem with these internal recursion errors, is that try/catch does not catch them. So the whole program stops, and not able by bypass this error.

Should odetest have handled this better?

fyi, I posted similar internal error from Maple about 2 weeks ago in https://www.mapleprimes.com/questions/229872-Error-in-Discontzero-Too-Many-Levels

due to too many levels of recursion as well, but that was fromt rying to evaluate int. 

Maple 2020.1 , Physics 708

update Jan 9, 2025

The above seems to have been fixed now:

interface(version);

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

restart;

ode:=3*y(x)*cos(x)+4*x*exp(x)+2*x^3*y(x)+(3*sin(x)+3)*diff(y(x),x) = 0:
sol:=y(x) = -1/3/(exp(I*x)+I)^2*exp(((24*I*x*exp(I*x)-24*x)*polylog(2,I*exp(I*x))+(-24*I-24*exp(I*x))*polylog(3,I*exp(I*x))+(4*I*x^3-3*I*x+6*I*Re(x)-6*Im(x))*exp(I*x)-6*I*Im(x)+3*x-6*Re(x))/(3*exp(I*x)+3*I))*(1-I*exp(I*x))^(-4*x^2)*(4*int((1-I*exp(I*x))^(4*x^2)*x*(2*I*exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+6*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-6+3*I)*x)/(3*exp(I*x)+3*I))+exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+9*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-9+3*I)*x)/(3*exp(I*x)+3*I))-exp(((-24*I*x*exp(I*x)+24*x)*polylog(2,I*exp(I*x))+(24*I+24*exp(I*x))*polylog(3,I*exp(I*x))+(6*Im(x)-6*I*Re(x)-4*I*x^3+(3+3*I)*x)*exp(I*x)+6*I*Im(x)+6*Re(x)+(-3+3*I)*x)/(3*exp(I*x)+3*I)))/(sin(x)+1),x)-3*C[1]):

timelimit(30,odetest(sol,ode));

Error, (in simplify/radical/findlcm) time expired

 


 

Download fixed_jan_9_2025.mw

 

why does Maple say that timelimit got one argument when doing

timelimit(30,solve(x^2+a=0,x) assuming a>0)

There is clearly 2 arguments in the above, The first is 30 and the second argument is solve(x^2+a=0,x) assuming a>0

I know the workaround is to add [ ] around solve(). 

timelimit(30, [solve(x^2+a=0,x) assuming a>0])

Maple 2020.1 windows

First 122 123 124 125 126 127 128 Last Page 124 of 200