4
$\begingroup$

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?

$\endgroup$
1
  • 1
    $\begingroup$ The ODE under consideration can be reduced to Riccati, making use of standard methods. $\endgroup$
    – user64494
    May 31, 2022 at 17:37

1 Answer 1

11
$\begingroup$

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[
   Join @@ MapThread[ReplaceAll, {sols, icsols}],
   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)}}
$\endgroup$
4
  • $\begingroup$ 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 . $\endgroup$
    – user64494
    Jun 1, 2022 at 2:52
  • $\begingroup$ Could you explain, in particular, what Replace[icsols, {{} | _Solve -> False, _ -> True}, 1]] does? $\endgroup$
    – user64494
    Jun 1, 2022 at 3:03
  • 2
    $\begingroup$ @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. $\endgroup$
    – Goofy
    Jun 1, 2022 at 15:31
  • $\begingroup$ Thank you. Methods of ODE symbolic solving are not secret. $\endgroup$
    – user64494
    Jun 2, 2022 at 3:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.