Question: basic question on odeadvisor

Just a basic question, wanted to be clear.  When odeavisor returns a list of types (or classifications) of an ODE. This must mean the ODE can be of any one of these types?

For example, this ODE below, it says it is either homogeneous or rational or Abel or dAlembert.

I am asking because it can be much easier to solve an ODE if one knows if it is of one type vs. the other.

For example, for this one below, it is little easier to solve it if one sees it is Abel instead of dAelmbert. 

The hard part is knowing what type of ODE one is trying to solve and so it is important to pick the right/easier type to use.

Which brings another question: When Maple is given an ODE to solve, and it can be of number of types, how does it select which type to use to solve the ODE? Since the method to solve the ODE depends on the type of the ODE. (At least, when solving it by hand it does make a big difference).

Is there any detailed document that explains more how odeadvisor determines the type of the ODE? This is a very powerful and a useful command but I can't find in help any hints on how it determines the type of ODE.

It must use some general method/algorithm to approach this problem instead of trying to match each different ODE type one by one. right?  I tried to trace the code in the debugger, but I do not fully understand the code flow.

restart;

Typesetting:-Settings(typesetprime=true):

ode:=x^2*(4*x-3*y(x))*diff(y(x),x) = (6*x^2-3*x*y(x)+2*y(x)^2)*y(x)

x^2*(4*x-3*y(x))*(diff(y(x), x)) = (6*x^2-3*x*y(x)+2*y(x)^2)*y(x)

DEtools:-odeadvisor(ode)

[[_homogeneous, `class A`], _rational, [_Abel, `2nd type`, `class C`], _dAlembert]

DEtools:-odeadvisor(ode,['dAlembert']);
DEtools:-odeadvisor(ode,['Abel']);
DEtools:-odeadvisor(ode,['homogeneous']);

[_dAlembert]

[[_Abel, `2nd type`, `class C`]]

[[_homogeneous, `class A`]]

new_ode := diff(y(x),x)=convert(solve(ode,diff(y(x),x)),parfrac); # y'= the following below. So it is Abel indeed

diff(y(x), x) = -50/27-(2/3)*y(x)^2/x^2+(1/9)*y(x)/x-(200/27)*x/(-4*x+3*y(x))

#But to solve it as dAlembert, one need to rewrite it as y=x*g(y')+f(y') and it gets messy
#becuase one has to solve for y(x) first, and this will generate more than one ODE
ode:=convert(ode,D);
map(z-> y(x)=convert(z,diff),[solve(ode,y(x))])

x^2*(4*x-3*y(x))*(D(y))(x) = (6*x^2-3*x*y(x)+2*y(x)^2)*y(x)

[y(x) = ((1/2)*(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)-2*((1/2)*(diff(y(x), x))+3/4)/(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+1/2)*x, y(x) = (-(1/4)*(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+((1/2)*(diff(y(x), x))+3/4)/(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+1/2+((1/2)*I)*3^(1/2)*((1/2)*(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+2*((1/2)*(diff(y(x), x))+3/4)/(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)))*x, y(x) = (-(1/4)*(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+((1/2)*(diff(y(x), x))+3/4)/(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+1/2-((1/2)*I)*3^(1/2)*((1/2)*(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)+2*((1/2)*(diff(y(x), x))+3/4)/(5*(diff(y(x), x))-5+(8*(diff(y(x), x))^3+61*(diff(y(x), x))^2+4*(diff(y(x), x))+52)^(1/2))^(1/3)))*x]

 

 

Download q1.mw

 

 

 

Please Wait...