-1

鉴于:

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

如果a已知,如何计算b?(我需要使用迭代逼近方法吗?)

4

2 回答 2

2

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

于 2017-11-30T13:30:23.190 回答
1

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

在此处输入图像描述

请注意,点 (11, 11 ln(11)) 处有一个“角”。这是因为您的函数可以重写为:

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

(我希望我可以在这里像在其他一些 StackExchange 站点中一样使用 MathJax!)

请注意,第二个版本的解决方案Lambert W 函数b = exp(W(a))哪里。许多编程语言都有实现 Lambert W 函数的包。例如,在 Python 中,通用包调用它W()scipylambertw()

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

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

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

于 2017-11-30T16:20:50.937 回答