SciPy 牛顿法

SciPy Newton Method

我需要找到一个相当复杂的方程的根,我读到 python 有一组函数可以提供帮助。我试图弄清楚它们是如何工作的,但我失败得很惨。我看到的例子都很简单,我需要找到这个函数的根:

用B和K实正数。有人可以帮忙吗?

这里有两种解决方法,第二种可能是更简单正确的解决方法。

诀窍是您必须让函数 f 记住 K 和 B 的值。一种方法是使它成为另一个函数的内部函数。外部函数用于设置 K 和 B。这些在返回的内部函数的变量范围内。这样内部 f 函数可以记住这些值。然后将返回的函数简单地传递给 Newton-Raphson 方法,并找到根。

from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np

def get_f(K=1, B=1):
    def f(x):
        return np.exp(-B*(np.power(B, x))-factorial(x)*K)
    return f

f = get_f(K=2, B=3)
print newton(f, 3, maxiter=1000)

一位用户评论说 newton 函数有一个 args 参数,可用于将额外的参数传递给 Newton-Raphson 函数。如果函数的形式为 f(x, a, b, c...),则 a, b, c... 是可以在 args.

中给出的额外参数

相同的解决方案将如下所示:

from scipy.misc import factorial
from scipy.optimize import newton
import numpy as np

def f(x, K, B):
    return np.exp(-B*(np.power(B, x))-factorial(x)*K)

print newton(f, 3, args=(2, 3), maxiter=1000)