scipy.special.elliprj#

scipy.special.elliprj(x, y, z, p, out=None) = <ufunc 'elliprj'>#

第三类对称椭圆积分。

RJ 函数定义为 [1]

\[R_{\mathrm{J}}(x, y, z, p) = \frac{3}{2} \int_0^{+\infty} [(t + x) (t + y) (t + z)]^{-1/2} (t + p)^{-1} dt\]

警告

当输入不平衡时,此函数应被视为实验性的。请使用另一个独立实现检查正确性。

参数:
x、y、z、parray_like

实部或复部输入参数。xyz 是沿着复平面负实轴切开的数(有进一步约束,请参见注释),且它们最多只能有一个为零。p 必须非零。

outndarray,可选

函数值的可选输出数组

返回:
R标量或 ndarray

积分值。如果全部 xyzp 均为实数,则返回值为实数。否则,返回值为复数。

如果 p 为实数且为负数,而 xyz 为实数且非负,并且它们之中最多只有一个为零,则将返回 Cauchy 主值。 [1] [2]

另请参见

elliprc

简并对称积分。

elliprd

第二类对称椭圆积分。

elliprf

第一类完全对称椭圆积分。

elliprg

第二类完全对称椭圆积分。

注释

此代码实现了基于复制定理以及高达 7 阶的级数展开的 Carlson 算法。 [3] 此算法与其更早出现的版本略有不同,后者在 [1] 中出现,原因在于不再需要在内部循环中调用 elliprc(或 atan/atanh,请参阅 [4])。当参数的大小类相差很大时,将使用渐进逼近。 [5]

当输入参数为复数时,输入值受到某些充分条件的约束,但并非必要条件。值得注意的是,xyz 的实部必须是非负的,除非其中两个是非负的且互为复共轭,而另一个是实非负数。 [1] 如果输入不满足参考文献中描述的充分条件 [1],则会直接拒绝这些输入,并将输出设置为 NaN。

如果 xyz 之一等于 p,则应该首选函数 elliprd,因为它的域限制较少。

在版本 1.8.0 中添加。

参考

[1] (1,2,3,4,5)

B. C. Carlson,“实椭圆积分或复椭圆积分的数值计算”,Numer 算法,第 10 卷,第 1 期,第 13-26 页,1995 年。 https://arxiv.org/abs/math/9409227 https://doi.org/10.1007/BF02198293

[2]

B. C. Carlson,编,“数学函数的数字图书馆”第 19 章,NIST,美国商务部。 https://dlmf.nist.gov/19.20.iii

[3]

B. C. Carlson,J. FitzSimmons,“包含两二次因子的平方根的椭圆积分的降级定理”,J. Comput. 应用数学,第 118 卷,第 1-2 期,第 71-85 页,2000 年。 https://doi.org/10.1016/S0377-0427(00)00282-X

[4]

F. Johansson,“椭圆函数、椭圆积分和模形式的数值评估”,J. Blumlein、C. Schneider、P. Paule 编,“量子场论中的椭圆积分、椭圆函数和模形式”,第 269-293 页, 2019 年(瑞士尚弗里:瑞士施普林格自然出版社)https://arxiv.org/abs/1806.06725 https://doi.org/10.1007/978-3-030-04480-0

[5]

B. C. Carlson,J. L. Gustafson,“对称椭圆积分的渐近估值”,SIAM J. Math. Anls.,第 25 卷,第 2 期,第 288-303 页,1994 年. https://arxiv.org/abs/math/9310223 https://doi.org/10.1137/S0036141092228477

例子

基本齐次性属性

>>> import numpy as np
>>> from scipy.special import elliprj
>>> x = 1.2 + 3.4j
>>> y = 5.
>>> z = 6.
>>> p = 7.
>>> scale = 0.3 - 0.4j
>>> elliprj(scale*x, scale*y, scale*z, scale*p)
(0.10834905565679157+0.19694950747103812j)
>>> elliprj(x, y, z, p)*np.power(scale, -1.5)
(0.10834905565679556+0.19694950747103854j)

化简为更简单的椭圆积分

>>> elliprj(x, y, z, z)
(0.08288462362195129-0.028376809745123258j)
>>> from scipy.special import elliprd
>>> elliprd(x, y, z)
(0.08288462362195136-0.028376809745123296j)

所有参数重合

>>> elliprj(x, x, x, x)
(-0.03986825876151896-0.14051741840449586j)
>>> np.power(x, -1.5)
(-0.03986825876151894-0.14051741840449583j)