共轭梯度算法求最小值-scipy
1 # coding=utf-8 2 3 #共轭梯度算法求最小值 4 import numpy as np 5 6 from scipy import optimize 7 8 9 10 11 def f(x, *args): 12 u, v = x 13 a, b, c, d, e, f,g,h = args 14 return a*u**g+ b*u*v + c*v**h + d*u + e*v + f 15 16 17 def gradf(x, *args): 18 u, v = x 19 a, b, c, d, e, f,g,h = args 20 gu = g*a*u + b*v + d # u-component of the gradient 21 gv = b*u +h*c*v + e # v-component of the gradient 22 return np.asarray((gu, gv)) 23 24 25 26 27 if __name__ == "__main__": 28 args = (2, 3, 7, 8, 9, 10, 2, 2) # parameter values 29 x0 = np.asarray((0, 0)) # Initial guess. 30 res1 = optimize.fmin_cg(f, x0, fprime=gradf, args=args) 31 #res2 = optimize.fmin(f,x0,args) 32 print(res1) 33 #print(res2) 34 print(f(res1,*args))