# Find *all* numerical solutions to cosine based equality

To help with https://astronomy.stackexchange.com/questions/11456/ I'm trying to find all numerical solutions to:

5.20427*Sin[0.529699*t] == Sin[2*Pi*t]

Since the period of the first function is 11.8618, I would expect to see 2 answers per period, or about one answer for every length 5.9309 interval.

At first, the graphs of these functions (for 0<=t<=12):

seem to bear this out.

However, the graph for 11<=t<=13:

shows the situation can be much worse, with two "extra" nearly equal solutions in addition the "expected" solution.

Is there any good way to find all numerical solutions, including these "corner cases"?

• Reduce[520427/100000*Sin[529699/1000000*t] - Sin[2*Pi*t] == 0 && 0 <= t <= 100, t, Reals] // N with some reasonable bound on t might get you what you're after... – ciao Aug 8 '15 at 1:54
• Or, NSolve[{5.20427*Sin[0.529699*t] == Sin[2*Pi*t] // Rationalize[#, 0] &, 0 <= t <= 100}, t] – Bob Hanlon Aug 8 '15 at 2:50
• Thanks, @ciao and Bob! I had considered Rationalize'ing the equations, but thought that would make things worse, not better. Bob, your solution works even without Rationalize, though Mathematica auto-rationalizes with the warning message "Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result.". If either of you would write this up as an answer, I'd be happy to accept it. – user1722 Aug 8 '15 at 11:37

NSolve (or Reduce as pointed out by @ciao in the comments above) will find all solutions in a specified interval

$Version  "10.2.0 for Mac OS X x86 (64-bit) (July 7, 2015)" NSolve[{5.20427*Sin[0.529699*t] == Sin[2*Pi*t], 0 <= t <= 100}, t]  {{t -> 0.}, {t -> 0.32491}, {t -> 5.97889}, {t -> 11.6173}, {t -> 12.1353}, {t -> 12.2205}, {t -> 17.9356}, {t -> 23.5697}, {t -> 29.8887}, {t -> 35.5261}, {t -> 41.1833}, {t -> 41.4872}, {t -> 41.8327}, {t -> 47.4839}, {t -> 53.1234}, {t -> 53.6101}, {t -> 53.7428}, {t -> 59.4409}, {t -> 65.075}, {t -> 71.3945}, {t -> 77.0312}, {t -> 82.6919}, {t -> 82.9743}, {t -> 83.3401}, {t -> 88.9889}, {t -> 94.6297}, {t -> 95.0909}, {t -> 95.2589}} In some Mathematica versions there will be a warning message, e.g., $Version


"10.0 for Mac OS X x86 (64-bit) (June 29, 2014)"

NSolve[{5.20427*Sin[0.529699*t] == Sin[2*Pi*t], 0 <= t <= 100}, t]


Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result. >>

{{t -> 0.}, {t -> 0.32491}, {t -> 5.97889}, {t -> 11.6173}, {t -> 12.1353}, {t -> 12.2205}, {t -> 17.9356}, {t -> 23.5697}, {t -> 29.8887}, {t -> 35.5261}, {t -> 41.1833}, {t -> 41.4872}, {t -> 41.8327}, {t -> 47.4839}, {t -> 53.1234}, {t -> 53.6101}, {t -> 53.7428}, {t -> 59.4409}, {t -> 65.075}, {t -> 71.3945}, {t -> 77.0312}, {t -> 82.6919}, {t -> 82.9743}, {t -> 83.3401}, {t -> 88.9889}, {t -> 94.6297}, {t -> 95.0909}, {t -> 95.2589}}

This warning can be avoided by using Rationalize

NSolve[{5.20427*Sin[0.529699*t] == Sin[2*Pi*t] // Rationalize[#, 0] &,
0 <= t <= 100}, t]


The package RootSearch, by Ted Ersek, does what you need :

RootSearch[5.20427*Sin[0.529699*t] == Sin[2*Pi*t], {t, 0, 20}]


{
{t->0.},
{t->0.3249099866},
{t->5.978887138},
{t->11.61730758},
{t->12.13526959},
{t->12.2204946},
{t->17.93561673}
}