在什么情况下非线性共轭梯度法需要超过nn脚步?

计算科学 凸优化 共轭梯度
2021-12-13 20:46:52

我已经编写了几个非线性共轭梯度方法的 Matlab 实现(Fletcher Reeves 和 Polak Ribeire)。但是,我担心优化功能需要多少步骤f(x,y)=x2+5x4+10y2,大约 100。我读过收敛的界限是O(n)在哪里n是我的函数所在空间的维度。

此函数的 Hessian/Gradient 是否存在意味着此界限不适用于这种情况的属性?如果是,为什么?是否有任何简单的函数来测试我的实现,并且具有预期的收敛速度?

编辑1: 我应该提到公差设置得很低,1012,这可能是问题吗?既然如此,又何必如此呢?

1个回答

非线性共轭梯度法将收敛于二次函数N最多步骤。您没有二次函数,也无法保证收敛。每次重置搜索方向会很有帮助N步骤或使用更好的方法(即牛顿法)。您可以用来测试的一个简单函数是二次函数,其形式为:

f=||(bAx)||2
对于标量函数,这是一条抛物线(对于正 a 和 b),并且应该很容易检查,因为您有一个解决方案的封闭式表达式。对于向量函数,A是一个矩阵,bx是向量,你解决x最小化函数f(x). 当你超越二次函数时,你可以看看 Rosenbrock 问题,它在数值上很棘手,但有一个已知的解决方案,并且是基本算法和代码的一个很好的验证案例。

编辑:为了清楚起见,我进行了编辑。您的公式中还有一个相当明显的错字。其中一个x2条款应该是y2?