求解' a = b ln [max(11,b)]'对于b

时间:2017-11-30 13:14:43

标签: math max approximation natural-logarithm

假设:

a = b ln [ max (11, b) ]

如果知道a,那么如何计算b? (我需要使用迭代近似方法吗?)

2 个答案:

答案 0 :(得分:2)

如果a / ln(11) <= 11,那么这是您的解决方案,您不需要任何迭代。 否则解决b * ln(b) - a = 0,例如与Newton-Raphson合作。

答案 1 :(得分:1)

这是你的函数图,我们有x和y而不是b和a。

enter image description here

请注意,有一个&#34;角落&#34;在这一点上(11,11 ln(11))。这是因为您的函数可以重写为:

a = b ln 11 if b <= 11
    b ln b  if b > 11

(我希望MathJax可以像其他一些StackExchange网站一样!)

请注意,the solution to the second versionb = exp(W(a)),其中W()Lambert W function。许多编程语言都有实现Lambert W功能的包。例如,在Python中,常见的scipycalls it lambertw()

因此,在从scipy模块导入lambertw函数并从数学模块导入explog(相当于ln)后,Python中的完整解决方案是

b = (a / log(11) if a <= 11 * log(11)
        else exp(lambertw(a)))

这比重新发明轮子更容易。请注意,scipy的lambertw函数使用连续分数来获得近似值,然后使用一轮或两轮Newton-Raphson方法来获得最终结果。这比仅使用Newton-Raphson更快。