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, optional

可选的输出数组,用于存放函数值。

返回:
R标量或 ndarray

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

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

参见

elliprc

退化对称积分。

elliprd

第二类对称椭圆积分。

elliprf

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

elliprg

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

注意事项

该代码实现了基于倍增定理和高达七阶级数展开的卡尔森算法。[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)