¿Qué debo tener en cuenta para calcular con precisión la fase lunar?

Aunque esta pregunta aparentemente aborda el tema, no dice los factores apropiados relacionados con la fase lunar.

Encontré dos algoritmos distintos. éste y también éste . Soy menos que un novato, menos que un lego, en astronomía, pero no en programación, pero me gustaría omitir la prueba del algoritmo durante un par de años antes de elegir cualquiera.

Después de encontrar sin éxito una comparación de diferentes algoritmos, me gustaría saber si alguno de estos algoritmos es menos propenso a errores, o si hay alguien menos propenso a errores (sé que no hay cosas como un algoritmo perfecto, pero Me gustaría tener uno bueno), o tener formas apropiadas de juzgar un algoritmo.

Entonces mi pregunta viene así:

¿Estos métodos tienen un pequeño error, suficiente para calcular con precisión la fase lunar?

O...

¿Puede darme el algoritmo más preciso -o conceptos/teoría subyacente que debería conocer- que los astrónomos utilizarían a partir de hoy para calcular la fase lunar?

No es fácil calcular la fase de la luna con precisión. Los dos algoritmos que vinculaste son bastante toscos. De un vistazo rápido, pueden ser precisos para las 4 fases principales en aproximadamente un día.
Para obtener los mismos resultados que obtiene NASA/USNO, use las bibliotecas CSPICE: naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/index.html Hay muchos buenos ejemplos en la documentación y muchos malos en github .com/barrycarter/bcapps/blob/master/ASTRO (los he usado para responder varias preguntas sobre varios intercambios de pila).

Respuestas (3)

La fase de la luna no es fácil de calcular con precisión. Afortunadamente, las 4 fases principales (luna nueva, cuarto menguante, luna llena, cuarto menguante) son un poco más estables que las fases intermedias. Los buenos algoritmos de fase principal usan una docena de cálculos de seno para la luna nueva o llena, y un número similar para el primer o último cuarto. Esos dos algoritmos que vinculaste usan aproximaciones muy simples, por lo que sus resultados son bastante toscos.

El período del ciclo de fases de la luna (el mes sinódico ) es estable a largo plazo, pero se desvía considerablemente a corto plazo. Por lo tanto, los algoritmos como los de sus enlaces se pueden usar durante un período de tiempo bastante largo, y pueden ser útiles como primeras aproximaciones para alimentar mejores algoritmos, pero por sí mismos solo brindan resultados de precisión por accidente. ;)

El gurú de los cálculos astronómicos para los cuerpos del sistema solar es Jean Meeus , así que si quieres algoritmos de calidad, asegúrate de que hagan referencia a Meuss. :)

Para obtener efemérides realmente precisas, especialmente si necesita cubrir un amplio período de tiempo, considere usar el trabajo de JPL. Puede acceder a sus efemérides en la página web de Horizons ; también se proporciona una interfaz basada en telnet y correo electrónico.

Si desea realizar cálculos astronómicos precisos (p. ej., para la predicción de eclipses), deberá conocer los diversos sistemas de tiempo utilizados en astronomía, en particular, el Tiempo terrestre y su precursor, el Tiempo de efemérides.

Veo en su perfil SO que está familiarizado con Python. Un buen código independiente de fase lunar de Python no es fácil de encontrar en línea, pero finalmente encontré py-moon-phase de keturn , que es un puerto de Python del código central de Moontool bastante antiguo de John Walker , que usa algoritmos de Meeus y también de Peter Duffett-Smith. En realidad, no he probado el código de John Walker / Keturn, pero se ve bastante bien (aunque usa UTC en lugar de Ephemeris Time o Terrestrial Time). Tengo un código C muy similar (pero bastante desordenado) que generalmente tiene una precisión de medio minuto o más durante el siglo XX.

Sin embargo, hay un paquete llamado PyEphem que puede hacer todo tipo de cálculos astronómicos. James K señala en los comentarios que PyEphem ahora se desaconseja para nuevos proyectos. Los desarrolladores de PyEphem recomiendan  Skyfield en su  lugar. Astropy también puede hacer mucho de lo que hace PyEphem, y mucho más.

¡Gracias! Tengo mucho código para probar, parece. Déjame revisarlos (tener +1 mientras tanto)...
Tenga en cuenta que PyEphem ahora se desaconseja para nuevos proyectos. Los desarrolladores de PyEphem recomiendan Skyfield en su lugar. Astropy también puede hacer mucho de lo que hace PyEphem, y mucho más.
Gracias por esa actualización, @James.

Divide el año entre 19 y multiplica el resto por 11. Suma el número de meses completos desde marzo1 Suma el día del mes. Reduce este mod 30. Ese es el número aproximado (+/- 1) de días desde la última luna nueva.

Para enero y febrero utilice el año anterior.

Hola Jack, gracias por este aporte. La pregunta se refiere a la precisión de varios algoritmos y, como indican otras respuestas, los cálculos detallados utilizan múltiples funciones trigonométricas para tener en cuenta la excentricidad, la precesión y una serie de otros factores. El OP solicitó el "algoritmo más preciso [...] para calcular la fase lunar".

El procedimiento para encontrar la fase de la Luna se describe en The Explanatory Supplement to the Astronomical Almanac , University Science Books, 3rd ed., p. 507. El "Almanaque Astronómico" anual tabula las fases al minuto más cercano de UT. Una fase ocurre cuando el exceso de la longitud eclíptica geocéntrica aparente de la Luna sobre la longitud eclíptica geocéntrica aparente del Sol es de 0, 90, 180 o 270 grados. Esa sección dice que "no existe una fórmula de predicción simple con la que hacer una comparación". Pero esa declaración se aplicaría a una precisión deseada de 1 minuto. Si su necesidad de precisión es más flexible, tal vez exista una fórmula utilizable, no lo sé.

Si su necesidad está dentro de unos pocos cientos de años del presente, hay una amplia gama de software para elegir. Pero las expresiones utilizadas pueden deteriorarse rápidamente fuera del rango de validez previsto. Entonces, si está examinando el pasado lejano o el futuro, asegúrese de usar el software diseñado para ese propósito.