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, p类数组

实数或复数输入参数。xyz 是沿负实轴切割的复平面中的数字(受进一步约束,请参阅注释),并且它们中最多一个可以为零。p 必须是非零的。

outndarray,可选

函数值的可选输出数组

返回:
R标量或 ndarray

积分值。如果 xyzp 都是实数,则返回值是实数。否则,返回值是复数。

如果 p 是实数且为负数,而 xyz 是实数、非负数,并且其中最多一个为零,则返回柯西主值。[1] [2]

参见

elliprc

退化对称积分。

elliprd

第二类对称椭圆积分。

elliprf

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

elliprg

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

注释

该代码基于重复定理和高达 7 阶的级数展开,实现了卡尔森算法。[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, “Numerical computation of real or complex elliptic integrals,” Numer. Algorithm, vol. 10, no. 1, pp. 13-26, 1995. https://arxiv.org/abs/math/9409227 https://doi.org/10.1007/BF02198293

[2]

B. C. Carlson, ed., Chapter 19 in “Digital Library of Mathematical Functions,” NIST, US Dept. of Commerce. https://dlmf.nist.gov/19.20.iii

[3]

B. C. Carlson, J. FitzSimmons, “Reduction Theorems for Elliptic Integrands with the Square Root of Two Quadratic Factors,” J. Comput. Appl. Math., vol. 118, nos. 1-2, pp. 71-85, 2000. https://doi.org/10.1016/S0377-0427(00)00282-X

[4]

F. Johansson, “Numerical Evaluation of Elliptic Functions, Elliptic Integrals and Modular Forms,” in J. Blumlein, C. Schneider, P. Paule, eds., “Elliptic Integrals, Elliptic Functions and Modular Forms in Quantum Field Theory,” pp. 269-293, 2019 (Cham, Switzerland: Springer Nature Switzerland) https://arxiv.org/abs/1806.06725 https://doi.org/10.1007/978-3-030-04480-0

[5]

B. C. Carlson, J. L. Gustafson, “Asymptotic Approximations for Symmetric Elliptic Integrals,” SIAM J. Math. Anls., vol. 25, no. 2, pp. 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)