请问最速下降法的初始值怎么确定,比如这个函数f=exp(x(2)^2+x(1)^2-x(1)*x(2))*cos(x(1)+x(2))
发布网友
发布时间:2022-05-13 18:02
我来回答
共1个回答
热心网友
时间:2023-10-19 11:41
一般进行数值优化的话,初始值是自己任意设定的吧,可能没什么特别的规律可循,特别是当目标函数形式非常复杂的时候。为了防止计算的结果落入局部极值点(最速下降和其他优化方法一样,都是在进行局部搜索,每一次前进或后退一个距离,程序认为达到极值点的标准就是前一次x和这一次x的数值的差距是否足够小),需要多尝试几个不同的初始值看看答案是否不同。
最速下降就是用法向量(或者梯度向量)的办法来进行搜索。你任意给一个初始点后电脑就开始从这点迭代。先计算在这一点的法向量(和切向量垂直),然后沿着法向量的方向选择下一个自变量的点,因为数学上使得函数数值变化最快的方向就是法向量的方向,这样可以让程序收敛速度加快,所以叫最速下降(叫做下降可能是因为你的问题或者书上的问题是要最小化目标函数,如果是要最大化那其实就是最速上升)。就好比是你在一座山的山顶上,想要最快地到达地面,就要坐一部垂直升降的电梯一样。此时在山顶的切向量是一个平面,几乎和地面平行,所以法向量的方向就是垂直方向。沿着任何其他方向下山,速度都比这慢。
你这个函数如果是要求最小值,那肯定初始点最好选在cos数值是负上,比如-1,这样原则上可能会更加接近最小值点(但也不是一定这样)。总之多尝试几遍,或者你自己设定一个区域画出函数的三维坐标图看看最小值点大概在哪儿。
有别的问题再问吧。