我已经编写了几个非线性共轭梯度方法的 Matlab 实现(Fletcher Reeves 和 Polak Ribeire)。但是,我担心优化功能需要多少步骤,大约 100。我读过收敛的界限是在哪里是我的函数所在空间的维度。
此函数的 Hessian/Gradient 是否存在意味着此界限不适用于这种情况的属性?如果是,为什么?是否有任何简单的函数来测试我的实现,并且具有预期的收敛速度?
编辑1: 我应该提到公差设置得很低,,这可能是问题吗?既然如此,又何必如此呢?
我已经编写了几个非线性共轭梯度方法的 Matlab 实现(Fletcher Reeves 和 Polak Ribeire)。但是,我担心优化功能需要多少步骤,大约 100。我读过收敛的界限是在哪里是我的函数所在空间的维度。
此函数的 Hessian/Gradient 是否存在意味着此界限不适用于这种情况的属性?如果是,为什么?是否有任何简单的函数来测试我的实现,并且具有预期的收敛速度?
编辑1: 我应该提到公差设置得很低,,这可能是问题吗?既然如此,又何必如此呢?
非线性共轭梯度法将收敛于二次函数最多步骤。您没有二次函数,也无法保证收敛。每次重置搜索方向会很有帮助步骤或使用更好的方法(即牛顿法)。您可以用来测试的一个简单函数是二次函数,其形式为:对于标量函数,这是一条抛物线(对于正 a 和 b),并且应该很容易检查,因为您有一个解决方案的封闭式表达式。对于向量函数,是一个矩阵,和是向量,你解决最小化函数. 当你超越二次函数时,你可以看看 Rosenbrock 问题,它在数值上很棘手,但有一个已知的解决方案,并且是基本算法和代码的一个很好的验证案例。
编辑:为了清楚起见,我进行了编辑。您的公式中还有一个相当明显的错字。其中一个条款应该是?