-
Bruce Cowan authoredBruce Cowan authored
kepler.c 976 B
#include <stdio.h>
#include <stdlib.h>
#include <tgmath.h>
#define ACC 1e-9
static double
solve_keplers_equation (double m, double ecc)
{
static int i = 1;
double e = m; // Initial guess
while (1)
{
printf ("---Iteration #%d---\n", i);
double delta = e - ecc * sin (e) - m;
printf ("E = %f, delta = %g\n", e, delta);
if (fabs (delta) <= ACC)
return e;
e -= delta / (1 - ecc * cos (e));
i++;
}
}
int
main (int argc, char **argv)
{
double m;
double ecc;
if (argc != 3)
{
printf ("Input M (degrees) ");
scanf ("%lf", &m);
printf ("Input e ");
scanf ("%lf", &ecc);
}
else
{
sscanf (argv[1], "%lf", &m);
sscanf (argv[2], "%lf", &ecc);
}
m *= (M_PI / 180.0); // Convert m into radians
double e = solve_keplers_equation (m, ecc);
printf ("\nResult is E = %.17g rad\n", e);
return 0;
}