{-| Module: Data.Astro.Sun.SunInternals Description: Internal functions of Sun module. Copyright: Alexander Ignatyev, 2016 Internal functions of Sun module. Exposed only for Unit Tests -} module Data.Astro.Sun.SunInternals ( solveKeplerEquation ) where -- | Solve Kepler's Equation: E - e * (sin E) = M -- It takes eccentricity, -- mean anomaly in radians equals epsilon - omega (see 'SunDetails'). -- It returns E in radians. solveKeplerEquation :: Double -> Double -> Double -> Double solveKeplerEquation e m eps = iter m where iter x = let delta = x - e*(sin x) - m dx = delta / (1 - e*(cos x)) in if abs delta < eps then x else iter (x-dx)