nm

11353 Reputation

20 Badges

13 years, 15 days

MaplePrimes Activity


These are questions asked by nm

Is it considered OK to give singular solution to an ode which does not satisfy the ode?

I thought may be because it is singular solution and not general solution, then that is allowed sometimes. But it seems strange to me to give a solution which cleary do not satisfy the ode, even if it is singular.  But may be because it is singular, it is not required to satisfy the ode? Here is an example

restart;
ode_1:=diff(y(x),x)=sqrt(1+x+y(x)) ;
sol_1:=DEtools:-dalembertsol(ode_1);

Gives

But the first given "solution" (singular) does not satisfy the ode. Plugging it into the ode gives  -1=1.  Also odetest(y(x)=-x,ode_1) agrees it does not satisfy the ode. It gives -2 and not zero.

What do others think about this?  

This works

restart;
ode := diff(y(x),x)=a0+a1*y(x)+a2*y(x)^2+a3*y(x)^3;
DEtools:-abelsol(ode);

But this does not

restart;
ode := diff(y(x),x)=a0+a1*y(x)+a2*y(x)^2+a3*y(x)^3;
name_of_solver:=abelsol;
DEtools:-name_of_solver(ode);

Then I found this made it work

eval(DEtools:-name_of_solver)(ode);

So I am guessing what happens is this: doing DEtools:-name_of_solver Maple first searched for a proc called name_of_solver inside DEtools package, and found none. So it does not work.

But adding eval first, then name_of_solver is evaluated and replaced by abelsol and after that the call is made, and it then finds this proc inside the DEtools package.

But my question is, why is eval needed here?

Is it not automatically happens that a variable is replaced by its value? So I expected DEtools:-name_of_solver to automatically become DEtools:-abelsol and only then the call is made.

Why the rule of evaluation is different in this case?

Any one knows of a way to have Maple verify that this solution of the ODE is correct?

restart;
ode:=diff(y(x),x)=x*(y(x)^2-1)^(2/3);
sol:=dsolve(ode);
odetest(sol,ode);

gives

-4*x*y(x)^2*hypergeom([3/2, 5/3], [5/2], y(x)^2)*(y(x)^2 - 1)^(2/3)*signum(y(x)^2 - 1)^(1/3) - 9*x*hypergeom([1/2, 2/3], [3/2], y(x)^2)*(y(x)^2 - 1)^(2/3)*signum(y(x)^2 - 1)^(1/3) - 9*x*(-signum(y(x)^2 - 1))^(1/3)

Tried different simplications, but can't get zero.

For reference, this is Mathematica's solution and it verifies it:

Using Maple 2022.1 on windows 10.

I do not remember now if this was asked before. Doing search here is hard. 

But I am trying this now on 2022.1 and this gives FAIL.

What is the correct syntax to use odetest to verify solution to ode using series method with expansion around infinity? Why do I get FAIL here?
 

interface(version)

`Standard Worksheet Interface, Maple 2022.1, Windows 10, May 26 2022 Build ID 1619613`

Physics:-Version()

`The "Physics Updates" version in the MapleCloud is 1257 and is the same as the version installed in this computer, created 2022, June 22, 16:27 hours Pacific Time.`

restart;

ode:=x^3*diff(y(x),x$2)+x^2*diff(y(x),x)+y(x)=0;
sol:=dsolve(ode,y(x),'series',x=infinity);
odetest(sol,ode,'series','point'=infinity)

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

y(x) = _C1*(1-1/x+(1/4)/x^2-(1/36)/x^3+(1/576)/x^4-(1/14400)/x^5+O(1/x^6))+_C2*(ln(1/x)*(1-1/x+(1/4)/x^2-(1/36)/x^3+(1/576)/x^4-(1/14400)/x^5+O(1/x^6))+2/x-(3/4)/x^2+(11/108)/x^3-(25/3456)/x^4+(137/432000)/x^5+O(1/x^6))

Warning, unable to compute series necessary to test the given solution

FAIL

 


 

Download odetest_series.mw

Update

I've testsed methods given below on 6 random ode's using Maple odetest, VV method and Axel method. THis is the result obtained using Maple 2022.1 

odetest was able to verify the solution zero out of 6 times.
VV method was able to verify the solution 3 out of 6 times.
Axel method was able to verify the solution 5 out of 6 times.

So based on this small test, Axel method seems to do the best. Attached worksheet. I will use this method to verify my series solution to ode's instead of Maple's odetest but will use Maple's odetest for non-series method solutions.


 

interface(version);

`Standard Worksheet Interface, Maple 2022.1, Windows 10, May 26 2022 Build ID 1619613`

Physics:-Version();

`The "Physics Updates" version in the MapleCloud is 1257 and is the same as the version installed in this computer, created 2022, June 22, 16:27 hours Pacific Time.`

restart;

Example 1  Regular singular point. Complex roots

 

Order:=6;
ode:=sin(x)*diff(y(x),x$2)+cos(x)*diff(y(x),x)+1/x*y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0)

6

sin(x)*(diff(diff(y(x), x), x))+cos(x)*(diff(y(x), x))+y(x)/x = 0

y(x) = _C1*x^(-I)*(series(1+(1/48-(1/16)*I)*x^2+(1/57600-(217/57600)*I)*x^4+O(x^6),x,6))+_C2*x^I*(series(1+(1/48+(1/16)*I)*x^2+(1/57600+(217/57600)*I)*x^4+O(x^6),x,6))

VV method

 

odetest(sol,ode):
asympt(%,x);

Error, (in asympt) unable to compute series

odetest method

 

odetest(sol,ode,'series','point'=0);

y(x) = _C1*x^(-I)*(series(1+(1/48-(1/16)*I)*x^2+(1/57600-(217/57600)*I)*x^4+O(x^6),x,6))+_C2*x^I*(series(1+(1/48+(1/16)*I)*x^2+(1/57600+(217/57600)*I)*x^4+O(x^6),x,6))

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

 

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
convert(%,polynom);

0

Example 2 Regular singular point. Dierence is integer

 

Order:=6;
ode:=sin(x)*diff(y(x),x$2)+cos(x)*y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0):

6

sin(x)*(diff(diff(y(x), x), x))+cos(x)*y(x) = 0

VV method

 

odetest(sol,ode):
asympt(%,x);
convert(%,polynom);

O(x^7)

0

odetest method

 

odetest(sol,ode,'series','point'=0);

Warning, unable to compute series necessary to test the given solution

FAIL

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

   

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
convert(%,polynom);

0

Example 3 Regular singular point. Repeated root

 

Order:=6;
ode:=(exp(x)-1)*diff(y(x),x$2)+exp(x)*diff(y(x),x)+y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0):

6

(exp(x)-1)*(diff(diff(y(x), x), x))+exp(x)*(diff(y(x), x))+y(x) = 0

VV method

 

odetest(sol,ode):
asympt(%,x):
convert(%,polynom);

0

odetest method

 

odetest(sol,ode,'series','point'=0);

Warning, unable to compute series necessary to test the given solution

FAIL

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

   

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
convert(%,polynom);

0

Example 4 Regular singular point. Repeated root

 

Order:=6;  
ode:=(exp(x)-1)*diff(y(x),x$2)+exp(x)*diff(y(x),x)+y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0):

6

(exp(x)-1)*(diff(diff(y(x), x), x))+exp(x)*(diff(y(x), x))+y(x) = 0

VV method

 

odetest(sol,ode):
asympt(%,x):
convert(%,polynom);

0

odetest method

 

odetest(sol,ode,'series','point'=0);

Warning, unable to compute series necessary to test the given solution

FAIL

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

   

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
convert(%,polynom);

0

Example 5 . Regular singular point. Complex roots

 

Order:=6;  
ode:=x^3*diff(y(x),x$2)+sin(x^3)*diff(y(x),x)+x*y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0):

6

x^3*(diff(diff(y(x), x), x))+sin(x^3)*(diff(y(x), x))+x*y(x) = 0

VV method

 

odetest(sol,ode):
asympt(%,x);
#convert(%,polynom);

Error, (in asympt) unable to compute series

odetest method

 

odetest(sol,ode,'series','point'=0);

Error, (in odetest/series) need to determine the sign of I*3^(1/2)

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

   

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
#convert(%,polynom);

Error, (in MultiSeries:-multiseries) need to determine the sign of -I*3^(1/2)

Example 6 . Regular singular point. Complex roots

 

Order:=6;  
ode:=x^2*diff(y(x),x$2)+x*diff(y(x),x)+(x+1)*y(x)=0;
sol:=dsolve(ode,y(x),type='series',x=0):

6

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

VV method

 

odetest(sol,ode):
asympt(%,x);
#convert(%,polynom);

Error, (in asympt) unable to compute series

odetest method

 

odetest(sol,ode,'series','point'=0);

y(x) = _C1*x^(-I)*(series(1+(-1/5-(2/5)*I)*x+(-1/40+(3/40)*I)*x^2+(3/520-(7/1560)*I)*x^3+(-1/2496+(1/12480)*I)*x^4+(9/603200+(1/361920)*I)*x^5+O(x^6),x,6))+_C2*x^I*(series(1+(-1/5+(2/5)*I)*x+(-1/40-(3/40)*I)*x^2+(3/520+(7/1560)*I)*x^3+(-1/2496-(1/12480)*I)*x^4+(9/603200-(1/361920)*I)*x^5+O(x^6),x,6))

y(t) = _C1*t^(-I)*(series(1+(1/48-(1/16)*I)*t^2+(1/57600-(217/57600)*I)*t^4+O(t^6),t,6))+_C2*t^I*(series(1+(1/48+(1/16)*I)*t^2+(1/57600+(217/57600)*I)*t^4+O(t^6),t,6))

Axel method

   

rhs(sol):
Y:= unapply(%, x):
eval(lhs(ode), y=Y):
MultiSeries:-asympt(%, x):
convert(%,polynom);

0

 

 


 

Download test_new_odetest.mw

 

 

 

I am reading some expressions from file.

In the file, it is written as GAMMA(-1,x). When read into Maple using the read file command, it shows as  1/x*Ei(2,x)

I know these are the same mathematically. But I am translating these expressions to sagemath. in sagemath, Ei only accepts one argument.

Now the translator sees Ei in the input, then it keeps it as Ei as it does not know it was the GAMMA with two arguments,  which gives an error when used by sagemath since sagemath only has the one argument version of Ei.

If Maple would keep GAMMA(-1,x) as is, then the translator will just translate it to gamma(-1,x) which works in sage.

To keep things simple, I was wondering if there an option to tell Maple to keep the input as GAMMA(-1,x) and not rewrite to Ei?

Otherwise I would have to now parse each Ei to see if it is the two argument version or the one argument version, and use gamma  for the 2 argument version to keep sage happy which will complicate things for me. 

expr:=GAMMA(-1,x)

               Ei(2, x)/x

Maple 2022.1

First 68 69 70 71 72 73 74 Last Page 70 of 199