scipy.special.elliprc#

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

退化对称椭圆积分。

RC 函数定义为 [1]

\[R_{\mathrm{C}}(x, y) = \frac{1}{2} \int_0^{+\infty} (t + x)^{-1/2} (t + y)^{-1} dt = R_{\mathrm{F}}(x, y, y)\]
参数:
x, yarray_like

实数或复数输入参数。x 可以是复平面上沿负实轴切割后的任意数。y 必须非零。

outndarray, optional

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

返回:
Rscalar or ndarray

积分的值。如果 y 是实数且为负,则返回柯西主值。如果 xy 均为实数,则返回值为实数。否则,返回值为复数。

另请参阅

elliprf

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

elliprd

第二类对称椭圆积分。

elliprg

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

elliprj

第三类对称椭圆积分。

附注

RC 是对称积分 RF 的退化情况:elliprc(x, y) == elliprf(x, y, y)。它是一个初等函数,而非椭圆积分。

该代码实现了基于倍增定理和 7 阶级数展开的 Carlson 算法。[2]

在版本 1.8.0 中新增。

参考文献

[1]

B. C. Carlson, ed., “数字数学函数库”第 19 章, NIST, 美国商务部。 https://dlmf.nist.gov/19.16.E6

[2]

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

示例

基本齐次性质

>>> import numpy as np
>>> from scipy.special import elliprc
>>> x = 1.2 + 3.4j
>>> y = 5.
>>> scale = 0.3 + 0.4j
>>> elliprc(scale*x, scale*y)
(0.5484493976710874-0.4169557678995833j)
>>> elliprc(x, y)/np.sqrt(scale)
(0.5484493976710874-0.41695576789958333j)

当两个参数相同时,积分特别简单

>>> x = 1.2 + 3.4j
>>> elliprc(x, x)
(0.4299173120614631-0.3041729818745595j)
>>> 1/np.sqrt(x)
(0.4299173120614631-0.30417298187455954j)

另一种简单情况:第一个参数为零

>>> y = 1.2 + 3.4j
>>> elliprc(0, y)
(0.6753125346116815-0.47779380263880866j)
>>> np.pi/2/np.sqrt(y)
(0.6753125346116815-0.4777938026388088j)

xy 均为正数时,我们可以用更基础的初等函数表示 \(R_C(x,y)\)。对于 \(0 \le x < y\) 的情况,

>>> x = 3.2
>>> y = 6.
>>> elliprc(x, y)
0.44942991498453444
>>> np.arctan(np.sqrt((y-x)/x))/np.sqrt(y-x)
0.44942991498453433

对于 \(0 \le y < x\) 的情况,

>>> x = 6.
>>> y = 3.2
>>> elliprc(x,y)
0.4989837501576147
>>> np.log((np.sqrt(x)+np.sqrt(x-y))/np.sqrt(y))/np.sqrt(x-y)
0.49898375015761476