首页 > 解决方案 > 用 sympy 中的单位来表达罪过

问题描述

主要问题

问题是,当我取 30 度的罪(带单位)时,我无法使用 N 来找到数字答案。下面是一个最小的示例。

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). 但它也可以产生一个只有两部分的元组。因此,要将所有内容分开,我需要一个完整的其他功能。

标签: pythonsympy

解决方案


除了使用单位,您可以只使用数字吗?

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

否则,要进行从单位到数字的质量转换,您可以将任何Mul具有单位的内容更改degrad(Mul/deg)

>>> 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

推荐阅读