Примите грех выражения с единицами в симпы - PullRequest
0 голосов
/ 30 января 2020

Основная проблема

Проблема в том, что когда я беру грех на 30 градусов (с единицами измерения), я не могу использовать N, чтобы найти числовой c ответ. Ниже приведен минимальный пример.

from sympy import sin, N
from sympy.physics.units import deg
N(sin(30*deg))

Итак, есть ли

  • способ взять на себя грех в чем-то с юнитами?
  • Есть ли простой быстрый способ удалить единицы?

Известное частичное решение

Мне известен способ получения чисел .args, но моя проблема в том, что если я сделаю это что-то вроде

from sympy import sin, N
from sympy.physics.units import deg, rad, convert_to
number = convert_to(30*deg, rad)
number.args

Это даст (1/6, pi, rad). Но это также может дать кортеж из двух частей. Итак, чтобы отделить все, мне нужна совершенно другая функция.

1 Ответ

1 голос
/ 30 января 2020

Вместо использования единиц вы могли бы просто использовать числа?

>>> from sympy.geometry.polygon import rad, deg
>>> rad(30) # instead of 30*deg
pi/6
>>> deg(pi)
180

В противном случае, чтобы выполнить массовое преобразование из единиц в числа, вы можете изменить любое Mul, в котором есть единица измерения deg, на * 1006. *:

>>> from sympy.physics.units import deg
>>> cos(30*deg)
cos(30*deg)
>>> cos(rad(30))
sqrt(3)/2
>>> pats = lambda x:x.is_Mul and x.has(deg), lambda x: rad(x/deg)
>>> cos(30*deg).replace(*pats)
sqrt(3)/2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...