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
实数或复数输入参数。x, y, 或 z 是复平面中沿负实轴切割的数字(受进一步约束,见注释),并且最多只能有一个为零。p 必须为非零。
- 出ndarray,可选
函数值的可选输出数组
- 返回:
注释
该代码基于重复定理和最高至7阶的级数展开实现了Carlson算法。[3] 该算法与其早期版本有所不同,如[Rc3cff20de89f-1]_中所述,内循环中不再需要调用`elliprc`(或``atan``/
atanh
,参见[Rc3cff20de89f-4]_)。在参数数量级差异较大的情况下,使用了渐近近似。[5]当输入参数复杂时,输入值受到某些充分但不必要的约束。特别地,
x
、y
和z
必须具有非负实部,除非其中两个是非负的且互为复共轭,而另一个是非负实数。[1] 如果输入不满足参考文献 [1] 中描述的充分条件,它们将被直接拒绝,输出设置为 NaN。在
x
、y
和z
中有一个等于p
的情况下,应优先使用函数elliprd
,因为它具有较少的限制域。Added in version 1.8.0.
参考文献
[1] (1,2,3,4)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)