SciPy Newton方法

时间:2016-12-20 08:57:23

标签: python-2.7 scipy newtons-method

我需要找到一个相当复杂的等式的根源,我已经读过python有一套可以提供帮助的功能。我试图弄清楚它们是如何工作的,但我的失败非常糟糕。我看到的例子都非常简单,我需要找到这个函数的根源:

enter image description here

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

1 个答案:

答案 0 :(得分:3)

这是两个解决方案,第二个可能是解决问题的更简单,更正确的方法。

诀窍是你必须让函数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)