Group Abstract Group Abstract

Message Boards Message Boards

Why does DSolve result in a Solve function?

Posted 1 day ago

In reviewing an old differential equation, DSolve results in calling Solve on a complex function I cannot understand. Here is the problem: DSolve[r''[t] + m/r[t]^2 == h, r[t], t], which is a simple second order equation with m and h as constants, and r[t] the function of variable t. This is the Kepler orbital equation, easily solved by setting r==1/u and rewriting the equation to be solved.

However, directly using DSolve as shown above, results in the following expression: Solve[- {Very Complex Expression} == (t + C)^2, r[t]], where C is a constant. I cannot interpret this result. the easiest way to see what I am talking about is to carry out the DSolve problem, which takes no time to run.

I am not now nor was I ever a skilled user of Mathematica, but this result has me stumped...I do not have the vocabulary to even know what to look for in the Community or documentation.

Regards, and thanks for the help.

Luther

POSTED BY: Luther Nayhm
2 Replies
Posted 14 hours ago

Thanks for the quick response. Inconvenient!!!! I have often had to resort to graphical solutions to understand what are supposed to be analytic solutions are really describe. The above example for the Kepler equation has been around since Newton's time. My curiosity was why physics texts had to resort to finding the inverse function to solve the problem, and now I know.

Regards,

Luther

POSTED BY: Luther Nayhm

DSolve[] is returning an implicit form of the solution, that is, an unsolved equation that implicitly defines r[t] in terms of t.

You say the ODE is "easily solved by setting r==1/u." If I do that, I get an equally complicated solution with InverseFunction[] instead of an unsolved equation. Whether the solution is expressed as $F(r(t))=g(t)$ or $r(t)=F^{-1}(g(t))$ does not make much difference to me; they are both inconvenient. The equation form is probably easier to deal with. Here's a way to plot an example solution:

impl = DSolve[r''[t] + m/r[t]^2 == h, r[t], t];
example = First[impl] /. (* plug in values for constants *)
  {C[1] -> 0, C[2] -> 0, m -> 1, h -> 1};
ContourPlot[example
 , {t, 0, 12}, {r[t], 0, 100}
 , WorkingPrecision -> 16, FrameLabel -> Automatic]

(WorkingPrecision prevents gaps in the plot due to round-off errors in the imaginary parts of the computation of the curve. They should cancel out, but floating-point round-off errors sometimes result in nonzero imaginary parts.)

POSTED BY: Michael Rogers
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard