# Reduce in NDSolve [duplicate]

This question already has an answer here:

Second order ode; neither the trig RHS simplifies nor is the solution obtained readily:

DSolve[{ Cos[SI[s]] SI''[s] == (1 - 2 Sin[SI'[s]] Cos[SI[s]]^3 - 2

Cos[SI[s]]^3)/(Sin[SI[s]] - Cos[SI[s]]^3 - Sin[SI[s]] Cos[SI[s]]) }, SI, s]


Needs Reduce due to Inverse trigonometric functions. Please suggest a remedy, Thanks.

EDIT 1:

Numerically a part works at least, I expected somewhat better result.

smax = 0.8774;NDSolve[{   Cos[SI[s]] SI''[s] == (  1 - 2 Sin[SI'[s]]
Cos[SI[s]]^3 - 2 Cos[SI[s]]^3)/(Sin[SI[s]] - Cos[SI[s]]^3 - Sin[SI[s]]
Cos[SI[s]]), SI'[0] == -2.2, SI[0] == 1.4}, SI, {s, 0, smax}]
si[t_] = SI[t] /. First[%]; Plot[si[s], {s, 0, smax}]


## Update

@bbgodfrey kindly provided the link to the answer where I learned the technique mentioned below: Accessing Reduce from DSolve.

You can use something like the following construct to force the use of Reduce within Solve within DSolve. Somebody showed this or something similar on this very site before, but I couldn't find it right away. If I do find the question that prompted such an answer, then your question is likely to be a duplicate.

Block[{savedOptions, solutions},

(* save whatever options Solve happens to have on your system *)
savedOptions = Options[Solve];

(* forces Solve to use Reduce internally *)
SetOptions[Solve, Method -> Reduce];

(* attempts to solve your equation *)
solutions =
DSolve[
Cos[SI[s]] SI''[s] ==
(1 - 2 Sin[SI'[s]] Cos[SI[s]]^3 - 2 Cos[SI[s]]^3)/(Sin[SI[s]] -
Cos[SI[s]]^3 - Sin[SI[s]] Cos[SI[s]]),
SI, s
];

(* pops back the original set of options for Solve *)
SetOptions[Solve, savedOptions];

(* returns your solutions *)
solutions
]


The good news is that I did not get the "use Reduce" warning any more. The bad news is that after running for more than five minutes it still hasn't completed evaluation, so I don't know if it will ever return a solution.

• A related question is here. However, SetOptions[Solve, Method -> Reduce] sometimes does result in no solution being returned. – bbgodfrey Mar 24 '16 at 0:38
• I tried using Trace with TraceInternal->True to gain some insight into intermediate results within DSolve. Bad move! Mathematica saturated my disk transfer rate in short order. – bbgodfrey Mar 24 '16 at 0:54
• @bbgodfrey Thank you for the link! That must be the one, it's so similar to the snippet in my library. You are a braver man than I to even attempt to drink from the Trace fire-hydrant... – MarcoB Mar 24 '16 at 1:39