More examples#
在下面的章节中,我们将给出几个例子来说明如何使用这个模块。
量纲分析#
我们将从牛顿第二定律开始
\[m a=F\]
where \(m, a\) and \(F\) are the mass, the acceleration and the force respectively. Knowing the dimensions of \(m\) (\(M\)) and \(a\) (\(L T^{-2}\)), we will determine the dimension of \(F\); obviously we will find that it is a force: \(M L T^{-2}\).
从这里我们将使用质量粒子之间的引力表达式 \(m\) 以及质量体 \(M\) ,在远处 \(r\)
\[F=\frac{gm}{r^2}\]
确定牛顿常数的维数 \(G\) . 结果应该是 \(L^3 M^{{-1}} T^{{-2}}\) .
>>> from sympy import symbols >>> from sympy.physics.units.systems import SI >>> from sympy.physics.units import length, mass, acceleration, force >>> from sympy.physics.units import gravitational_constant as G >>> from sympy.physics.units.systems.si import dimsys_SI >>> F = mass*acceleration >>> F Dimension(acceleration*mass) >>> dimsys_SI.get_dimensional_dependencies(F) {Dimension(length): 1, Dimension(mass, M): 1, Dimension(time): -2} >>> dimsys_SI.get_dimensional_dependencies(force) {Dimension(length): 1, Dimension(mass): 1, Dimension(time): -2}尺寸不能直接比较,即使在国际单位制中它们是相同的:
>>> F == force False尺寸系统对象提供了一种测试尺寸等效性的方法:
>>> dimsys_SI.equivalent_dims(F, force) True>>> m1, m2, r = symbols("m1 m2 r") >>> grav_eq = G * m1 * m2 / r**2 >>> F2 = grav_eq.subs({m1: mass, m2: mass, r: length, G: G.dimension}) >>> F2 Dimension(mass*length*time**-2) >>> F2.get_dimensional_dependencies() {'length': 1, 'mass': 1, 'time': -2}
请注意,首先应解出方程,然后用尺寸代替。
含量方程#
利用开普勒第三定律
\[\frac{T^2}{a^3}=\frac{4\pi^2}{GM}\]
我们可以用其他变量的已知值(取自维基百科)来找到金星轨道周期。结果应该是224.701天。
>>> from sympy import solve, symbols, pi, Eq >>> from sympy.physics.units import Quantity, length, mass >>> from sympy.physics.units import day, gravitational_constant as G >>> from sympy.physics.units import meter, kilogram >>> T = symbols("T") >>> a = Quantity("venus_a")以国际单位制指定尺寸和比例:
>>> SI.set_quantity_dimension(a, length) >>> SI.set_quantity_scale_factor(a, 108208000e3*meter)将太阳质量作为数量相加:
>>> M = Quantity("solar_mass") >>> SI.set_quantity_dimension(M, mass) >>> SI.set_quantity_scale_factor(M, 1.9891e30*kilogram)现在开普勒定律:
>>> eq = Eq(T**2 / a**3, 4*pi**2 / G / M) >>> eq Eq(T**2/venus_a**3, 4*pi**2/(gravitational_constant*solar_mass)) >>> q = solve(eq, T)[1] >>> q 2*pi*venus_a**(3/2)/(sqrt(gravitational_constant)*sqrt(solar_mass))
要转换为天,请使用 convert_to
函数(以及可能的输出结果):
>>> from sympy.physics.units import convert_to
>>> convert_to(q, day)
71.5112118495813*pi*day
>>> convert_to(q, day).n()
224.659097795948*day
我们也可以把太阳质量和日作为天体物理系统的单位,但我们想展示如何创建一个需要的单位。
在这个例子中,我们可以看到中间维度可能定义不好,比如sqrt(G),但是我们应该检查最终结果(当所有维度都被合并时)是否定义良好。