Espero que estéis todos bien.
No estoy muy familiarizado AstroPy
y tengo problemas para calcular la conversión entre unidades de momento angular .
Si defino los abdominales. valor del momento angular
del movimiento de un cuerpo interactuando con , asumiendo un movimiento Kepleriano, escribiré:
entonces, un abs genérico. ángulo mamá. , digamos
J1 = u.m * u.kg * u.m * (1/u.s)
debe tener dimensiones equivalentes en comparación con
. Entonces debería poder verificar usando
J2.decompose()
o J2.to(J1)
, pero todo lo que obtengo esUnitConversionError: 'AU(1/2) earthMass G(1/2) solMass(1/2)' and 'kg m2 / s' (angular momentum) are not convertible
J1 = angular_momentum(1* u.Msun, 3*u.Mearth, 0.1*u.au)
J2 = u.m * u.kg * u.m * (1/u.s)
J1.to(J2)
---> UnitConversionError
o
angular_momentum(1*u.Msun, 3*u.Mearth, 0.1*u.au).decompose() #why?
esto parece que * u.au
no está funcionando como se esperaba. De todos modos, pasar unidades, por ejemplo, en u.m
no soluciona el problema.
Pregunta: alguien sabe lo que está pasando aquí?
Editar: esta es la función que estoy usando para calcular def angular_momentum(ms, mp, a):
#from Lp = r x p ~~ a * (mp (G ms / a)^1/2) keplerian rot ~~ mp (g ms a)^1/2
Lp = mp * (u.G * ms * a)**(1./2.) #This MUST! have L units
return Lp
En Astropy, u.G
representa un Gauss , no la constante gravitatoria. Por eso obtienes la "A" en uno de los mensajes de error; representa un amperio. Para usar la constante gravitatoria en su código, necesita usarastropy.constants
y reemplazar u.G
en su código con constants.G
(o simplemente agregar import astropy.constants as c
y usar c.G
, si lo prefiere).
UH oh