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))