# Is it a bug in DSolve?

In version 13 on Windows 10 I solve

DSolve[{y''[x]*y[x] + 5*y[x]^6*y'[x]^4 == 2*y'[x]^2, y[1] == 1, y'[1] == 1}, y[x], x]


{}

and a warning

DSolve::bvnul: "For some branches of the general solution, the given boundary conditions lead to an empty solution."

The problem under consideration does have a solution y[x_] := (4 x - 3)^(1/4) and Maple finds it. As far as I understand it, the general solution is produced by

DSolve[y''[x]*y[x] + 5*y[x]^6*y'[x]^4 == 2*y'[x]^2, y[x], x]


{{y[x] -> InverseFunction[-(( Hypergeometric2F1[-(1/2), -(1/10), 9/10, -(#1^10/C[1])] Sqrt[ C[1] + #1^10])/(#1 Sqrt[1 + #1^10/C[1]])) &][x + C[2]]}, {y[ x] -> InverseFunction[( Hypergeometric2F1[-(1/2), -(1/10), 9/10, -(#1^10/C[1])] Sqrt[ C[1] + #1^10])/(#1 Sqrt[1 + #1^10/C[1]]) &][x + C[2]]}}

Is {} a bug or I incorrectly understand it?

• The ODE under consideration can be reduced to Riccati, making use of standard methods. May 31, 2022 at 17:37

Symbolic algebra is, generically speaking, only generically true: Sometimes the solution space as given by a formula is missing a hypermanifold that is contained in the closure of the solution space. Frequently the missing boundary may be found as C[1] -> Infinity, but in this case a missing hypermanifold is given by C[1] == 0 in the general solution gensol below. (The output is long, but it divides by C[1] in a few places, which makes clear that solutions with C[1] == 0 are missing.) Usually the missing solutions may be computed as limits, provided Limit[] can be evaluated.

ode = y''[x]*y[x] + 5*y[x]^6*y'[x]^4 == 2*y'[x]^2;
ics = {y[1] == 1, y'[1] == 1};
gensol = DSolve[ode, y[x], x];

toPureFunc = # /. HoldPattern[y_[x__] -> body_] :>
y -> Function[{x}, body] &;
sols = Map[(* compute limit sols for C[1] -> 0: *)
FullSimplify@Limit[#, C[1] -> 0] &,
gensol /.  (* convert to implicit equation: *)
{HoldPattern[{y_[x_] -> InverseFunction[f_][a_]}] :>
Inactive[Solve][f[y[x]] == a, y[x]]},
{3}] //    (* solve for all branches: *)
Activate // (* <- gives Solve::nongen warning: *)
Apply[Join] //
DeleteDuplicates // (* pick valid sols: *)
Pick[#, Simplify[ode /. toPureFunc[#]]] &;
With[ (* find sols for which C[1] -> 0 is valid in IVP: *)
{icsols = Solve /@ (ics /. toPureFunc[sols])},
Pick[
Replace[icsols, {{} | _Solve -> False, _ -> True}, 1]
] //
Simplify
]


Solve::nongen: There may be values of the parameters for which some or all solutions are not valid.
Solve::nongen: There may be values....

{{y[x] -> (-3 + 4 x)^(1/4)}}

• Thank you for the workaround. Frankly speaking, I don't understand it (A good code is a commented code.). BTW, Maple produces a quite simple implicit general solution without Hypergeometric2F1 . Jun 1, 2022 at 2:52
• Could you explain, in particular, what Replace[icsols, {{} | _Solve -> False, _ -> True}, 1]] does? Jun 1, 2022 at 3:03
• @user64494 I don't get Maple, but different softwares with secret methods probably can give different results. 2nd comment: icsols is the results of Solve on the IVP for all branches of the gen. sol. A result can be no sol. {}, unable to solve Solve[...] (original command), solutions {{<rules>},...}, or a sol. with a "full dimensional" component {{}}. The {{}} does not happen here; whether it indicates a valid sol. of the IVP or not is irrelevant. The results in icsols are replaced by True or False` according to whether there was a sol. of the IVP or not, respectively. Jun 1, 2022 at 15:31
• Thank you. Methods of ODE symbolic solving are not secret. Jun 2, 2022 at 3:45