单位系统¶
此模块将单位系统集成到 SymPy 中,允许用户在执行计算时选择使用哪个系统,并提供显示和转换单位的实用程序。
单位(如米、磅、秒)和常量(如光年、玻尔兹曼常数)都被视为量。Quantity
对象定义了单位和物理常量(尽管其子类 PhysicalConstant
可能更适用于物理常量)。
量之间的关系由它们的量纲和至少另一个相同量纲的量的比例因子定义。这两种关系类型通常在 UnitSystem
对象内部定义,除了在每个单位系统中都有效的属性。例如,在所有单位系统中,1公里等于1000米,其量纲在所有量纲系统中都是 长度
。另一方面,在SI单位中,光速等于299792458米每秒,而在自然单位中等于1(无量纲)。在SI和自然单位中,光速的量纲都是 速度
,但在自然单位的量纲系统中, 速度
是无量纲的,因为 长度
和 时间
是等价的。同样,在SI单位系统和CGS及高斯单位系统之间,电磁量的量纲和比例因子存在差异,因为后两者不认为 电流
是一个基本量纲。
与其他库中的实现相比,此实现的优势在于它在不同的单位系统中以不同的方式处理单位之间的关系,而不受SI单位系统提供的单位与物理常数之间关系的假设限制。
示例¶
units 模块中最重要的函数是 convert_to
,它允许将给定的量重写为目标量的幂的乘积。例如,用米和秒表示光速:
>>> from sympy.physics.units import speed_of_light, meter, second
>>> from sympy.physics.units import convert_to
>>> convert_to(speed_of_light, [meter, second])
299792458*meter/second
如果无法在目标单位中表示给定的数量,则将返回给定的数量不变:
>>> convert_to(speed_of_light, [meter])
speed_of_light
量之间的关系取决于单位制。因此,convert_to
接受一个可选的第三个参数,表示单位制,默认为 SI
。根据所选的单位制,转换可能会返回不同的结果,例如,在 cgs_gauss
单位制中,电流不是一个基本维度,而是可以表示为长度、时间和质量的组合:
>>> from sympy.physics.units.systems.si import SI
>>> from sympy.physics.units.systems.cgs import cgs_gauss
>>> from sympy.physics.units import ampere, gram, second
>>> convert_to(ampere, [meter, gram, second], SI)
ampere
>>> convert_to(ampere, [meter, gram, second], cgs_gauss)
149896229*sqrt(gram)*meter**(3/2)/(50*second**2)
相同维度的量不会自动简化,例如,如果你用米除以公里,你会得到一个表示这两个单位之间除法的对象。为了简化这种表达式,你可以调用 .simplify()
方法,或者导入 quantity_simplify()
函数,后者还接受一个单位系统作为可选参数。
>>> from sympy.physics.units.util import quantity_simplify
>>> from sympy.physics.units import kilometer
>>> meter/kilometer
meter/kilometer
>>> (meter/kilometer).simplify()
1/1000
>>> quantity_simplify(meter/kilometer)
1/1000
更多¶
关于未来发展的想法可以在 Github wiki 上找到。