多维梯度法
利用优化函数的导数信息来指导搜索与直接搜索方法相比,更快地找到解决方案需要对解决方案进行良好的初步估计目标函数需要是可微的
梯度法
首先介绍一下梯度法。
梯度是一个向量算子,用▽表示(记作del);当应用于一个函数时,它表示函数的方向导数;坡度(方向导数)是一种特殊情况,即坡度的方向是上升(ascent)/下降(descent)最多或最陡的方向。
对于一个二维函数f(x,y),沿哪个方向是上升速度最快的方向?答案是,沿梯度方向。二维函数f(x,y)的梯度为 高维的情况与之类似。
梯度上升/下降法
梯度法的例子
求f(x) = x2 + y2 +2x + 4 的极值 代码:
#梯度下降法
from sympy import *
from sympy.abc import x,y,h
def f(x,y):
f = x**2 + y**2 +2*x + 4
return f
x_n = 2 #x的初始点
y_n = 1 #y的初始点
while True:
df_x = diff(f(x,y),x).subs(x,x_n) #df_x是关于x的一阶求导
df_y = diff(f(x,y),y).subs(y,y_n) #df_y是关于y的一阶求导
if df_x == 0 and df_y == 0: #或者写成df_x 0:
judge = '小'
elif detH > 0 and d2f11 |