0
$\begingroup$

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):

enter image description here

seem to bear this out.

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

enter image description here

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"?

$\endgroup$
3
  • 5
    $\begingroup$ 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... $\endgroup$
    – ciao
    Aug 8, 2015 at 1:54
  • 2
    $\begingroup$ Or, NSolve[{5.20427*Sin[0.529699*t] == Sin[2*Pi*t] // Rationalize[#, 0] &, 0 <= t <= 100}, t] $\endgroup$
    – Bob Hanlon
    Aug 8, 2015 at 2:50
  • 1
    $\begingroup$ 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. $\endgroup$
    – user1722
    Aug 8, 2015 at 11:37

2 Answers 2

2
$\begingroup$

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]
$\endgroup$
1
$\begingroup$

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}
}

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.