I try to solve the differential equation
DSolve[{3*y[x] + 2*x*y[x]^2 + (2*x + 3*x^2*y[x])*y'[x] == 0, y[1] == 1/2}, y[x], x]
This produces some error messages as
DSolve::bvnul: For some branches of the general solution, the given boundary conditions lead to an empty solution.
It also produces:
$$y(x)\to \text{Root}\left[-8 \text{$\#$1}^5+\frac{40 \text{$\#$1}^4}{x}-\frac{80 \text{$\#$1}^3}{x^2}+\text{$\#$1}^2 \left(\frac{80}{x^3}-\frac{1}{x^2}\right)-\frac{40 \text{$\#$1}}{x^4}+\frac{8}{x^5}\&,1\right]$$
I know this DEQ is solvable because I did it by hand (see implicit solution: https://math.stackexchange.com/questions/2140226/exact-de-y2xy3dxx3xy2dy-0/2140279#2140279) and verified it using WA.
Is there any way to coax Mathematica to produce that result using DSolve in spite of that nasty IC?
I am using Windows 7, MMA version $11.0.1.0$.
Answer
Seems that DSolve is further improved after v11.0, the simplification below is no longer needed now. See Carl's answer for more details.
This is another improvement of DSolve after v9. In v9 DSolve will give the implicit form as the output. Still, it's possible to dig out the implicit solution in v11:
mid = Trace[
DSolve[{3 y[x] + 2 x y[x]^2 + (2 x + 3 x^2 y[x]) y'[x] == 0, y[1] == 1/2}, y[x], x],
Solve[_, y[x]], TraceInternal -> True] // Flatten // Union
It's not hard to find the second to last element of mid is the general implicit solution:
mid[[-2]]
(*
HoldForm[Solve[45 (3 C[1] +
28 RootSum[-28 + 57 7^(1/3) #1 - 28 #1^3 &,
Log[-#1 + (-16 + 21 x y[x])/(2 7^(1/3) (2 + 3 x y[x]))]/(19 7^(1/3) -
28 #1^2) &]) == 2 7^(2/3) Log[x], y[x]]]
*)
Let's simplify it a bit:
generaleq = mid[[-2]][[1, 1]] // ToRadicals // FullSimplify
(* 135 C[1] ==
2 7^(2/3) (Log[3125/108] + Log[x] + 3 Log[1/(-2 - 3 x y[x])] +
2 Log[(x y[x])/(2 + 3 x y[x])] - 5 Log[(-1 + x y[x])/(2 + 3 x y[x])]) *)
And eliminate C[1] with the constraint y[1] == 1/2:
const = Solve[generaleq /. y[x] -> 1/2 /. x -> 1, C[1]][[1]];
eq = generaleq /. const // Simplify
(* -2 I π + Log[8] + 5 Log[(-1 + x y[x])/(2 + 3 x y[x])] ==
Log[x] + 3 Log[1/(-2 - 3 x y[x])] + 2 Log[(x y[x])/(2 + 3 x y[x])] *)
OK, we find the implicit solution.
BTW, despite the warning, the solution given by DSolve in v11 is correct:
Select[Solve[eq, y[x]], y[x] == 1/2 /. # /. x -> 1 &]
(* {{y[x] -> Root[
8/x^5 - (40 #1)/x^4 + (80/x^3 - 1/x^2) #1^2 - (80 #1^3)/x^2 + (40 #1^4)/x - 8 #1^5&,
1]}} *)
Comments
Post a Comment