常数和特殊函数

SciPy的constants模块包含了众多的物理常数:

>>> from scipy import constants as C
>>> C.c # 真空中的光速
299792458.0
>>> C.h # 普朗克常数
6.6260693000000002e-34

在字典physical_constants中,以物理常量名为键,对应的值是一个三个元素的元组,分别为常数值、单位以及误差,例如下面的程序查看电子质量:

>>> C.physical_constants["electron mass"]
(9.1093825999999998e-31, 'kg', 1.5999999999999999e-37)

除了物理常数之外,constants模块中还包括许多单位信息,例如:

>>> C.mile # 1英里等于多少米
1609.3439999999998
>>> C.inch # 1英寸等于多少米
0.025399999999999999
>>> C.gram # 1克等于多少千克
0.001
>>> C.pound # 1磅等于多少千克
0.45359236999999997

SciPy的special模块是一个非常完整的函数库,其中包含了基本数学函数、特殊数学函数以及NumPy中出现的所有函数。由于函数数量众多,本节仅用对其进行简要地介绍。至于其具体所包含的函数列表,请读者参考SciPy的帮助文档。

伽玛函数\Gamma是概率统计学中经常出现的一个特殊函数,它的计算公式如下:

\Gamma(z) = \int_0^\infty  t^{z-1} e^{-t} dt

显然要通过此公式计算\Gamma函数的值是比较麻烦的,我们可以用special模块中的gamma()进行计算:

>>> import scipy.special as S
>>> S.gamma(4)
6.0
>>> S.gamma(0.5)
1.7724538509055159
>>> S.gamma(1+1j) # gamma函数支持复数
(0.49801566811835629-0.15494982830181106j)
>>> S.gamma(1000)
inf

\Gamma函数是阶乘函数在实数和复数范围之上的扩展,它的增长速度非常快,因为1000的阶乘已经超过了双精度浮点数的表示范围,因此结果是无穷大。为了计算更大的范围,可以使用gammaln():

>>> gammaln(1000)
5905.2204232091817

gammaln(x)计算\ln(|\Gamma(x)|)的值,它使用特殊的算法,直接计算\Gamma函数的对数值,因此可以表示更大的范围。

special模块中的某些函数并不是数学意义上的特殊函数,例如log1p(x)计算log(1+x)的值。这是由于浮点数的精度有限,无法很精确地表示十分接近1的实数。例如无法用浮点数表示“1 + 1e-20”的值,因此“log(1+1e-20)”的值为0,而当使用log1p()时,则可以很精确地计算:

>>> 1 + 1e-20
1.0
>>> S.log(1+1e-20)
0.0
>>> S.log1p(1e-20)
9.9999999999999995e-21

实际上当x非常小时,log1p(x)约等于x,这可以通过对log(1+x)进行泰勒级数展开证明。在下一章我们会学习如何用符号计算库SymPy进行泰勒级数展开。

上一个主题

SciPy-数值计算库

下一个主题

优化-optimize

本页

loading...