Problema de unidades astropía

Espero que estéis todos bien.

No estoy muy familiarizado AstroPyy tengo problemas para calcular la conversión entre unidades de momento angular .

Si defino los abdominales. valor del momento angular

j 2 r × pag ! a 2 metro 2 ( GRAMO METRO s a 2 ) 1 / 2 = metro 2 ( GRAMO METRO s a 2 ) 1 / 2

del movimiento de un cuerpo metro 2 interactuando con METRO s , asumiendo un movimiento Kepleriano, escribiré:

entonces, un abs genérico. ángulo mamá. j 1 , digamos

j 1 ( ( 1 metro ) × ( 1 k gramo metro s ) ) = 1 k gramo metro s
J1 = u.m * u.kg * u.m * (1/u.s)debe tener dimensiones equivalentes en comparación con j 2 . 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?

3.0900743 × 10 43 k gramo 2 metro 1 / 2 A 1 / 2 s ( o tu t pag tu t )

esto parece que * u.auno está funcionando como se esperaba. De todos modos, pasar unidades, por ejemplo, en u.mno soluciona el problema.

Pregunta: alguien sabe lo que está pasando aquí?

Editar: esta es la función que estoy usando para calcular j 2 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 
Las capturas de pantalla de texto no se recomiendan en Stack Exchange por varias razones, entre ellas, que no se pueden buscar y que los usuarios que usan lectores de pantalla (por ejemplo, texto a voz) no pueden leerlas. La forma estándar es copiar y pegar el texto de la salida de su computadora en su publicación, luego, para el código/script, agregue cuatro espacios al frente de cada línea para que se muestre como un bloque de código. Lo he hecho por usted aquí (simplemente volviendo a escribirlo) y probablemente también debería hacerse aquí. ¡Gracias!

Respuestas (1)

En Astropy, u.Grepresenta 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.Gen su código con constants.G(o simplemente agregar import astropy.constants as cy usar c.G, si lo prefiere).