maxframe.tensor.special.elliprj#
- maxframe.tensor.special.elliprj(x, y, z, p, **kwargs)[源代码]#
第三类对称椭圆积分。
函数 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 (array_like) -- 实数或复数输入参数。x、y 或 z 是复平面上沿负实轴切割的数字(受进一步约束,参见注释),其中至多有一个为零。p 必须非零。
y (array_like) -- 实数或复数输入参数。x、y 或 z 是复平面上沿负实轴切割的数字(受进一步约束,参见注释),其中至多有一个为零。p 必须非零。
z (array_like) -- 实数或复数输入参数。x、y 或 z 是复平面上沿负实轴切割的数字(受进一步约束,参见注释),其中至多有一个为零。p 必须非零。
p (array_like) -- 实数或复数输入参数。x、y 或 z 是复平面上沿负实轴切割的数字(受进一步约束,参见注释),其中至多有一个为零。p 必须非零。
out (ndarray, optional) -- 函数值的可选输出数组
- 返回:
R -- 积分值。如果 x、y、z 和 p 都是实数,则返回值为实数。否则,返回值为复数。如果 p 是实数且为负数,而 x、y 和 z 是实数、非负数,且其中最多一个为零,则返回柯西主值。[1] [2]
- 返回类型:
scalar or ndarray
备注
代码实现了基于倍增定理和级数展开至七阶的 Carlson 算法。[3] 该算法与其在 [1] 中的早期形式略有不同,因为在内循环中不再需要调用 elliprc`(或 ``atan`/
atanh,见 [4])。当参数在数量级上差异很大时使用渐近近似。[5]当输入参数为复数时,输入值需满足某些充分但非必要的约束。特别地,
x、y和z必须具有非负实部,除非其中两个为非负数且互为复共轭,而另一个为实数非负数。[1] 如果输入不满足参考文献 [1] 中描述的充分条件,则直接拒绝输入并将输出设为 NaN。当
x、y和z中有一个等于p时,应优先使用函数elliprd,因为其定义域限制较少。引用