假设:
a = b ln [ max (11, b) ]
如果知道a
,那么如何计算b
? (我需要使用迭代近似方法吗?)
答案 0 :(得分:2)
如果a / ln(11) <= 11
,那么这是您的解决方案,您不需要任何迭代。
否则解决b * ln(b) - a = 0
,例如与Newton-Raphson合作。
答案 1 :(得分:1)
这是你的函数图,我们有x和y而不是b和a。
请注意,有一个&#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 version为b = exp(W(a))
,其中W()
为Lambert W function。许多编程语言都有实现Lambert W功能的包。例如,在Python中,常见的scipy
包calls it lambertw()
。
因此,在从scipy模块导入lambertw
函数并从数学模块导入exp
和log
(相当于ln)后,Python中的完整解决方案是
b = (a / log(11) if a <= 11 * log(11)
else exp(lambertw(a)))
这比重新发明轮子更容易。请注意,scipy的lambertw
函数使用连续分数来获得近似值,然后使用一轮或两轮Newton-Raphson方法来获得最终结果。这比仅使用Newton-Raphson更快。