Wikipedia me da la ecuación
M = E - e*senE
Tengo M y necesito encontrar E.
¿Cómo hacerlo?
Puede usar un método de resolución de raíz para calcular la anomalía excéntrica
Como dijiste, la ecuación de Kepler para la anomalía excéntrica / media y la excentricidad es:
y no hay una solución de forma cerrada para E como una función de M, pero aún puede calcular E iterativamente.
Puede configurar esto como un problema de resolución de raíz restando M de ambos lados de la ecuación para crear una función de la que desee encontrar la raíz (o cuando sea igual a 0 como una función de E):
La solución del solucionador de raíz calculará un valor de E tal que esta ecuación sea igual a 0, lo que le indicará la anomalía excéntrica que satisface la ecuación de Kepler (la solución).
Para un solucionador de raíces de Newton, debe calcular la derivada de esta función (con respecto a E), que es:
Con esas dos ecuaciones, los valores para la anomalía media (M), la excentricidad (e) y una suposición inicial para la anomalía excéntrica (E) (esto puede ser 0), el solucionador de raíz de Newton calculará la solución.
Como dijeron otros comentarios, esto solo funciona para órbitas cerradas (circulares y elípticas), porque, por definición, las órbitas parabólicas e hiperbólicas no tienen un período. La anomalía excéntrica hiperbólica se utiliza para órbitas parabólicas/hiperbólicas: ¿ Qué es la anomalía excéntrica hiperbólica F?
Aquí hay un buen diagrama que explica la anomalía media ( https://en.wikipedia.org/wiki/Mean_anomaly ). Para resumirlo, la anomalía media es la "anomalía real" de una órbita con el mismo período que la órbita que está modelando, excepto que es circular, por lo que tiene una velocidad angular constante ("media").
Aquí está el script de Python utilizado para hacer este diagrama. El solucionador de raíz de Newton se puede encontrar aquí: https://github.com/alfonsogonzalez/AWP/blob/main/src/python_tools/numerical_tools.py
'''
Create visualizations for Kepler's equation
of Mean / Eccentric anomalies and eccentricity
'''
from numerical_tools import newton_root_single_args
from numerical_tools import d2r, r2d
import numpy as np
import matplotlib.pyplot as plt
plt.style.use( 'dark_background' )
def keplers_eq( E, args ):
return E - args[ 'e' ] * np.sin( E ) - args[ 'M' ]
def dkep_dE( E, args ):
return 1.0 - args[ 'e' ] * np.cos( E )
if __name__ == '__main__':
args0 = { 'M': 100 * d2r, 'e': 0.0 }
args1 = { 'M': 100 * d2r, 'e': 0.5 }
args2 = { 'M': 100 * d2r, 'e': 0.9 }
args3 = { 'M': 200 * d2r, 'e': 0.1 }
args4 = { 'M': 200 * d2r, 'e': 0.9 }
Es = np.arange( 0, 2 * np.pi, 0.01 )
Es_deg = Es * r2d
args = [ args0, args1, args2, args3, args4 ]
colors = [ 'r', 'g', 'b', 'c', 'm' ]
labels = [ '0 | $M=100,e=0$', '1 | $M=100,e=0.5$', '2 | $M=100,e=0.9$' ]
labels += [ '3 | $M=200,e=0.1$', '4 | $M=200,e=0.9$' ]
plt.figure( figsize = ( 12, 8 ) )
for n in range( len( args ) ):
fs = keplers_eq( Es, args[ n ] )
root = newton_root_single_args( keplers_eq, dkep_dE, 0.0, args[ n ] )
plt.plot( Es_deg, fs, colors[ n ], label = labels[ n ] )
plt.plot( root[ 0 ] * r2d, 0, colors[ n ] + 'o' )
plt.ylabel( 'f( E )' )
plt.xlabel( 'E $(degrees)$' )
plt.grid( linestyle = 'dotted' )
plt.legend()
plt.show()
Como dice el artículo de wikipedia, no hay una forma cerrada de expresar en términos de .
Tendrías que aproximarlo, por ejemplo usando una expansión en serie:
Consulte Morrison 1882 para obtener detalles sobre cómo hacer su propia aproximación.
notovni
PM 2 Anillo
alfonso gonzalez
alfonso gonzalez
notovni
alfonso gonzalez
PM 2 Anillo
PM 2 Anillo
alfonso gonzalez
Robotex
alfonso gonzalez
Robotex
Robotex