python 3.5中的LambertW函数为arg<分支-1提供NAN。 -1E-162

时间:2017-02-09 08:04:06

标签: python numpy

我一直在处理涉及分支-1的LambertW函数的问题,从lambertw(-1 / e,-1)= - 1到lambertw(-0,-1)= -inf有效。这个论点“荒谬”小:我想要一个lambertw的答案(-1,-2E-278)。使用Mathematica或WolframAlpha这给出了明智的答案。但是,当我尝试使用Python(Anaconda Python 3.5,在Spyder 3.0中)时,它给出了一个NAN。我尝试了lambertw(x,-1)和答案限制的不同参数!= NAN似乎是-1E-162。我的猜测是这里使用的数值库有局限性。谁能证实这一点?

对“荒谬”论证背后的背景简短说明:我试图计算大气von卡曼极限,其中包括求解以下等式:

(R + x)* exp(-x / H)= y为x,其中y~3000-7000和H~11000,R = 6371000答案是

h = -H * lambertw(-exp(R / H)* y / H,-1) - R。

谢谢,

索伦

1 个答案:

答案 0 :(得分:0)

mpmath库可以轻松处理LambertW的参数。

from mpmath import mp

x = mp.mpf('-2E-278')
y = mp.lambertw(x, k=-1)
print(x, y, y * mp.exp(y))

<强>输出

-2.0e-278 -645.896147400105 -1.99999999999992e-278

如果您想要更高的精确度,只需设置mp.dps即可。例如,对于mp.dps = 50我们得到

-2.0e-278 -645.89614740010513774585665162486252955835623920946 -1.9999999999999999999999999999999999999999999999998e-278

mpmath适用于Python 3和Python 2,可以使用pip轻松安装在Linux系统上。但请参阅上面的mpmath链接以获取更详细的安装信息。