我试图利用scipy.optimise.fsolve来解决一个函数。我注意到函数在迭代步骤的开始和结束时多次使用相同的值进行评估。例如,当下面的代码进行评价:获得避免多次使用相同输入来评估函数
from scipy.optimize import fsolve
def yy(x):
print(x)
return x**2+9*x+20
y = fsolve(yy,22.)
print(y)
以下输出:
[ 22.]
[ 22.]
[ 22.]
[ 22.00000033]
[ 8.75471707]
[ 4.34171812]
[ 0.81508685]
[-1.16277103]
[-2.42105811]
[-3.17288066]
[-3.61657372]
[-3.85653348]
[-3.96397335]
[-3.99561793]
[-3.99984826]
[-3.99999934]
[-4.]
[-4.]
[-4.]
因此,功能与22三次,这是不必要的评价。
当功能需要大量评估时间时,这特别烦人。任何人都可以请解释这一点,并建议如何避免这个问题?
其中一个论据是['fprime '](https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.optimize.fsolve.html),它被描述为*“用函数来计算函数的Jacobi函数行。默认情况下,雅可比将被估计。“*。我想知道最初的几个呼叫是否在第一对夫妇步骤的近似雅可比行列。 – CoryKramer
但是,为什么它会使用相同的变量?它不应该改变评估雅可比算子的价值么? – tmt
看起来像我的猜测是错误的,我写了一个雅可比你的函数'高清y_p(X):返回2 * X + 9'并通过了为'fprime = y_p',它仍然评估'22.'值数倍。奇怪的是,我没有猜测为什么这样做。 – CoryKramer