Python Scipy:ellipk和ellipkm1之间的差异

Python Scipy:ellipk和ellipkm1之间的差异,python,scipy,Python,Scipy,我想知道scipy特殊模块中的函数ellipk和ellipkm1之间有什么区别 通过文档,我们了解到ellipk计算第一类椭圆积分,ellipkm1计算相同的积分,但参数约为1 然后绘制下图,请参见 最后,我不知道从哪个值我们必须使用ellipkm1而不是ellipk 有人有答案吗 谢谢。从数学上讲,ellipkm1(x)相当于ellipk(1-x)ellipkm1用于计算值非常接近1的函数。例如,假设您希望在x=1-1e-30处计算ellipk。实际上,您不能,因为对于双精度浮点,1-1e-3

我想知道scipy特殊模块中的函数ellipk和ellipkm1之间有什么区别

通过文档,我们了解到ellipk计算第一类椭圆积分,ellipkm1计算相同的积分,但参数约为1

然后绘制下图,请参见

最后,我不知道从哪个值我们必须使用ellipkm1而不是ellipk

有人有答案吗


谢谢。

从数学上讲,
ellipkm1(x)
相当于
ellipk(1-x)
ellipkm1
用于计算值非常接近1的函数。例如,假设您希望在
x=1-1e-30
处计算
ellipk
。实际上,您不能,因为对于双精度浮点,
1-1e-30
等于
1
,所以
ellipkm(1-1e-30)
将返回
inf
。相反,在
1e-30
处评估
ellipkm1

In [30]: eps = 1e-30

In [31]: 1 - eps  # eps is smaller than 1 ULP, so 1-eps == 1.
Out[31]: 1.0

In [32]: ellipk(1 - eps)  # Of course, this gives inf.
Out[32]: inf

In [33]: ellipkm1(eps)  # This is the value we want.
Out[33]: 35.925070756030571
下面是计算
1-1e-30
处积分的演示

In [30]: eps = 1e-30

In [31]: 1 - eps  # eps is smaller than 1 ULP, so 1-eps == 1.
Out[31]: 1.0

In [32]: ellipk(1 - eps)  # Of course, this gives inf.
Out[32]: inf

In [33]: ellipkm1(eps)  # This is the value we want.
Out[33]: 35.925070756030571