最速下降法
- 算法
- 程序
- 总结
算法
程序
代码如下(示例):
import numpy as np# 函数表达式fun
fun = lambda x:100*(x[0]**2-x[1])**2 + (x[0]-1)**2# 梯度向量 gfun
gfun = lambda x:np.array([400*x[0]*(x[0]**2-x[1])+2*(x[0]-1), -200*(x[0]**2-x[1])])# 海森矩阵 hess
hess = lambda x:np.array([[1200*x[0]**2-400*x[1]+2, -400*x[0]],[-400*x[0],200]])def steepest_descent_method(fun,gfun,x0):maxk = 1e5rho = 0.5 # [0,1]sigma = 0.4 # [0,0.5]k = 0epsilon = 1e-5while k<maxk:gk=gfun(x0)dk=-gkif np.linalg.norm(dk)<epsilon:breakm=0mk=0while m<20:if fun(x0+rho**m*dk)<fun(x0)+sigma*rho**m*np.dot(gk,dk):mk=kbreakm += 1x0=x0+rho**m*dkk += 1return x0,fun(x0),kx0,fun0,k=steepest_descent_method(fun,gfun,np.array([0,0])) # 此处x0是行向量,计算时要转成列向量
print(x0,fun0,k)
总结
[0.99998922 0.99997841] 1.1629800417640636e-10 1159