Sympy中有没有一种方法可以定义一个与pi类似的常数



在Sympy中,我可以在符号打印的方程中使用S.Pi,但可以在不使用sub({Pi:3.1415}(的情况下进行评估:

>>> from sympy import pi
>>> from sympy.abc import r
>>> area = pi * r**2; area
πr² 
>>> area.evalf(sub={r: 3.})
28.274333...

我想对其他常数做一些类似的事情,比如用西格玛表示的Steffen-Boltzmann常数。例如

>>> from sympy import symbols
>>> sigma, T = symbols('σ T');
>>> radiative_heat = sigma * T**4; radiative_heat
σT⁴

到目前为止一切都很好,但我不能在不将sigma更改为float的情况下为其指定一个永久值,而pi已经有了一个值。

>>> pi.evalf()
3.14159265...
>>> sigma.evalf()
σ

当然,我可以用一个值来代替西格玛,但这读起来不太好。我甚至还没有找到pi的值存储在对象中的位置。

我试过使用sympy.physics.units,但它们似乎不是这样实现的。

>>> import sympy.physics.units as u
>>> sigma = u.stefen
>>> sigma.evalf()
stefan_boltzmann_constant

有什么想法吗?

pi这样的情况下处理这类事情的方式如下:

class StefanBoltzmann(NumberSymbol):
def _as_mpf_val(self, prec):
return Float(5.670374419).evalf(prec)._mpf_
sigma = StefanBoltzmann()
print(sigma.evalf())

显然,Stefan-Boltzmann常数并不是真正的无量纲的,所以我认为sympy这样实现它是没有意义的。可能有一种方法可以将其转换为国际单位制的显式表达式,尽管我不确定如何转换。

相关内容

最新更新