有没有办法迫使Sympy将Volts打印成伏特,而不是将其作为SI单元的组合?
MWE:
>>> import sympy.physics.units as u
>>> V = 5 * u.V
>>> print(V)
5*kg*m**2/(A*s**3)编辑
正如@rfkortekaas所指出的,我可以使用
V = u.Unit('V','V')他的建议确实解决了一个方面的问题。但是如果我用
>>> I = 0.5 * u.A
>>> R = 100 * u.ohm
>>> V_R = I * R
>>> V_R
50.0*kg*m**2/(A*s**3)我还需要V_R才能被识别为"V“(电压)
编辑2
由于@rfkortekaas仍然在帮助我解决这个问题,现在我有:
>>> V = u.Unit('V', 'V')
>>> ohm = u.Unit('ohm = V/u.A', '\Omega')
>>> R = (10 * V) / (0.5 * u.A)
>>> R
20.0*V/A
>>> V_R = (0.5 * u.A) * (10 * ohm)
>>> V_R
5.0*A*\Omega即V/A和A*\Omega分别被认为是ohm和V。
发布于 2015-08-09 16:47:11
所有交感单位将组成特种部队基地单位。因此,根据S.I,所有派生单位都将表示为基地单位的压实。
基本单位由单位类组成:sympy.physics.units.Unit(‘安培’,'A')。
所有派生单元将由基本(或派生)单元上的数学运算组成。
要以您的方式定义这一点,您可以这样做:Amp已经是一个基本单元,可以使用它。将volt定义为单位(“volt”,“V”)。把欧姆定义为以安培为单位的伏特。
不幸的是,不能将伏特、安培和欧姆全部作为基地单位,并为每个单元获得正确的单位。这是由于派生为基本单位的组成。
发布于 2015-08-18 23:49:46
在这里分享我是如何解决自己的问题的。下面的类包含一个有趣单元的列表,然后可以使用该列表解析Sympy中的单元。
from sympy.physics import units as u
class Electric:
units = {}
units[u.V] = 'V'
units[u.W] = 'W'
units[u.A] = 'A'
units[u.Hz] = 'Hz'
units[u.percent] = '\%'
units[u.F] = 'F'
units[u.s] = 's'
units[u.ohm] = '\Omega'
@classmethod
def identify_unit(cls, value):
for unit in cls.units.keys():
aux = value.as_coefficient(unit)
if aux:
if aux.is_number:
return aux, cls.units[unit]
return value
@classmethod
def change_factor(cls, value):
aux = abs(value[0])
if aux >= u.mega:
return value[0] / (10 ** 6), "M" + value[1]
elif aux >= u.kilo:
return value[0] / (10 ** 3), "k" + value[1]
elif aux >= 1:
return value[0], value[1]
elif aux >= u.milli:
return value[0] * (10 ** 3), "m" + value[1]
elif aux >= u.micro:
return value[0] * (10 ** 6), "\mu{}" + value[1]
else:
return value使用实例:
>>> V_R = 2 * u.V
>>> print(V_R)
2*kg*m**2/(A*s**3)
>>> print(Electric.identify_unit(V_R))
(2, 'V')
>>> I_R = 1 * u.milli * u.A
>>> print(I_R)
A/1000
>>> print(Electric.identify_unit(I_R))
(1/1000, 'A')
>>> R = V_R / I_R
>>> print(R)
2000*kg*m**2/(A**2*s**3)
>>> a = Electric.identify_unit(R)
>>> print(a)
(2000, '\\Omega')
>>> b = Electric.change_factor(a)
>>> print(b)
(2.00000, 'k\\Omega')https://stackoverflow.com/questions/31906377
复制相似问题