• 看牛顿法的改进与验证局部收敛


    看牛顿法的改进

    今天继续看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并不是全局最小值。

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

  • 相关阅读:
    ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析
    ueditor插入自定义内容和样式
    PHP跨页面传递时session失效
    apache 错误:The system cannot find the file specified.
    Thinkphp5 使用odbc连接到sqlserver
    thinkphp5在URL地址里隐藏模块名
    wamp设置自定义域名访问php网站
    wamp因配置错误而导致apache无法启动的问题
    Jquery 实现input回车时跳转到下一个input元素
    PHP ERROR : Call to undefined function curl_init()
  • 原文地址:https://www.cnblogs.com/dydx/p/4228286.html
Copyright © 2020-2023  润新知