Solving ODEs Matching the Patterns y=G(x,diff(y,x)), x=G(y,diff(y,x)), y=G(diff(y,x)), x=G(diff(y,x)), 0=G(x,diff(y,x)), 0=G(y,diff(y,x))
See Differentialgleichungen, by E. Kamke, p. 30. The technique consists mainly of looking for a parametric solution. Consider, for instance, the case y=G(x,diff(y,x)).
ode := y=G(x,diff(y(x),x));
Choosing the parametrization
para := diff(y(x),x) = t;
ode1 := subs(para,x=x(t),y=y(t), ode);
From the equations above and using the chain rule dydx=dydt dtdx, it is possible to obtain another ODE for x⁡t as follows:
ode_draft := diff(x(t),t) = diff(rhs(ode1),t)/t:
ode2 := diff(x(t),t)=solve(ode_draft,diff(x(t),t));
You should therefore solve ode2 for x⁡t and determine y⁡t by introducing the resulting x⁡t in ode1. Note that, when G does not depend on x⁡t,ode2 is a quadrature. ODEs matching the pattern x=G⁡y,ⅆyⅆx are solved using the same ideas, and ODEs matching the patterns 0=G⁡x,ⅆyⅆx,0=G⁡y,ⅆyⅆx,x=G⁡ⅆyⅆx, or y=G⁡ⅆyⅆx are just particular cases.
Although any ODE can be attempted using the scheme outlined above, generally speaking, there are four cases which can be better dealt with by looking for a parametric solution; they are:
y=G⁡ⅆyⅆx (particular case)
x=G⁡ⅆyⅆx (particular case)
Parametric solutions are available by giving the optional argument 'parametric' to dsolve. By default, when the ODE is of high degree in dydx, dsolve tries the parametric scheme, along with a set of related methods for this type of ODE. However, this scheme may also be of help in some cases in which dydx can be isolated.
1) Kamke's ODE 554: y=G(x,y')
ode ≔ xn−1⁢ⅆⅆx⁢y⁡xn−n⁢x⁢ⅆⅆx⁢y⁡x+y⁡x
ans ≔ dsolve⁡ode
ode ≔ 16⁢y⁡x2⁢ⅆⅆx⁢y⁡x3+2⁢x⁢ⅆⅆx⁢y⁡x−y⁡x
3) Kamke's ODE 568: y=G⁡y⁢' and d'Alembert type (see odeadvisor,dAlembert)
ode ≔ ⅆⅆx⁢y⁡x2⁢sin⁡ⅆⅆx⁢y⁡x−y⁡x
Implicit or explicit answers can be tested using odetest; when there are many answers one can map as follows
Download Help Document