我无法选择,并使最小化功能在scipy中工作。我有一个下面定义的四阶多项式和D,F和Z的值。我需要求解系数a,使得函数的计算结果接近于0.然后这个函数可以用来模拟Z的D和F输入。
我在这里查看了选项 http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html
Nelder-Mead和BFGS算法无法接近解决问题。我不确定我是否正在为这些方法解决一个过于复杂的函数,或者我做错了什么。对于超出这个范围的方法,我不知道我需要做些什么来计算Hessian,以及是否有一种pythonic方法来计算它。
import numpy as np
from scipy.optimize import minimize
import scipy
def func(a,Z,D,F):
return -Z + a[0]+\
a[1]*F +\
a[2]*(F)**2 +\
a[3]*(1-a[6]/D)*(F) +\
a[4]*(1-a[6]/D)**2 + \
a[5]*(F)**3+\
a[7]*((1-a[6]/D))*((F)**2)+\
a[8]*((1-a[6]/D)**2)*((F))+\
a[9]*((1-a[6]/D)**3)+\
a[10]*((F)**4)+\
a[11]*((1-a[6]/D))*((F)**3)+\
a[12]*((1-a[6]/D)**2)*((F)**2)+\
a[13]*((1-a[6]/D)**3)*((F))+\
a[14]*((1-a[6]/D))*((F)**4)+\
a[15]*((1-a[6]/D)**2)*((F)**3)+\
a[16]*((1-a[6]/D)**3)*((F)**2)+\
a[17]*((1-a[6]/D)**2)*((F)**4)+\
a[18]*((1-a[6]/D)**3)*((F)**3)+\
a[19]*((1-a[6]/D)**3)*((F)**4)
a0=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
res = minimize(func, a0,args=(56,35.0,.036), method='BFGS')
print(res.fun,res.x)