1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import os import matplotlib.pyplot as plt import numpy as np import scipy import sympy os.chdir('/home/vg/Downloads/projects/ex18') os.getcwd() x1,x2=sympy.symbols("x_1,x_2") f_sym=(x1-1)**4 + 5*(x2-1)**2 - 2*x1*x2 fprime_sym=[f_sym.diff(x_) for x_ in (x1,x2)] sympy.Matrix(fprime_sym) fhess_sym=[[f_sym.diff(x1_,x2_) for x1_ in (x1,x2)] for x2_ in (x1,x2)] sympy.Matrix(fhess_sym) f_lmbda=sympy.lambdify((x1,x2),f_sym,'numpy') fprime_lmbda=sympy.lambdify((x1,x2),fprime_sym,'numpy') fhess_lmbda=sympy.lambdify((x1,x2),fhess_sym,'numpy') def func_XY_to_xy(f): return lambda X: np.array(f(X[0],X[1])) f=func_XY_to_xy(f_lmbda) fprime=func_XY_to_xy(fprime_lmbda) fhess=func_XY_to_xy(fhess_lmbda) x_opt=scipy.optimize.fmin_ncg(f,(0,0),fprime=fprime,fhess=fhess) print(x_opt) fig,ax=plt.subplots(figsize=(6,4)) x_=y_=np.linspace(-1,4,100) X,Y=np.meshgrid(x_,y_) c=ax.contour(X,Y,f_lmbda(X,Y),50) ax.plot(x_opt[0],x_opt[1],'r*',markersize=15) ax.set_xlabel(r"$x_1$",fontsize=18) ax.set_ylabel(r"$x_2$",fontsize=18) plt.colorbar(c,ax=ax) plt.savefig("example18.png", dpi=100) plt.show() plt.close() x_opt=scipy.optimize.fmin_bfgs(f,(0,0),fprime=fprime) print(x_opt) x_opt=scipy.optimize.fmin_cg(f,(0,0),fprime=fprime) print(x_opt) x_opt=scipy.optimize.fmin_bfgs(f,(0,0)) print(x_opt) x_opt=scipy.optimize.fmin_cg(f,(0,0)) print(x_opt) <img class=" wp-image-105 aligncenter" src="https://gantovnik.com/bio-tips/wp-content/uploads/2018/12/example18.png" alt="example18" width="536" height="357" /> |
Recent Comments