zoukankan      html  css  js  c++  java
  • 看牛顿法的改进与验证局部收敛

    看牛顿法的改进

    今天继续看Numerical Optimization这本书,在看第六章,实用牛顿法。

    6.1 提到“不准确”的牛顿法。意思是每次确定迭代方向都要解方程,很慢,实际上也不一定要解出非常精确的迭代方向。于是尝试用一些迭代解法(例如,共轭梯度法)去解 H*x + G = 0这个方程。

    6.2 提到通过共轭梯度法解 Ax = b 找搜索方向p = x的具体做法。

    一旦发现一个点x有 x^T * A * x <= 0此时A非正定,若当前为第一次迭代,以此迭代方向更新牛顿法,否则,以上一次迭代方向更新。前一种情况实际等价于最速下降法。

    初始位置x0可以设置为0,也可以设置为上一帧的搜索方向。两种方法差不多。

    此法不需要显式的H(共轭梯度法每次更新迭代方向需要的都只是H*某个向量),只需要H * p。因此节省了计算H的时间。

    具体的修改方法有:修改Cholesky分解,Gershgorin修改,对称不定矩阵修改。具体的算法以后研究。

    验证局部收敛

    当前想解决的问题是,完全证实之前迭代失败是由于收敛到局部极值。

    想到的具体做法是,对于之前的例子,把有方向和无方向参数的迭代结果分别记录下来,以后在有方向参数的情形下,看看在无方向的解附近,牛顿迭代是否能够收敛。

    经过试验,确定牛顿法确实收敛到局部极值。具体做法是,在有方向参数的迭代过程中,加载无方向参数最终的迭代结果,看迭代是否收敛到无方向的结果。

    有方向的收敛函数值为231.68。

    加载无方向结果后,收敛函数值为111.98,与无方向参数的模拟方法收敛值一样。

    说明在有方向参数的情况下,231.68并不是全局最小值。

    出现收敛到局部极值的原因为变量太多。下一步尝试不再求解内部点的位置(用外部点的权重表示),或把内部点的位置按静态平衡条件解算,不考虑加速度。

  • 相关阅读:
    HDU
    QDUoj GZS的三角形 棋盘里的数学 思维+杨辉三角
    HDU
    HDU
    CodeForces
    POJ
    QDUOJ 东北大炸弹 宝岛地图-枚举+数组记录+前缀和
    HDU
    QDUOJ 分辣条-01背包恰好装满情况
    HDU
  • 原文地址:https://www.cnblogs.com/dydx/p/4228286.html
Copyright © 2011-2022 走看看