SciPy 1.12 中文文档(三十八)
scipy.spatial.geometric_slerp
scipy.spatial.geometric_slerp(start, end, t, tol=1e-07)
几何球形线性插值。
插值沿任意维度空间中的单位半径大圆弧进行。
参数:
start(n_dimensions, ) 数组样式
在 1-D 数组样式对象中,单个 n 维输入坐标。n 必须大于 1。
end(n_dimensions, ) 数组样式
在 1-D 数组样式对象中,单个 n 维输入坐标。n 必须大于 1。
tfloat 或 (n_points,) 1D 数组样式
表示插值参数的双精度浮点数或 1D 数组样式,其值在包含的区间 [0, 1] 内。一种常见方法是使用 np.linspace(0, 1, n_pts) 生成数组以获取线性间隔点。允许升序、降序和打乱顺序。
tolfloat
用于确定起始和结束坐标是否为反极的绝对容差。
返回:
result(t.size, D)
包含插值球形路径的双精度数组,当使用 0 和 1 的 t 时,包括起点和终点。插值值应与 t 数组中提供的相同排序顺序对应。如果 t 是浮点数,则结果可能是一维的。
引发:
ValueError
如果 start 和 end 是反极,不在单位 n-球上,或者存在各种退化条件。
另请参见
与四元数一起工作的 3-D Slerp
注释
实现基于数学公式提供的,来源于对 4-D 几何学的研究,由 Ken Shoemake 的原始四元数 Slerp 发表中的一个脚注中认可的算法。
新功能版本 1.5.0。
参考文献
[1]
en.wikipedia.org/wiki/Slerp#Geometric_Slerp
[2]
Ken Shoemake(1985)Animating rotation with quaternion curves. ACM SIGGRAPH Computer Graphics,19(3):245-254。
示例
在跨越 90 度的圆周上插值四个线性间隔的值:
>>> import numpy as np
>>> from scipy.spatial import geometric_slerp
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> start = np.array([1, 0])
>>> end = np.array([0, 1])
>>> t_vals = np.linspace(0, 1, 4)
>>> result = geometric_slerp(start,
... end,
... t_vals)
插值结果应在单位圆上的 30 度间隔可识别:
>>> ax.scatter(result[...,0], result[...,1], c='k')
>>> circle = plt.Circle((0, 0), 1, color='grey')
>>> ax.add_artist(circle)
>>> ax.set_aspect('equal')
>>> plt.show()
尝试在圆的反极之间插值是模棱两可的,因为存在两条可能的路径;在球体上存在无限可能的测地线路径。尽管如此,一个模棱两可的路径会连同警告返回:
>>> opposite_pole = np.array([-1, 0])
>>> with np.testing.suppress_warnings() as sup:
... sup.filter(UserWarning)
... geometric_slerp(start,
... opposite_pole,
... t_vals)
array([[ 1.00000000e+00, 0.00000000e+00],
[ 5.00000000e-01, 8.66025404e-01],
[-5.00000000e-01, 8.66025404e-01],
[-1.00000000e+00, 1.22464680e-16]])
将原始示例扩展到球体并在 3D 中绘制插值点:
>>> from mpl_toolkits.mplot3d import proj3d
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
绘制单位球作为参考(可选):
>>> u = np.linspace(0, 2 * np.pi, 100)
>>> v = np.linspace(0, np.pi, 100)
>>> x = np.outer(np.cos(u), np.sin(v))
>>> y = np.outer(np.sin(u), np.sin(v))
>>> z = np.outer(np.ones(np.size(u)), np.cos(v))
>>> ax.plot_surface(x, y, z, color='y', alpha=0.1)
在球面上插值更多点可能会使曲线看起来更加平滑,这对球面上的离散积分计算也很有用:
>>> start = np.array([1, 0, 0])
>>> end = np.array([0, 0, 1])
>>> t_vals = np.linspace(0, 1, 200)
>>> result = geometric_slerp(start,
... end,
... t_vals)
>>> ax.plot(result[...,0],
... result[...,1],
... result[...,2],
... c='k')
>>> plt.show()
scipy.spatial.QhullError
exception scipy.spatial.QhullError
with_traceback()
Exception.with_traceback(tb) – set self.traceback to tb and return self.
特殊函数(scipy.special)
下面几乎所有函数都接受 NumPy 数组作为输入参数,也可以接受单个数字。这意味着它们遵循广播和自动数组循环规则。从技术上讲,它们是 NumPy 通用函数。那些不接受 NumPy 数组的函数在部分描述中标有警告。
另请参阅
scipy.special.cython_special – 特殊函数的类型化 Cython 版本
错误处理
当发生错误时,通过返回 NaN 或其他适当的值来处理错误。某些特殊函数例程在发生错误时可以发出警告或引发异常。默认情况下,此功能已禁用;要查询和控制当前错误处理状态,提供了以下函数。
geterr() | 获取当前处理特殊函数错误的方式。 |
|---|---|
seterr(**kwargs) | 设置特殊函数错误处理方式。 |
errstate(**kwargs) | 特殊函数错误处理的上下文管理器。 |
SpecialFunctionWarning | 可能由特殊函数发出的警告。 |
SpecialFunctionError | 特殊函数可能引发的异常。 |
可用函数
Airy 函数
airy(z[, out]) | Airy 函数及其导数。 |
|---|---|
airye(z[, out]) | 指数缩放的 Airy 函数及其导数。 |
ai_zeros(nt) | 计算 Airy 函数 Ai 及其导数的 nt 个零点和值。 |
bi_zeros(nt) | 计算 Airy 函数 Bi 及其导数的 nt 个零点和值。 |
itairy(x[, out]) | Airy 函数的积分 |
椭圆函数和积分
ellipj(u, m[, out]) | 雅可比椭圆函数 |
|---|---|
ellipk(m[, out]) | 第一类完全椭圆积分 |
ellipkm1(p[, out]) | 当 m = 1 时的第一类完全椭圆积分 |
ellipkinc(phi, m[, out]) | 第一类不完全椭圆积分 |
ellipe(m[, out]) | 第二类完全椭圆积分 |
ellipeinc(phi, m[, out]) | 第二类不完全椭圆积分 |
elliprc(x, y[, out]) | 对称退化椭圆积分 |
elliprd(x, y, z[, out]) | 第二类对称椭圆积分 |
elliprf(x, y, z[, out]) | 完全对称第一类椭圆积分 |
elliprg(x, y, z[, out]) | 完全对称第二类椭圆积分 |
elliprj(x, y, z, p[, out]) | 第三类对称椭圆积分 |
Bessel functions
jv(v, z[, out]) | 复数参数的第一类贝塞尔函数 |
|---|---|
jve(v, z[, out]) | 指数缩放的第一类贝塞尔函数 |
yn(n, x[, out]) | 整数阶实参数第二类贝塞尔函数 |
yv(v, z[, out]) | 复数参数的第二类贝塞尔函数 |
yve(v, z[, out]) | 指数缩放的第二类贝塞尔函数 |
kn(n, x[, out]) | 整数阶修正贝塞尔函数第二类 |
kv(v, z[, out]) | 第二类修正贝塞尔函数 |
kve(v, z[, out]) | 指数缩放的第二类修正贝塞尔函数 |
iv(v, z[, out]) | 实数阶修正贝塞尔函数第一类 |
ive(v, z[, out]) | 指数缩放的第一类修正贝塞尔函数 |
hankel1(v, z[, out]) | 第一类汉克尔函数 |
hankel1e(v, z[, out]) | 指数缩放的第一类汉克尔函数 |
hankel2(v, z[, out]) | 第二类汉克尔函数 |
hankel2e(v, z[, out]) | 指数缩放的第二类汉克尔函数 |
wright_bessel(a, b, x[, out]) | 莱特广义贝塞尔函数 |
不接受 NumPy 数组的以下函数(不是通用函数):
lmbda(v, x) | 雅恩克-艾姆登 Lambda 函数,Lambdav(x) |
|---|
贝塞尔函数的零点
不接受 NumPy 数组的以下函数(不是通用函数):
jnjnp_zeros(nt) | 计算整数阶贝塞尔函数 Jn 和 Jn' 的零点 |
|---|---|
jnyn_zeros(n, nt) | 计算贝塞尔函数 Jn(x),Jn'(x),Yn(x) 和 Yn'(x) 的 nt 个零点 |
jn_zeros(n, nt) | 计算整数阶贝塞尔函数 Jn 的零点 |
jnp_zeros(n, nt) | 计算整数阶贝塞尔函数导数 Jn' 的零点 |
yn_zeros(n, nt) | 计算整数阶贝塞尔函数 Yn(x) 的零点 |
ynp_zeros(n, nt) | 计算整数阶贝塞尔函数导数 Yn'(x) 的零点 |
y0_zeros(nt[, complex]) | 计算 Bessel 函数 Y0(z) 及其导数在每个零点处的 nt 个零点 |
y1_zeros(nt[, complex]) | 计算贝塞尔函数 (Y1(z)) 的 nt 个零点,以及每个零点的导数。 |
y1p_zeros(nt[, complex]) | 计算贝塞尔导数 (Y1'(z)) 的 nt 个零点,以及每个零点的值。 |
常见贝塞尔函数的快速版本
j0(x[, out]) | 第一类贝塞尔函数,阶数为 0。 |
|---|---|
j1(x[, out]) | 第一类贝塞尔函数,阶数为 1。 |
y0(x[, out]) | 第二类贝塞尔函数,阶数为 0。 |
y1(x[, out]) | 第二类贝塞尔函数,阶数为 1。 |
i0(x[, out]) | 阶数为 0 的修改的贝塞尔函数。 |
i0e(x[, out]) | 阶数为 0 的指数尺度修改的贝塞尔函数。 |
i1(x[, out]) | 阶数为 1 的修改的贝塞尔函数。 |
i1e(x[, out]) | 阶数为 1 的指数尺度修改的贝塞尔函数。 |
k0(x[, out]) | 修改的第二类贝塞尔函数,阶数为 0,(K_0)。 |
k0e(x[, out]) | 阶数为 0 的指数尺度修改的贝塞尔函数 K。 |
k1(x[, out]) | 修改的第二类贝塞尔函数,阶数为 1,(K_1(x))。 |
k1e(x[, out]) | 阶数为 1 的指数尺度修改的贝塞尔函数 K。 |
贝塞尔函数的积分
itj0y0(x[, out]) | 阶数为 0 的第一类贝塞尔函数的积分。 |
|---|---|
it2j0y0(x[, out]) | 与第一类阶数为 0 的贝塞尔函数相关的积分。 |
iti0k0(x[, out]) | 修改的阶数为 0 的贝塞尔函数的积分。 |
it2i0k0(x[, out]) | 与修改的阶数为 0 的贝塞尔函数相关的积分。 |
besselpoly(a, lmb, nu[, out]) | 第一类贝塞尔函数的加权积分。 |
贝塞尔函数的导数
jvp(v, z[, n]) | 计算第一类贝塞尔函数的导数。 |
|---|---|
yvp(v, z[, n]) | 计算第二类贝塞尔函数的导数。 |
kvp(v, z[, n]) | 计算修正贝塞尔函数 Kv(z) 的实数阶导数 |
ivp(v, z[, n]) | 计算第一类修正贝塞尔函数的导数。 |
h1vp(v, z[, n]) | 计算汉克尔函数 H1v(z) 关于 z 的导数。 |
h2vp(v, z[, n]) | 计算汉克尔函数 H2v(z) 关于 z 的导数。 |
球贝塞尔函数
spherical_jn(n, z[, derivative]) | 球贝塞尔函数第一类或其导数。 |
|---|---|
spherical_yn(n, z[, derivative]) | 球贝塞尔函数第二类或其导数。 |
spherical_in(n, z[, derivative]) | 修改的第一类球贝塞尔函数或其导数。 |
spherical_kn(n, z[, derivative]) | 修改的第二类球贝塞尔函数或其导数。 |
里卡第-贝塞尔函数
以下函数不接受 NumPy 数组(它们不是通用函数):
riccati_jn(n, x) | 计算第一类里卡第-贝塞尔函数及其导数。 |
|---|---|
riccati_yn(n, x) | 计算第二类里卡第-贝塞尔函数及其导数。 |
斯特鲁夫函数
struve(v, x[, out]) | 斯特鲁夫函数。 |
|---|---|
modstruve(v, x[, out]) | 修改斯特鲁夫函数。 |
itstruve0(x[, out]) | 零阶斯特鲁夫函数的积分。 |
it2struve0(x[, out]) | 与零阶斯特鲁夫函数相关的积分。 |
itmodstruve0(x[, out]) | 零阶修正斯特鲁夫函数的积分。 |
原始统计函数
另见
scipy.stats:这些函数的友好版本。
二项分布
bdtr(k, n, p[, out]) | 二项分布累积分布函数。 |
|---|---|
bdtrc(k, n, p[, out]) | 二项分布生存函数。 |
bdtri(k, n, y[, out]) | 相对于 p 的逆函数,与 bdtr 相关。 |
bdtrik(y, n, p[, out]) | 相对于 k 的逆函数,与 bdtr 相关。 |
bdtrin(k, y, p[, out]) | 相对于 n 的逆函数,与 bdtr 相关。 |
Beta 分布
btdtr(a, b, x[, out]) | Beta 分布的累积分布函数。 |
|---|---|
btdtri(a, b, p[, out]) | Beta 分布的第 p 个分位数。 |
btdtria(p, b, x[, out]) | 相对于 a 的逆函数,与 btdtr 相关。 |
btdtrib(a, p, x[, out]) | 相对于 b 的逆函数,与 btdtr 相关。 |
F 分布
fdtr(dfn, dfd, x[, out]) | F 分布累积分布函数。 |
|---|---|
fdtrc(dfn, dfd, x[, out]) | F 分布生存函数。 |
fdtri(dfn, dfd, p[, out]) | F 分布的第 p 个分位数。 |
fdtridfd(dfn, p, x[, out]) | fdtr 的逆函数,关于 dfd 的。 |
Gamma 分布
gdtr(a, b, x[, out]) | Gamma 分布累积分布函数。 |
|---|---|
gdtrc(a, b, x[, out]) | Gamma 分布生存函数。 |
gdtria(p, b, x[, out]) | gdtr 的逆函数,关于 a 的。 |
gdtrib(a, p, x[, out]) | gdtr 的逆函数,关于 b 的。 |
gdtrix(a, b, p[, out]) | gdtr 的逆函数,关于 x 的。 |
负二项分布
nbdtr(k, n, p[, out]) | 负二项分布累积分布函数。 |
|---|---|
nbdtrc(k, n, p[, out]) | 负二项分布生存函数。 |
nbdtri(k, n, y[, out]) | 对于参数 p,返回满足 y = nbdtr(k, n, p) 的逆函数,负二项分布累积分布函数。 |
nbdtrik(y, n, p[, out]) | 负二项分布百分位函数。 |
nbdtrin(k, y, p[, out]) | nbdtr 的逆函数,关于 n 的。 |
非中心 F 分布
ncfdtr(dfn, dfd, nc, f[, out]) | 非中心 F 分布的累积分布函数。 |
|---|---|
ncfdtridfd(dfn, p, nc, f[, out]) | 计算非中心 F 分布的自由度(分母部分)。 |
ncfdtridfn(p, dfd, nc, f[, out]) | 计算非中心 F 分布的自由度(分子部分)。 |
ncfdtri(dfn, dfd, nc, p[, out]) | 非中心F分布的累积分布函数的反函数。 |
ncfdtrinc(dfn, dfd, p, f[, out]) | 计算非中心F分布的非中心参数。 |
非中心t分布
nctdtr(df, nc, t[, out]) | 非中心t分布的累积分布函数。 |
|---|---|
nctdtridf(p, nc, t[, out]) | 计算非中心t分布的自由度。 |
nctdtrit(df, nc, p[, out]) | 非中心t分布的累积分布函数的反函数。 |
nctdtrinc(df, p, t[, out]) | 计算非中心t分布的非中心参数。 |
正态分布
nrdtrimn(p, x, std[, out]) | 给定其他参数计算正态分布的均值。 |
|---|---|
nrdtrisd(p, x, mn[, out]) | 给定其他参数计算正态分布的标准差。 |
ndtr(x[, out]) | 标准正态分布的累积分布函数。 |
log_ndtr(x[, out]) | 高斯累积分布函数的对数。 |
ndtri(y[, out]) | ndtr的逆函数,对应于 x。 |
ndtri_exp(y[, out]) | log_ndtr的逆函数,对应于 x。 |
泊松分布
pdtr(k, m[, out]) | 泊松分布的累积分布函数。 |
|---|---|
pdtrc(k, m[, out]) | 泊松分布的生存函数。 |
pdtri(k, y[, out]) | pdtr的逆函数,对应于 m。 |
pdtrik(p, m[, out]) | pdtr 的反函数,对应 m。 |
学生 t 分布
stdtr(df, t[, out]) | 学生 t 分布累积分布函数 |
|---|---|
stdtridf(p, t[, out]) | stdtr 的反函数,对应 df |
stdtrit(df, p[, out]) | 学生 t 分布的第 p 个分位数。 |
卡方分布
chdtr(v, x[, out]) | 卡方分布累积分布函数。 |
|---|---|
chdtrc(v, x[, out]) | 卡方生存函数。 |
chdtri(v, p[, out]) | chdtrc 的反函数,对应 x。 |
chdtriv(p, x[, out]) | chdtr 的反函数,对应 v。 |
非中心卡方分布
chndtr(x, df, nc[, out]) | 非中心卡方累积分布函数 |
|---|---|
chndtridf(x, p, nc[, out]) | chndtr 的反函数,对应 df |
chndtrinc(x, df, p[, out]) | chndtr 的反函数,对应 nc。 |
chndtrix(p, df, nc[, out]) | chndtr 的反函数,对应 x |
Kolmogorov 分布
smirnov(n, d[, out]) | Kolmogorov-Smirnov 补充累积分布函数 |
|---|---|
smirnovi(n, p[, out]) | smirnov 的反函数 |
kolmogorov(y[, out]) | Kolmogorov 分布的补余累积分布(生存函数)。 |
kolmogi(p[, out]) | Kolmogorov 分布的逆生存函数。 |
Box-Cox 变换
boxcox(x, lmbda[, out]) | 计算 Box-Cox 变换。 |
|---|---|
boxcox1p(x, lmbda[, out]) | 计算 1 + x 的 Box-Cox 变换。 |
inv_boxcox(y, lmbda[, out]) | 计算 Box-Cox 变换的逆。 |
inv_boxcox1p(y, lmbda[, out]) | 计算 Box-Cox 变换的逆。 |
Sigmoid 函数
logit(x[, out]) | ndarrays 的 Logit 函数。 |
|---|---|
expit(x[, out]) | Expit 函数(又名 logistic 函数)。 |
log_expit(x[, out]) | Logistic sigmoid 函数的对数。 |
Miscellaneous
tklmbda(x, lmbda[, out]) | Tukey lambda 分布的累积分布函数。 |
|---|---|
owens_t(h, a[, out]) | Owen's T 函数。 |
信息理论函数
entr(x[, out]) | 计算熵的逐元素函数。 |
|---|---|
rel_entr(x, y[, out]) | 计算相对熵的逐元素函数。 |
kl_div(x, y[, out]) | 计算 Kullback-Leibler 散度的逐元素函数。 |
huber(delta, r[, out]) | Huber 损失函数。 |
pseudo_huber(delta, r[, out]) | 伪-Huber 损失函数。 |
Gamma 和相关函数
gamma(z[, out]) | gamma 函数。 |
|---|---|
gammaln(x[, out]) | gamma 函数的绝对值的对数。 |
loggamma(z[, out]) | 伽马函数的主分支对数。 |
gammasgn(x[, out]) | 伽马函数的符号。 |
gammainc(a, x[, out]) | 正则化下不完全伽马函数。 |
gammaincinv(a, y[, out]) | 正则化下不完全伽马函数的反函数。 |
gammaincc(a, x[, out]) | 正则化上不完全伽马函数。 |
gammainccinv(a, y[, out]) | 正则化上不完全伽马函数的反函数。 |
beta(a, b[, out]) | 贝塔函数。 |
betaln(a, b[, out]) | 贝塔函数绝对值的自然对数。 |
betainc(a, b, x[, out]) | 正则化不完全贝塔函数。 |
betaincc(a, b, x[, out]) | 正则化不完全贝塔函数的补函数。 |
betaincinv(a, b, y[, out]) | 正则化不完全贝塔函数的反函数。 |
betainccinv(a, b, y[, out]) | 补充正则化不完全贝塔函数的反函数。 |
psi(z[, out]) | Digamma 函数。 |
rgamma(z[, out]) | 伽马函数的倒数。 |
polygamma(n, x) | Polygamma 函数。 |
multigammaln(a, d) | 返回多变量伽马函数的对数,有时也称为广义伽马函数。 |
digamma(z[, out]) | Digamma 函数。 |
poch(z, m[, out]) | Pochhammer 符号。 |
误差函数和 Fresnel 积分
erf(z[, out]) | 返回复数参数的误差函数。 |
|---|---|
erfc(x[, out]) | 互补误差函数,1 - erf(x)。 |
erfcx(x[, out]) | 缩放的互补误差函数,exp(x**2) * erfc(x)。 |
erfi(z[, out]) | 虚数误差函数,-i erf(i z)。 |
erfinv(y[, out]) | 误差函数的反函数。 |
erfcinv(y[, out]) | 互补误差函数的反函数。 |
wofz(z[, out]) | Faddeeva 函数。 |
dawsn(x[, out]) | Dawson 积分。 |
fresnel(z[, out]) | Fresnel 积分。 |
fresnel_zeros(nt) | 计算正弦和余弦 Fresnel 积分 S(z)和 C(z)的 nt 个复数零点。 |
modfresnelp(x[, out]) | 修改的 Fresnel 正积分。 |
modfresnelm(x[, out]) | 修改的 Fresnel 负积分。 |
voigt_profile(x, sigma, gamma[, out]) | Voigt 轮廓。 |
以下函数不接受 NumPy 数组(它们不是通用函数):
erf_zeros(nt) | 计算第一象限中按绝对值排序的前 nt 个零点。 |
|---|---|
fresnelc_zeros(nt) | 计算余弦 Fresnel 积分 C(z)的 nt 个复数零点。 |
fresnels_zeros(nt) | 计算正弦 Fresnel 积分 S(z)的 nt 个复数零点。 |
Legendre 函数
lpmv(m, v, x[, out]) | 整数阶及实数次数的关联 Legendre 函数。 |
|---|---|
sph_harm(m, n, theta, phi[, out]) | 计算球谐函数。 |
以下函数不接受 NumPy 数组(它们不是通用函数):
clpmn(m, n, z[, type]) | 复数参数的第一类相关勒让德函数。 |
|---|---|
lpn(n, z) | 第一类 Legendre 函数。 |
lqn(n, z) | 第二类 Legendre 函数。 |
lpmn(m, n, z) | 第一类相关勒让德函数序列。 |
lqmn(m, n, z) | 第二类相关勒让德函数序列。 |
椭球谐波
ellip_harm(h2, k2, n, p, s[, signm, signn]) | 椭球谐波函数 E^p_n(l) |
|---|---|
ellip_harm_2(h2, k2, n, p, s) | 椭球谐波函数 F^p_n(l) |
ellip_normal(h2, k2, n, p) | 椭球谐波归一化常数 gamma^p_n |
正交多项式
下列函数评估正交多项式的值:
assoc_laguerre(x, n[, k]) | 计算阶数为 n 和次数为 k 的广义(相关)拉盖尔多项式。 |
|---|---|
eval_legendre(n, x[, out]) | 在某一点评估勒让德多项式。 |
eval_chebyt(n, x[, out]) | 在某一点评估第一类切比雪夫多项式。 |
eval_chebyu(n, x[, out]) | 在某一点评估第二类切比雪夫多项式。 |
eval_chebyc(n, x[, out]) | 在[-2, 2]区间上的某一点评估第一类切比雪夫多项式。 |
eval_chebys(n, x[, out]) | 在[-2, 2]区间上的某一点评估第二类切比雪夫多项式。 |
eval_jacobi(n, alpha, beta, x[, out]) | 在某一点评估雅各比多项式。 |
eval_laguerre(n, x[, out]) | 在某一点评估拉盖尔多项式。 |
eval_genlaguerre(n, alpha, x[, out]) | 在某一点评估广义拉盖尔多项式。 |
eval_hermite(n, x[, out]) | 在某一点评估物理学家的厄米多项式。 |
eval_hermitenorm(n, x[, out]) | 在某一点评估概率学家的(归一化的)厄米多项式。 |
eval_gegenbauer(n, alpha, x[, out]) | 在某一点评估格根鲍尔多项式。 |
eval_sh_legendre(n, x[, out]) | 在某一点评估偏移勒让德多项式。 |
eval_sh_chebyt(n, x[, out]) | 在某一点评估偏移第一类切比雪多项式。 |
eval_sh_chebyu(n, x[, out]) | 在某一点评估偏移第二类切比雨多项式。 |
eval_sh_jacobi(n, p, q, x[, out]) | 在某一点评估偏移雅可比多项式。 |
下列函数计算正交多项式的根和求积权重:
roots_legendre(n[, mu]) | 高斯-勒让德求积。 |
|---|---|
roots_chebyt(n[, mu]) | 高斯切比提(第一类)求积。 |
roots_chebyu(n[, mu]) | 高斯切比雨(第二类)求积。 |
roots_chebyc(n[, mu]) | 高斯切比西(第一类)求积。 |
roots_chebys(n[, mu]) | 高斯切比雪(第二类)求积。 |
roots_jacobi(n, alpha, beta[, mu]) | 高斯-雅可比求积。 |
roots_laguerre(n[, mu]) | 高斯-拉盖尔求积法。 |
roots_genlaguerre(n, alpha[, mu]) | 高斯-广义拉盖尔求积法。 |
roots_hermite(n[, mu]) | 高斯-埃尔米特(物理学家)求积法。 |
roots_hermitenorm(n[, mu]) | 高斯-埃尔米特(统计学家)求积法。 |
roots_gegenbauer(n, alpha[, mu]) | 高斯-格格伯正交多项式求积法。 |
roots_sh_legendre(n[, mu]) | 高斯-勒让德(平移)求积法。 |
roots_sh_chebyt(n[, mu]) | 高斯-切比雪夫(第一类,平移)求积法。 |
roots_sh_chebyu(n[, mu]) | 高斯-切比雪夫(第二类,平移)求积法。 |
roots_sh_jacobi(n, p1, q1[, mu]) | 高斯-雅各比(平移)求积法。 |
以下函数依次返回orthopoly1d对象中的多项式系数,其功能类似于numpy.poly1d。orthopoly1d类还具有weights属性,返回适当形式的高斯求积的根、权重和总权重的n x 3数组。请注意,进行算术运算时,orthopoly1d对象会转换为poly1d,且会丢失原始正交多项式的信息。
legendre(n[, monic]) | 勒让德多项式。 |
|---|---|
chebyt(n[, monic]) | 第一类切比雪夫多项式。 |
chebyu(n[, monic]) | 第二类切比雪夫多项式。 |
chebyc(n[, monic]) | ([-2, 2]) 区间第一类切比雪夫多项式。 |
chebys(n[, monic]) | ([-2, 2]) 区间第二类切比雪夫多项式。 |
jacobi(n, alpha, beta[, monic]) | 雅各比多项式。 |
laguerre(n[, monic]) | 拉盖尔多项式。 |
genlaguerre(n, alpha[, monic]) | 广义(相关)拉盖尔多项式。 |
hermite(n[, monic]) | 物理学家的厄米多项式。 |
hermitenorm(n[, monic]) | 规范化的(概率学家的)厄米多项式。 |
gegenbauer(n, alpha[, monic]) | 盖格宾博尔(超球形)多项式。 |
sh_legendre(n[, monic]) | 移位勒让德多项式。 |
sh_chebyt(n[, monic]) | 第一类移位切比雪夫多项式。 |
sh_chebyu(n[, monic]) | 第二类移位切比雪夫多项式。 |
sh_jacobi(n, p, q[, monic]) | 移位雅各比多项式。 |
警告
计算高阶多项式(约为 order > 20)使用多项式系数是数值不稳定的。应使用 eval_* 函数来评估多项式值。
超几何函数
hyp2f1(a, b, c, z[, out]) | 高斯超几何函数 2F1(a, b; c; z) |
|---|---|
hyp1f1(a, b, x[, out]) | 紊乱超几何函数 1F1。 |
hyperu(a, b, x[, out]) | 紊乱超几何函数 U |
hyp0f1(v, z[, out]) | 紊乱超几何极限函数 0F1。 |
抛物柱函数
pbdv(v, x[, out]) | 抛物柱函数 D |
|---|---|
pbvv(v, x[, out]) | 抛物型缸函数 V |
pbwa(a, x[, out]) | 抛物型缸函数 W |
下列函数不接受 NumPy 数组(它们不是通用函数):
pbdv_seq(v, x) | 抛物型缸函数 Dv(x) 及其导数 |
|---|---|
pbvv_seq(v, x) | 抛物型缸函数 Vv(x) 及其导数 |
pbdn_seq(n, z) | 抛物型缸函数 Dn(z) 及其导数 |
马修及相关函数
mathieu_a(m, q[, out]) | 偶数马修函数的特征值 |
|---|---|
mathieu_b(m, q[, out]) | 奇数马修函数的特征值 |
下列函数不接受 NumPy 数组(它们不是通用函数):
mathieu_even_coef(m, q) | 偶数马修和修正马修函数的傅里叶系数 |
|---|---|
mathieu_odd_coef(m, q) | 偶数马修和修正马修函数的傅里叶系数 |
下列函数返回函数及其一阶导数:
mathieu_cem(m, q, x[, out]) | 偶数马修函数及其导数 |
|---|---|
mathieu_sem(m, q, x[, out]) | 奇数马修函数及其导数 |
mathieu_modcem1(m, q, x[, out]) | 第一类偶数修正马修函数及其导数 |
mathieu_modcem2(m, q, x[, out]) | 第二类偶数修正马修函数及其导数 |
mathieu_modsem1(m, q, x[, out]) | 第一类奇数修正马修函数及其导数 |
mathieu_modsem2(m, q, x[, out]) | 奇异修正的马修函数第二类及其导数 |
椭圆体波函数
pro_ang1(m, n, c, x[, out]) | 椭圆体第一类角函数及其导数 |
|---|---|
pro_rad1(m, n, c, x[, out]) | 椭圆体第一类径向函数及其导数 |
pro_rad2(m, n, c, x[, out]) | 椭圆体第二类径向函数及其导数 |
obl_ang1(m, n, c, x[, out]) | 椭圆体第一类角函数及其导数 |
obl_rad1(m, n, c, x[, out]) | 椭圆体第一类径向函数及其导数 |
obl_rad2(m, n, c, x[, out]) | 椭圆体第二类径向函数及其导数。 |
pro_cv(m, n, c[, out]) | 椭圆体函数的特征值 |
obl_cv(m, n, c[, out]) | 椭圆体函数的特征值 |
pro_cv_seq(m, n, c) | 椭圆体波函数的特征值序列。 |
obl_cv_seq(m, n, c) | 椭圆体波函数的特征值序列。 |
以下函数需要预先计算特征值:
pro_ang1_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭圆体角函数 pro_ang1 |
|---|---|
pro_rad1_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭圆体径向函数 pro_rad1 |
pro_rad2_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭圆体径向函数 pro_rad2 |
obl_ang1_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭球体角函数 obl_ang1_cv。 |
obl_rad1_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭球体径向函数 obl_rad1_cv。 |
obl_rad2_cv(m, n, c, cv, x[, out]) | 预计算特征值的椭球体径向函数 obl_rad2_cv。 |
Kelvin 函数
kelvin(x[, out]) | 复数形式的 Kelvin 函数 |
|---|---|
kelvin_zeros(nt) | 计算所有 Kelvin 函数的 nt 个零点。 |
ber(x[, out]) | Kelvin 函数 ber。 |
bei(x[, out]) | Kelvin 函数 bei。 |
berp(x[, out]) | Kelvin 函数 ber 的导数。 |
beip(x[, out]) | Kelvin 函数 bei 的导数。 |
ker(x[, out]) | Kelvin 函数 ker。 |
kei(x[, out]) | Kelvin 函数 kei。 |
kerp(x[, out]) | Kelvin 函数 ker 的导数。 |
keip(x[, out]) | Kelvin 函数 kei 的导数。 |
以下函数不接受 NumPy 数组(它们不是通用函数):
ber_zeros(nt) | 计算 Kelvin 函数 ber 的 nt 个零点。 |
|---|---|
bei_zeros(nt) | 计算 Kelvin 函数 bei 的 nt 个零点。 |
berp_zeros(nt) | 计算 Kelvin 函数 ber 的导数的 nt 个零点。 |
beip_zeros(nt) | 计算 Kelvin 函数 bei 的导数的 nt 个零点。 |
ker_zeros(nt) | 计算 Kelvin 函数 ker 的 nt 个零点。 |
kei_zeros(nt) | 计算 Kelvin 函数 kei 的 nt 个零点。 |
kerp_zeros(nt) | 计算 Kelvin 函数 ker 的导数的 nt 个零点。 |
keip_zeros(nt) | 计算 Kelvin 函数 kei 的导数的 nt 个零点。 |
组合数学
comb(N, k, *[, exact, repetition, legacy]) | 从 N 个物体中取 k 个的组合数。 |
|---|---|
perm(N, k[, exact]) | N 个物体中取 k 个的排列数,即 N 的 k 排列。 |
stirling2(N, K, *[, exact]) | 生成第二类 Stirling 数。 |
Lambert W 函数及相关函数
lambertw(z[, k, tol]) | Lambert W 函数。 |
|---|---|
wrightomega(z[, out]) | Wright Omega 函数。 |
其他特殊函数
agm(a, b[, out]) | 计算算术-几何平均数 a 和 b 的算术-几何平均数。 |
|---|---|
bernoulli(n) | 伯努利数 B0..Bn(包括)。 |
binom(x, y[, out]) | 作为两个实数变量函数的二项式系数。 |
diric(x, n) | 周期正弦函数,也称为狄利克雷函数。 |
euler(n) | 欧拉数 E(0), E(1), ..., E(n)。 |
expn(n, x[, out]) | 广义指数积分 En。 |
exp1(z[, out]) | 指数积分 E1。 |
expi(x[, out]) | 指数积分 Ei。 |
factorial(n[, exact]) | 数字或数字数组的阶乘。 |
factorial2(n[, exact]) | 双阶乘。 |
factorialk(n, k[, exact]) | n 的 k 次多重阶乘,n(!!...!)。 |
shichi(x[, out]) | 双曲正弦和余弦积分。 |
sici(x[, out]) | 正弦和余弦积分。 |
softmax(x[, axis]) | 计算 softmax 函数。 |
log_softmax(x[, axis]) | 计算 softmax 函数的对数。 |
spence(z[, out]) | 斯宾斯函数,也称为二阶狄利克雷函数。 |
zeta(x[, q, out]) | 黎曼或 Hurwitz zeta 函数。 |
zetac(x[, out]) | 黎曼函数减 1。 |
便捷函数
cbrt(x[, out]) | x的逐元立方根。 |
|---|---|
exp10(x[, out]) | 逐元素计算10**x。 |
exp2(x[, out]) | 逐元素计算2**x。 |
radian(d, m, s[, out]) | 将度数转换为弧度。 |
cosdg(x[, out]) | 以度为单位给出角度x的余弦。 |
sindg(x[, out]) | 以度为单位给出角度x的正弦。 |
tandg(x[, out]) | 以度为单位给出角度x的正切。 |
cotdg(x[, out]) | 以度为单位给出角度x的余切。 |
log1p(x[, out]) | 计算 log(1 + x),当x接近零时使用。 |
expm1(x[, out]) | 计算exp(x) - 1。 |
cosm1(x[, out]) | 当x接近零时,计算 cos(x) - 1。 |
powm1(x, y[, out]) | 计算x**y - 1。 |
round(x[, out]) | 四舍五入到最近的整数。 |
xlogy(x, y[, out]) | 计算 x*log(y),若 x = 0 则结果为 0。 |
xlog1py(x, y[, out]) | 计算 x*log1p(y),若 x = 0 则结果为 0。 |
logsumexp(a[, axis, b, keepdims, return_sign]) | 计算输入元素的指数函数和的对数。 |
exprel(x[, out]) | 相对误差指数函数,(exp(x) - 1)/x。 |
sinc(x) | 返回归一化的 sinc 函数。 |
scipy.special.geterr
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.geterr.html#scipy.special.geterr
scipy.special.geterr()
获取当前特殊函数错误处理的方式。
返回:
err字典
一个包含键“singular”、“underflow”、“overflow”、“slow”、“loss”、“no_result”、“domain”、“arg”和“other”的字典,它们的值是字符串“ignore”、“warn”和“raise”。这些键表示可能的特殊函数错误,而值定义了如何处理这些错误。
另请参阅
seterr
设置特殊函数错误的处理方式
errstate
特殊函数错误处理的上下文管理器
浮点错误的类似 numpy 函数
注意事项
完整文档有关特殊函数错误类型及处理选项,请参见seterr。
示例
默认情况下所有错误均被忽略。
>>> import scipy.special as sc
>>> for key, value in sorted(sc.geterr().items()):
... print("{}: {}".format(key, value))
...
arg: ignore
domain: ignore
loss: ignore
no_result: ignore
other: ignore
overflow: ignore
singular: ignore
slow: ignore
underflow: ignore
scipy.special.seterr
原文:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.seterr.html#scipy.special.seterr
scipy.special.seterr(**kwargs)
设置如何处理特殊功能错误。
参数:
all{‘ignore’, ‘warn’ ‘raise’}, 可选
一次设置所有类型的特殊功能错误的处理。选项包括:
-
当错误发生时‘ignore’不采取任何操作
-
‘warn’ 当错误发生时打印
SpecialFunctionWarning(通过 Pythonwarnings模块) -
‘raise’ 当错误发生时引发
SpecialFunctionError。
默认值是不改变当前行为。如果指定了额外类别的特殊功能错误的行为,则首先应用all,然后是额外的类别。
singular{‘ignore’, ‘warn’, ‘raise’}, 可选
对奇异点的处理。
underflow{‘ignore’, ‘warn’, ‘raise’}, 可选
下溢的处理。
overflow{‘ignore’, ‘warn’, ‘raise’}, 可选
对溢出的处理。
slow{‘ignore’, ‘warn’, ‘raise’}, 可选
收敛速度慢的处理。
loss{‘ignore’, ‘warn’, ‘raise’}, 可选
精度损失的处理。
no_result{‘ignore’, ‘warn’, ‘raise’}, 可选
未找到结果的处理。
domain{‘ignore’, ‘warn’, ‘raise’}, 可选
函数参数的无效参数的处理。
arg{‘ignore’, ‘warn’, ‘raise’}, 可选
函数参数的无效参数的处理。
other{‘ignore’, ‘warn’, ‘raise’}, 可选
未知错误的处理。
返回:
olderrdict
包含旧设置的字典。
另请参阅
geterr
获取当前处理特殊功能错误的方式
errstate
特殊功能错误处理的上下文管理器
浮点错误的类似 numpy 函数
例子
>>> import scipy.special as sc
>>> from pytest import raises
>>> sc.gammaln(0)
inf
>>> olderr = sc.seterr(singular='raise')
>>> with raises(sc.SpecialFunctionError):
... sc.gammaln(0)
...
>>> _ = sc.seterr(**olderr)
我们还可以除一外,为每个类别都引发错误。
>>> olderr = sc.seterr(all='raise', singular='ignore')
>>> sc.gammaln(0)
inf
>>> with raises(sc.SpecialFunctionError):
... sc.spence(-1)
...
>>> _ = sc.seterr(**olderr)
scipy.special.errstate
class scipy.special.errstate(**kwargs)
用于特殊函数错误处理的上下文管理器。
在上下文中使用 errstate 实例作为上下文管理器允许该上下文中的语句以已知的错误处理行为执行。进入上下文时,错误处理通过 seterr 设置,退出时恢复为之前的状态。
参数:
kwargs{all, singular, underflow, overflow, slow, loss, no_result, domain, arg, other}
关键字参数。有效关键字是可能的特殊函数错误。每个关键字应具有字符串值,定义了特定类型错误的处理方式。值必须是'ignore'、'warn'或'other'。详见 seterr。
另请参见
获取当前处理特殊函数错误的方法
设置特殊函数错误的处理方式
浮点数误差的类似 numpy 函数
示例
>>> import scipy.special as sc
>>> from pytest import raises
>>> sc.gammaln(0)
inf
>>> with sc.errstate(singular='raise'):
... with raises(sc.SpecialFunctionError):
... sc.gammaln(0)
...
>>> sc.gammaln(0)
inf
我们还可以除了一个之外的每个类别都提升。
>>> with sc.errstate(all='raise', singular='ignore'):
... sc.gammaln(0)
... with raises(sc.SpecialFunctionError):
... sc.spence(-1)
...
inf
scipy.special.SpecialFunctionWarning
exception scipy.special.SpecialFunctionWarning
特殊函数可能发出的警告。
with_traceback()
Exception.with_traceback(tb) – 设置 self.traceback 为 tb 并返回 self。
scipy.special.SpecialFunctionError
exception scipy.special.SpecialFunctionError
特殊函数可能引发的异常。
with_traceback()
Exception.with_traceback(tb) – 将 self.traceback 设置为 tb 并返回 self。
scipy.special.airy
原文:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.airy.html#scipy.special.airy
scipy.special.airy(z, out=None) = <ufunc 'airy'>
Airy 函数及其导数。
参数:
zarray_like
实数或复数参数。
outtuple of ndarray, optional
函数值的可选输出数组
返回:
Ai, Aip, Bi, Bip4-tuple of scalar or ndarray
Airy 函数 Ai 和 Bi,以及它们的导数 Aip 和 Bip。
另请参见
airye
指数缩放的 Airy 函数。
注意
Airy 函数 Ai 和 Bi 是方程的两个独立解
[y''(x) = x y(x).]
对于实数 z 在 [-10, 10] 范围内,通过调用 Cephes [1] 的 airy 程序进行计算,该程序在小 z 的情况下使用幂级数求和,在大 z 的情况下使用有理最小极值逼近法。
在此范围之外,AMOS [2] 的 zairy 和 zbiry 程序被使用。它们使用幂级数计算 (|z| < 1),并使用修正贝塞尔函数与更大的 z 的关系计算(其中 (t \equiv 2 z^{3/2}/3)):
[ \begin{align}\begin{aligned}Ai(z) = \frac{1}{\pi \sqrt{3}} K_{1/3}(t)\Ai'(z) = -\frac{z}{\pi \sqrt{3}} K_{2/3}(t)\Bi(z) = \sqrt{\frac{z}{3}} \left(I_{-1/3}(t) + I_{1/3}(t) \right)\Bi'(z) = \frac{z}{\sqrt{3}} \left(I_{-2/3}(t) + I_{2/3}(t)\right)\end{aligned}\end{align} ]
参考文献
[1]
Cephes 数学函数库,www.netlib.org/cephes/
[2]
Donald E. Amos,“AMOS, A Portable Package for Bessel Functions of a Complex Argument and Nonnegative Order”,netlib.org/amos/
示例
在区间 [-15, 5] 上计算 Airy 函数。
>>> import numpy as np
>>> from scipy import special
>>> x = np.linspace(-15, 5, 201)
>>> ai, aip, bi, bip = special.airy(x)
绘制 Ai(x) 和 Bi(x)。
>>> import matplotlib.pyplot as plt
>>> plt.plot(x, ai, 'r', label='Ai(x)')
>>> plt.plot(x, bi, 'b--', label='Bi(x)')
>>> plt.ylim(-0.5, 1.0)
>>> plt.grid()
>>> plt.legend(loc='upper left')
>>> plt.show()
scipy.special.airye
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.airye.html#scipy.special.airye
scipy.special.airye(z, out=None) = <ufunc 'airye'>
指数尺度的艾里函数及其导数。
缩放:
eAi = Ai * exp(2.0/3.0*z*sqrt(z))
eAip = Aip * exp(2.0/3.0*z*sqrt(z))
eBi = Bi * exp(-abs(2.0/3.0*(z*sqrt(z)).real))
eBip = Bip * exp(-abs(2.0/3.0*(z*sqrt(z)).real))
参数:
z array_like
实数或复数参数。
输出 ndarray 的元组,可选
函数值的可选输出数组
返回:
eAi, eAip, eBi, eBip4 个标量或 ndarray 的元组
指数尺度的艾里函数 eAi 和 eBi,及其导数 eAip 和 eBip
另请参见
airy
注意事项
AMOS [1] 程序包 zairy 和 zbiry 的包装器。
参考文献
[1]
Donald E. Amos,“AMOS,一种复参数和非负阶贝塞尔函数的便携包”,netlib.org/amos/
例子
我们可以计算指数尺度的艾里函数及其导数:
>>> import numpy as np
>>> from scipy.special import airye
>>> import matplotlib.pyplot as plt
>>> z = np.linspace(0, 50, 500)
>>> eAi, eAip, eBi, eBip = airye(z)
>>> f, ax = plt.subplots(2, 1, sharex=True)
>>> for ind, data in enumerate([[eAi, eAip, ["eAi", "eAip"]],
... [eBi, eBip, ["eBi", "eBip"]]]):
... ax[ind].plot(z, data[0], "-r", z, data[1], "-b")
... ax[ind].legend(data[2])
... ax[ind].grid(True)
>>> plt.show()
我们可以通过通常的非尺度化艾里函数来计算这些:
>>> from scipy.special import airy
>>> Ai, Aip, Bi, Bip = airy(z)
>>> np.allclose(eAi, Ai * np.exp(2.0 / 3.0 * z * np.sqrt(z)))
True
>>> np.allclose(eAip, Aip * np.exp(2.0 / 3.0 * z * np.sqrt(z)))
True
>>> np.allclose(eBi, Bi * np.exp(-abs(np.real(2.0 / 3.0 * z * np.sqrt(z)))))
True
>>> np.allclose(eBip, Bip * np.exp(-abs(np.real(2.0 / 3.0 * z * np.sqrt(z)))))
True
比较非尺度化和指数尺度化的函数,通常的非尺度化函数在大值时会迅速下溢,而指数尺度化函数则不会。
>>> airy(200)
(0.0, 0.0, nan, nan)
>>> airye(200)
(0.07501041684381093, -1.0609012305109042, 0.15003188417418148, 2.1215836725571093)
scipy.special.ai_zeros
scipy.special.ai_zeros(nt)
计算 Airy 函数 Ai 及其导数的 nt 个零点和值。
计算 Airy 函数 Ai(x)的首个 nt 个零点 a,Airy 函数导数 Ai’(x)的首个 nt 个零点 ap,对应的值 Ai(a’)和 Ai’(a)。
参数:
ntint
要计算的零点数
返回:
andarray
Ai(x)的首个 nt 个零点
apndarray
Ai’(x)的首个 nt 个零点
aindarray
求解 Ai’(x)的首个 nt 个零点的 Ai(x)的值
aipndarray
求解首个 nt 个 Ai’(x)的零点的值
参考文献
[1]
张善杰、金建明著。“特殊函数的计算”,约翰·威利与儿子,1996 年。people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
示例
>>> from scipy import special
>>> a, ap, ai, aip = special.ai_zeros(3)
>>> a
array([-2.33810741, -4.08794944, -5.52055983])
>>> ap
array([-1.01879297, -3.24819758, -4.82009921])
>>> ai
array([ 0.53565666, -0.41901548, 0.38040647])
>>> aip
array([ 0.70121082, -0.80311137, 0.86520403])
scipy.special.bi_zeros
scipy.special.bi_zeros(nt)
计算 Airy 函数 Bi 及其导数的nt个零点和值
计算第一批nt个 Airy 函数 Bi(x)的零点 b;Airy 函数导数 Bi’(x)的第一批nt个零点 b’;对应的值 Bi(b’);以及对应的值 Bi’(b)。
参数:
ntint
要计算的零点数
返回:
bndarray
Bi(x)的第一批nt个零点
bpndarray
Bi’(x)的第一批nt个零点
bindarray
Bi(x)的值在第一批nt个 Bi’(x)的零点处评估
bipndarray
Bi’(x)的值在第一批nt个 Bi(x)的零点处评估
参考文献
[1]
Zhang, Shanjie 和 Jin, Jianming. “特殊函数的计算”, John Wiley and Sons, 1996. people.sc.fsu.edu/~jburkardt/f77_src/special_functions/special_functions.html
示例
>>> from scipy import special
>>> b, bp, bi, bip = special.bi_zeros(3)
>>> b
array([-1.17371322, -3.2710933 , -4.83073784])
>>> bp
array([-2.29443968, -4.07315509, -5.51239573])
>>> bi
array([-0.45494438, 0.39652284, -0.36796916])
>>> bip
array([ 0.60195789, -0.76031014, 0.83699101])
scipy.special.itairy
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.itairy.html#scipy.special.itairy
scipy.special.itairy(x, out=None) = <ufunc 'itairy'>
Airy 函数的积分
计算从 0 到 x 的 Airy 函数的积分。
参数:
x类似数组
积分的上限(浮点数)。
输出一组 ndarray 的元组,可选
函数值的可选输出数组
返回:
适当标量或 ndarray
对于 Ai(t) 从 0 到 x 的积分。
下标量或 ndarray
对于 Bi(t) 从 0 到 x 的积分。
上标量或 ndarray
对于 Ai(-t) 从 0 到 x 的积分。
下标量或 ndarray
对于 Bi(-t) 从 0 到 x 的积分。
注意
由张善杰和金建明创建的 Fortran 例程包装器 [1]。
参考资料
[1]
张善杰和金建明。“特殊函数的计算”,John Wiley and Sons,1996 年。people.sc.fsu.edu/~jburkardt/f_src/special_functions/special_functions.html
示例
在 x=1. 处计算函数。
>>> import numpy as np
>>> from scipy.special import itairy
>>> import matplotlib.pyplot as plt
>>> apt, bpt, ant, bnt = itairy(1.)
>>> apt, bpt, ant, bnt
(0.23631734191710949,
0.8727691167380077,
0.46567398346706845,
0.3730050096342943)
通过为 x 提供一个 NumPy 数组来计算几个点上的函数。
>>> x = np.array([1., 1.5, 2.5, 5])
>>> apt, bpt, ant, bnt = itairy(x)
>>> apt, bpt, ant, bnt
(array([0.23631734, 0.28678675, 0.324638 , 0.33328759]),
array([ 0.87276912, 1.62470809, 5.20906691, 321.47831857]),
array([0.46567398, 0.72232876, 0.93187776, 0.7178822 ]),
array([ 0.37300501, 0.35038814, -0.02812939, 0.15873094]))
将函数从 -10 到 10 绘制出来。
>>> x = np.linspace(-10, 10, 500)
>>> apt, bpt, ant, bnt = itairy(x)
>>> fig, ax = plt.subplots(figsize=(6, 5))
>>> ax.plot(x, apt, label="$\int_0^x\, Ai(t)\, dt$")
>>> ax.plot(x, bpt, ls="dashed", label="$\int_0^x\, Bi(t)\, dt$")
>>> ax.plot(x, ant, ls="dashdot", label="$\int_0^x\, Ai(-t)\, dt$")
>>> ax.plot(x, bnt, ls="dotted", label="$\int_0^x\, Bi(-t)\, dt$")
>>> ax.set_ylim(-2, 1.5)
>>> ax.legend(loc="lower right")
>>> plt.show()
scipy.special.ellipj
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.ellipj.html#scipy.special.ellipj
scipy.special.ellipj(u, m, out=None) = <ufunc 'ellipj'>
雅各比椭圆函数
计算参数m在 0 到 1 之间以及实数参数u的雅各比椭圆函数。
参数:
marray_like
参数。
uarray_like
参数。
outndarray 元组,可选
函数值的可选输出数组
返回:
sn, cn, dn, ph标量或 ndarray 的 4 元组
返回的函数:
sn(u|m), cn(u|m), dn(u|m)
ph的值使得如果u = ellipkinc(ph, m),那么sn(u|m) = sin(ph)和cn(u|m) = cos(ph)。
参见
第一类完全椭圆积分
第一类不完全椭圆积分
注意
Cephes 的包装器[1] ellpj例程。
这些函数是周期性的,在实轴上的四分之一周期等于完全椭圆积分ellipk(m)。
与不完全椭圆积分的关系:如果u = ellipkinc(phi,m),那么sn(u|m) = sin(phi),cn(u|m) = cos(phi)。phi称为u的振幅。
计算通过算术-几何均值算法完成,除非m接近 0 或 1e-9。在m接近 1 时,近似仅适用于phi < pi/2的情况。
参考文献
Cephes 数学函数库,www.netlib.org/cephes/
scipy.special.ellipk
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.ellipk.html#scipy.special.ellipk
scipy.special.ellipk(m, out=None) = <ufunc 'ellipk'>
第一类完全椭圆积分。
此函数定义为
[K(m) = \int_0^{\pi/2} [1 - m \sin(t)²]^{-1/2} dt]
参数:
marray_like
椭圆积分的参数。
outndarray,可选
函数值的可选输出数组
返回:
K标量或 ndarray
椭圆积分的值。
另请参阅
m = 1 周围的完全椭圆积分第一类
第一类不完全椭圆积分
第二类完全椭圆积分
第二类不完全椭圆积分
完全对称椭圆积分第一类。
注释
对于 m = 1 附近更高的精度,请使用ellipkm1,这个函数调用它。
以(m)的参数化遵循第 17.2 节中的那个[1]。也使用了相互补参数(1 - m)、模角(\sin²(\alpha) = m)或模(k² = m),因此请注意选择正确的参数。
Legendre K 积分与 Carlson 对称 R_F 函数相关[2]:
[K(m) = R_F(0, 1-k², 1) .]
参考文献
[1]
Milton Abramowitz 和 Irene A. Stegun,eds. 数学函数手册与公式、图表和数学表格。纽约:多佛尔,1972 年。
[2]
NIST 数学函数数字图书馆。dlmf.nist.gov/,2020-09-15 发布的版本 1.0.28。参见第 19.25 节(i) dlmf.nist.gov/19.25#i
scipy.special.ellipkm1
scipy.special.ellipkm1(p, out=None) = <ufunc 'ellipkm1'>
完全椭圆积分的第一类,围绕 m = 1
该函数被定义为
[K(p) = \int_0^{\pi/2} [1 - m \sin(t)²]^{-1/2} dt]
其中 m = 1 - p。
参数:
p 数组样式
将椭圆积分的参数定义为 m = 1 - p。
out ndarray,可选
函数值的可选输出数组
返回:
K 标量或 ndarray
椭圆积分的值。
另请参阅
完全椭圆积分的第一类
不完全椭圆积分的第一类
完全椭圆积分的第二类
不完全椭圆积分的第二类
完全对称椭圆积分的第一类。
注解
Cephes [1] 常规 ellpk 的包装。
对于 p <= 1,计算使用近似值,
[K(p) \approx P(p) - \log(p) Q(p),]
其中 (P) 和 (Q) 是十阶多项式。内部使用参数 p 而不是 m,以便将 m = 1 处的对数奇点移至原点;这样可以保持最大精度。对于 p > 1,使用等式
[K(p) = K(1/p)/\sqrt(p)]
被使用。
参考文献
Cephes 数学函数库,www.netlib.org/cephes/
scipy.special.ellipkinc
scipy.special.ellipkinc(phi, m, out=None) = <ufunc 'ellipkinc'>
第二类不完全椭圆积分
此函数定义如下
[K(\phi, m) = \int_0^{\phi} [1 - m \sin(t)²]^{-1/2} dt]
此函数也称为 (F(\phi, m))。
参数:
phiarray_like
椭圆积分的幅度
marray_like
椭圆积分的参数
outndarray, 可选
函数值的可选输出数组
返回:
K标量或 ndarray
椭圆积分的值
另请参见
ellipkm1
第一类完全椭圆积分,接近 m = 1
ellipk
第一类完全椭圆积分
ellipe
第二类完全椭圆积分
ellipeinc
第一类不完全椭圆积分
elliprf
完全对称椭圆积分的第一类
注释
Cephes 的包装器 [1] 常规 ellik 程序。使用算术-几何平均算法进行计算。
用 (m) 参数化的方法遵循第 17.2 节中的方法 [2]。还使用其他以互补参数 (1 - m)、模角 (\sin²(\alpha) = m) 或模数 (k² = m) 的参数化方法,因此在选择正确的参数时要小心。
传说中的 K 不完全积分(或 F 积分)与 Carlson 的对称 R_F 函数相关 [3]。设 (c = \csc²\phi),
[F(\phi, m) = R_F(c-1, c-k², c) .]
参考文献
[1]
Cephes 数学函数库,www.netlib.org/cephes/
[2]
Milton Abramowitz 和 Irene A. Stegun 编著。数学函数手册,带有公式、图表和数学表。纽约:多佛尔,1972 年。
[3]
NIST 数学函数数字图书馆,2020-09-15 版本 1.0.28。参见第 19.25(i) 节 dlmf.nist.gov/19.25#i
scipy.special.ellipe
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.ellipe.html#scipy.special.ellipe
scipy.special.ellipe(m, out=None) = <ufunc 'ellipe'>
第二类完全椭圆积分
此函数定义为
[E(m) = \int_0^{\pi/2} [1 - m \sin(t)²]^{1/2} dt]
参数:
m类似数组
定义椭圆积分的参数。
out ndarray,可选
用于功能值的可选输出数组
返回:
E标量或 ndarray
椭圆积分的值。
参见
ellipkm1
第一类完全椭圆积分,在m = 1 附近
ellipk
第一类完全椭圆积分
ellipkinc
第一类不完全椭圆积分
ellipeinc
第二类不完全椭圆积分
elliprd
对称的第二类椭圆积分。
elliprg
第二类完全对称椭圆积分。
注意事项
Cephes [1]例程ellpe的包装器。
对于m > 0,计算使用近似,
[E(m) \approx P(1-m) - (1-m) \log(1-m) Q(1-m),]
其中(P)和(Q)是十阶多项式。对于m < 0,关系
[E(m) = E(m/(m - 1)) \sqrt(1-m)]
被用于。
关于(m)的参数化遵循[2]中的 17.2 节。也使用基于补充参数(1 - m)、模角(\sin²(\alpha) = m)或模(k² = m)的其他参数化方式,因此请注意选择正确的参数。
Legendre E 积分在多个方面与 Carlson 对称的 R_D 或 R_G 函数相关[3]。例如,
[E(m) = 2 R_G(0, 1-k², 1) .]
参考文献
[1]
Cephes 数学函数库,www.netlib.org/cephes/
[2]
Milton Abramowitz 和 Irene A. Stegun 主编。数学函数、公式、图表和数学表格手册。纽约:多佛尔,1972 年。
[3]
NIST 数学函数数字图书馆。dlmf.nist.gov/,2020-09-15 版的发布 1.0.28。参见第 19.25 节(i) dlmf.nist.gov/19.25#i
示例
此函数用于找到半长轴为a和半短轴为b的椭圆的周长。
>>> import numpy as np
>>> from scipy import special
>>> a = 3.5
>>> b = 2.1
>>> e_sq = 1.0 - b**2/a**2 # eccentricity squared
然后通过以下方式找到周长:
>>> C = 4*a*special.ellipe(e_sq) # circumference formula
>>> C
17.868899204378693
当a和b相同时(即离心率为 0),这将减少为圆的周长。
>>> 4*a*special.ellipe(0.0) # formula for ellipse with a = b
21.991148575128552
>>> 2*np.pi*a # formula for circle of radius a
21.991148575128552
scipy.special.ellipeinc
scipy.special.ellipeinc(phi, m, out=None) = <ufunc 'ellipeinc'>
不完全椭圆积分的第二类
此函数定义如下:
[E(\phi, m) = \int_0^{\phi} [1 - m \sin(t)²]^{1/2} dt]
参数:
phiarray_like
椭圆积分的振幅。
marray_like
椭圆积分的参数。
outndarray,可选
函数值的可选输出数组
返回:
E标量或 ndarray
椭圆积分的值。
另见
完全椭圆积分的第一类,在m=1 附近
完全椭圆积分的第一类
不完全椭圆积分的第一类
完全的第二类椭圆积分
对称的第二类椭圆积分。
完全对称的第一类椭圆积分。
完全对称的第二类椭圆积分。
注释
Cephes [1] 程序 ellie 的封装。
计算使用算术-几何均值算法。
关于(m)的参数化遵循第 17.2 节的[2]。也使用其他关于补充参数(1 - m)、模角(\sin²(\alpha) = m)或模数(k² = m)的参数化方式,因此要小心选择正确的参数。
传说中的不完全第一类 E 椭圆积分可以用多种方式与 Carlson 的对称积分 R_D、R_F 和 R_G 的组合相关联[3]。例如,对于(c = \csc²\phi),
[E(\phi, m) = R_F(c-1, c-k², c) - \frac{1}{3} k² R_D(c-1, c-k², c) .]
参考文献
[1]
Cephes 数学函数库,www.netlib.org/cephes/
[2]
Milton Abramowitz 和 Irene A. Stegun,eds. Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables. New York: Dover, 1972.
[3]
NIST 数学函数数字图书馆。dlmf.nist.gov/, 2020-09-15 发布的版本 1.0.28。参见 Sec. 19.25(i) dlmf.nist.gov/19.25#i
scipy.special.elliprc
原文链接:
docs.scipy.org/doc/scipy-1.12.0/reference/generated/scipy.special.elliprc.html#scipy.special.elliprc
scipy.special.elliprc(x, y, out=None) = <ufunc 'elliprc'>
退化对称椭圆积分。
函数 RC 定义为 [1]
[R_{\mathrm{C}}(x, y) = \frac{1}{2} \int_0^{+\infty} (t + x)^{-1/2} (t + y)^{-1} dt = R_{\mathrm{F}}(x, y, y)]
参数:
x, y 数组型
实数或复数输入参数。x 可以是复平面上的任意数。y 必须非零。
out 数组型,可选
函数值的可选输出数组
返回:
R 标量或数组
积分的值。如果 y 是实数且为负,则返回柯西主值。如果 x 和 y 都是实数,则返回实数值。否则,返回复数值。
另请参阅
完全对称椭圆第一类积分。
对称椭圆第二类积分。
完全对称椭圆第二类积分。
对称椭圆第三类积分。
注释
RC 是对称积分 RF 的一个特殊情况:elliprc(x, y) == elliprf(x, y, y)。它是一个基本函数而非椭圆积分。
代码基于 duplication theorems 和到第 7 阶的级数展开实现了 Carlson 算法。[2]
新版本 1.8.0 中引入。
参考文献
[1]
B. C. Carlson 编辑,第十九章,“数学函数数字图书馆”,NIST,美国商务部。dlmf.nist.gov/19.16.E6
[2]
B. C. Carlson,“数值计算实数或复数椭圆积分”,Numer. Algorithm,vol. 10, no. 1,pp. 13-26,1995。arxiv.org/abs/math/9409227 doi.org/10.1007/BF02198293
示例
基本均匀性质:
>>> import numpy as np
>>> from scipy.special import elliprc
>>> x = 1.2 + 3.4j
>>> y = 5.
>>> scale = 0.3 + 0.4j
>>> elliprc(scale*x, scale*y)
(0.5484493976710874-0.4169557678995833j)
>>> elliprc(x, y)/np.sqrt(scale)
(0.5484493976710874-0.41695576789958333j)
当两个参数重合时,积分特别简单:
>>> x = 1.2 + 3.4j
>>> elliprc(x, x)
(0.4299173120614631-0.3041729818745595j)
>>> 1/np.sqrt(x)
(0.4299173120614631-0.30417298187455954j)
另一个简单情况:第一个参数为零:
>>> y = 1.2 + 3.4j
>>> elliprc(0, y)
(0.6753125346116815-0.47779380263880866j)
>>> np.pi/2/np.sqrt(y)
(0.6753125346116815-0.4777938026388088j)
当 x 和 y 都是正数时,我们可以用更多基本函数表达 (R_C(x,y))。对于情况 (0 \le x < y),
>>> x = 3.2
>>> y = 6.
>>> elliprc(x, y)
0.44942991498453444
>>> np.arctan(np.sqrt((y-x)/x))/np.sqrt(y-x)
0.44942991498453433
对于情况 (0 \le y < x),
>>> x = 6.
>>> y = 3.2
>>> elliprc(x,y)
0.4989837501576147
>>> np.log((np.sqrt(x)+np.sqrt(x-y))/np.sqrt(y))/np.sqrt(x-y)
0.49898375015761476