2
$\begingroup$

I'm trying to solve a second order nonlinear ODE with the attached code. After looking at the documentation for DSolve, I don't know what I'm doing wrong. When I do Shift+Enter at top-level, Mathemeatica just returns the code I inputted.

query

DSolve[ -x Derivative[1][y][x] - x Derivative[1][y][x]^3 + y[x]* (1 + Derivative[1][y][x]^2) + y[x]^2 y''[x] + (x^2 - R Sqrt[x^2 + y[x]^2]) y''[x] == 0, y[x], x] 
$\endgroup$
11
  • $\begingroup$ R is a constant. $\endgroup$ Commented Sep 1, 2020 at 20:55
  • $\begingroup$ Ok, I just posted my code (ctrl C from my notebook). $\endgroup$ Commented Sep 1, 2020 at 21:00
  • 1
    $\begingroup$ I think the mistake, if any, is to give DSolve an ODE that is too hard to solve. (That's what the result indicates.) $\endgroup$ Commented Sep 1, 2020 at 21:28
  • $\begingroup$ If you multiply the R term by either x or y[x], then the ODE is homogenenous, and DSolve can find a first integral and return an implicit solution. I'm just pointing out it's close to an ODE that is not completely impossible, in case you made a mistake in entering the equation. $\endgroup$ Commented Sep 1, 2020 at 21:30
  • 1
    $\begingroup$ The symbolic solvers of higher order/dimensional nonlinear ODEs can use symmetry (such as homogeneity) to reduce the order of the ODE. Otherwise, I'm not sure what the techniques are, if any. As @Moo said, you're usually stuck with numerical methods (see ParametricNDSolve[]). You can also use AsymptoticDSolveValue[], to get a series expansion about a point of interest, which may or may not be useful to you. $\endgroup$ Commented Sep 1, 2020 at 21:59

1 Answer 1

2
$\begingroup$

Don't know if this will be of help, but if you change variables to polar coordinates, we get an ODE DSolve can handle:

subs = Simplify@NestList[ (* change of variables *) D[First@#, x] -> Dt[Last@#]/Dt[r[t] Cos[t]] &, y[x] -> r[t] Sin[t], 2]~Join~ {x -> r[t] Cos[t]}; (* new ode *) ode = -x*Derivative[1][y][x] - x*Derivative[1][y][x]^3 + y[x]*(1 + Derivative[1][y][x]^2) + y[x]^2*y''[x] + (x^2 - R*Sqrt[x^2 + y[x]^2])*y''[x] /. subs // Together // Numerator // Simplify[#, r[t] > 0] &; odes = FactorList[ode][[2 ;;, 1]] == 0 // Thread 
(* the process yielded a spurious factor r[t] {r[t] == 0, r[t] (r[t] - R) r''[t] + (2 R - r[t]) r'[t]^2 + R r[t]^2 == 0} *) 
dsol = DSolve[Last@odes, r, t] 
(* {{r -> Function[{t}, InverseFunction[-I (ArcTanh[(R - #1)/Sqrt[ R^2 - 2 R #1 - C[1] #1^2]] - ArcTan[(-R - C[1] #1)/( Sqrt[C[1]] Sqrt[R^2 - 2 R #1 - C[1] #1^2])]/Sqrt[C[1]]) & ][t + C[2]]]}, {r -> Function[{t}, InverseFunction[ I (ArcTanh[(R - #1)/Sqrt[R^2 - 2 R #1 - C[1] #1^2]] - ArcTan[(-R - C[1] #1)/( Sqrt[C[1]] Sqrt[R^2 - 2 R #1 - C[1] #1^2])]/Sqrt[C[1]]) & ][t + C[2]]]}} *) 

(To connect with my symmetry comments, the change of variables shows that the system is invariant under t -> t + t0, which is a rotation in polar coordinates.)

$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.