Проблема с астрофизическими единицами

надеюсь, у вас все хорошо.

Я не очень хорошо знаком AstroPy, и у меня возникла проблема с вычислением преобразования между единицами углового момента .

Если я определяю абс. значение углового момента

Дж 2 р × п ! а 2 м 2 ( г М с а 2 ) 1 / 2 "=" м 2 ( г М с а 2 ) 1 / 2

от движения тела м 2 взаимодействие с М с , предполагая кеплерово движение, я напишу:

затем общий пресс. анг. мама. Дж 1 , скажем

Дж 1 ( ( 1 м ) × ( 1 к г м с ) ) "=" 1 к г м с
J1 = u.m * u.kg * u.m * (1/u.s)должны иметь эквивалентные размеры по сравнению с Дж 2 . Поэтому я должен быть в состоянии проверить, используя

J2.decompose()или J2.to(J1), но все, что я получаю, этоUnitConversionError: '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

или

angular_momentum(1*u.Msun, 3*u.Mearth, 0.1*u.au).decompose() #why?

3.0900743 × 10 43 к г 2 м 1 / 2 А 1 / 2 с ( о ты т п ты т )

это похоже * u.auне работает, как ожидалось. В любом случае, передача юнитов, например, u.mне решает проблему.

Вопрос: кто-нибудь знает, что здесь происходит?

Изменить: это функция, которую я использую для вычисления Дж 2 def angular_momentum (мс, мп, а):

    #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 
Скриншоты текста не рекомендуются в Stack Exchange по нескольким причинам, в том числе из-за того, что их нельзя найти и что пользователи, использующие программы чтения с экрана (например, преобразование текста в речь), не могут их прочитать. Стандартный способ — скопировать и вставить текст с вывода вашего компьютера в свой пост, а затем для кода/скрипта добавить четыре пробела перед каждой строкой для отображения в виде блока кода. Я сделал это для вас здесь (просто перепечатав это), и, вероятно, это следует сделать и здесь. Спасибо!

Ответы (1)

В астрофизике u.Gпредставляет Гаусса , а не гравитационную постоянную. Вот почему вы получаете «А» в одном из сообщений об ошибках; он представляет собой ампер. Чтобы использовать гравитационную постоянную в своем коде, вам нужно использоватьastropy.constants и заменить u.Gв своем коде на constants.G(или просто добавить import astropy.constants as cи использовать c.G, если хотите).