我需要找到一个相当复杂的等式的根源,我已经读过python有一套可以提供帮助的功能。我试图弄清楚它们是如何工作的,但我的失败非常糟糕。我看到的例子都非常简单,我需要找到这个函数的根源:
B和K为正数。有人可以帮忙吗?
答案 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)