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)
我需要找到一个相当复杂的方程的根,我读到 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)