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 必须非零。
- outndarray,可选
函数值的可选输出数组
- 返回:
注释
此代码实现了基于复制定理以及高达 7 阶的级数展开的 Carlson 算法。 [3] 此算法与其更早出现的版本略有不同,后者在 [1] 中出现,原因在于不再需要在内部循环中调用
elliprc
(或atan
/atanh
,请参阅 [4])。当参数的大小类相差很大时,将使用渐进逼近。 [5]当输入参数为复数时,输入值受到某些充分条件的约束,但并非必要条件。值得注意的是,
x
、y
和z
的实部必须是非负的,除非其中两个是非负的且互为复共轭,而另一个是实非负数。 [1] 如果输入不满足参考文献中描述的充分条件 [1],则会直接拒绝这些输入,并将输出设置为 NaN。如果
x
、y
和z
之一等于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)