我需要对$ x ^ x $的倒数实现一个近似值,即平方超根(ssrt)函数。例如,$ \ mathrm {ssrt}(2)\ approx 1.56 $表示$ 1.56 ^ {1.56} \ approx 2 $。与使用幂级数更简单的方法相比,我对了解特定的精度/位深度不感兴趣,而对了解我的选择却不那么感兴趣。

Wolfram Alpha就Lambert W函数(即$ \ ln(x)/ W(\ ln(x))$)给出了一个很好的符号解决方案。维基百科给出了相同的公式,以及等效的$ e ^ {W(\ ln(x))} $。鉴于在计算$ W(x)$ [1] [2]方面有合理数量的信息,因此从技术上讲,这是实现满足各种要求的东西所需的一切。我知道至少有两本书详细介绍了近似$ \ ln(x)$ [3] [4],因此从该方向上甚至还有很多优化的空间。

我有两个问题:


是否已在任何地方发布了针对该函数的近似技术?
除了“平方超根”之外,它是否还会使用其他名称?引用容易一些吗?

Wikipedia / Google已经找到了一些引用,这些引用专门用于更通用的“四分法”功能,其中包括$ \ mathrm {ssrt}(x)$作为特例,但大多数

-


Corless,R .;它们似乎更适合于探索/定义一般情况。 Gonnet,G .;野兔,D。杰弗里(D.) Knuth,Donald(1996),“关于Lambert W函数” http://www.apmaths.uwo.ca/~djeffrey/Offprints/W-adv-cm.pdf


数学函数数字图书馆。 http://dlmf.nist.gov/4.13

Crenshaw,Jack W.(2000),用于实时编程的数学工具包。

Hart,John F.( 1978年),计算机近似。

Chapeau-Blondeau,F.和Monir,A.(2002)。 Lambert W函数的数值评估及其在指数为1/2的广义高斯噪声产生中的应用。 IEEE
信号处理交易50,2160-2165。 http://www.istia.univ-angers.fr/~chapeau/papers/lambertw.pdf
Minero,保罗。快速近似Lambert W. http://www.machinedlearnings.com/2011/07/fast-approximate-lambert-w.html


-

更新

在过去几天进行了更多研究之后,我仍然没有发现对$ \ mathrm {ssrt}( x)$我一直希望,但是我确实找到了一个值得在此处记录的新参考。在[[5] $]的第三页上,有一个标题为“快速近似”的部分,详细介绍了在噪声生成的情况下近似$ W(x)$的情况。另外,有趣的是,“高斯噪声指数为1/2”的概率密度(在本文中)看起来与凯伦杰(Kellenjb)关于检测信号削波的问题的答案中的直方图极为相似。

此外,rwong在注释$ [6] $中给出的链接对于实际实现$ W(x)$是一个很好的资源,它甚至链接到作者的BSD许可项目fastapprox,其中包括所描述的实现。 >

评论

machinedlearnings.com/2011/07/fast-approximate-lambert-w.html

我在Meta上询问了此问题,因为注释字段并不用于扩展讨论。请在此处建议我们应如何处理这些问题:有关数值分析的问题是否在主题上?

@datageist-来自元问题的最初结论是,如果您想使用此数值分析来处理DSP数据,那么它就是主题。如果没有,那就没有。这与DSP有何关系?

@Kevin是在开发音频效果的背景下出现的。

每当我需要为Lambert函数编写例程时,通常都使用本文给出的近似值,然后使用Newton-Raphson,Halley或任何其他迭代方法进行完善。您可以采用这种方法来反转$ x ^ x $ ...

#1 楼

在黑暗中,一些数值刺为迭代方法带来了以下结果:

我们正在寻找解y = f(x),其中y ^ y = x。

$$ y \ ln y = \ ln x $$

$$ y = g(x,y)= e ^ {\ frac {\ ln x} {y}} $$

$ y $的值是上述等式的一个固定点,根据经验,对于$ x $的某些值它似乎收敛,但是对于较大的$ x $的值它会振荡或发散。 >
然后我尝试了一种类似于牛顿迭代平方根的方法:

$$ y = \ frac {y_ {previous} + y _ {*}} {2} = \ frac { y + e ^ {\ frac {\ ln x} {y}}} {2} $$

其中y *表示一个非收敛但乐观的答案,如果您碰巧猜出的话,它可以保持准确性一个准确的初始值(平方根y2 = x,它是y * = x / y)。

收敛,但是在$ x $的低端(在$ x_ {附近, min} =(\ frac {1} {e})^ {\ frac {1} {e}} $)

看起来还不错,最初的猜测是$ y_0 = \ ln(x )+ 1 $。

所以我想这是一个更好收敛的解决方案:

$ y =(1-a)\ times y + a \ times g(x,y)$对于$ a $的某些值,它是$的函数x $。

然后我发现了一些有趣的东西。

如果从上述方法中得到的收敛值$ y $为$ y ^ y = x $,然后计算$ y_2 = g(x,y + \ epsilon)= e ^ {\ frac {\ ln(x)} {y + \ epsilon}} $,看来$ y_2-y $ =大约$ \ epsilon次(- \ ln(y))$ ....例如如果我们对某个未知的$ \ epsilon $进行猜测$ y_1 = y + \ epsilon $,并且计算出的$ y_2 = g(x,y_1)$,则$(y_2-y)\ approx \ epsilon \ times(-\ ln(y))=(y_1-y)\ times(-\ ln(y))$。 (为澄清起见,我没有进行分析来验证这一点,但是数字只是从我执行的一些数值评估中弹出。)

求解$ y $中的线性项,您将得到$ y = \ dfrac {y_2 + \ ln(y)\ times y_1} {1 + \ ln(y)} $ ...使用$ \ ln(y_1)$代替$ \ ln(y)$,您会得到这个迭代逼近:

$$ \ begin {align *}
y [n + 1]&= \ frac {g(x,y [n])+ \ ln(y [n])\次y [n]} {1+ \ ln(y [n])} \\
&= \ frac {e ^ {\ frac {\ ln(x)} {y [n]}} + \ ln(y [n])\乘以y [n]} {1+ \ ln( y [n])}
\ end {align *} $$

这似乎很好用,最初的猜测是$ y = 1+ \ ln(x)$,并且收敛于4或5次迭代。

(有人可能会表明它在某种程度上等效于Newton-Raphson,但我认为这超出了我的能力。)