牛顿法继续不稳定

今天发现之前迭代过程的终止条件写错了,应该是梯度值小于某值时终止,而不是梯度值+Hessian*增量小于某值终止。因为增量本身就是求解 梯度值 + Hessian * x = 0 得来的啊。。。

 

改掉了之后迭代次数明显增多,模拟速度变慢。

应该允许用户设定迭代终止阈值,控制模拟精确度。

 

但是,最重要的问题是多个参数时,模拟的结果是错误的。

当前圆柱弯曲的例子中,角度值增大到20度左右时,弯曲值被锁定为0,不知道什么原因。

 

若把其中一个参数禁用掉(方法是乘以0),则模拟正常,但是如果动画速度太快,会有不稳定情形。

 

下一步要找出模拟出错的原因。现在推测有以下几种:

1. Hessian 算错,之前测过独立参数的Hessian,但是没有测过相关参数的Hessian。

2. 梯度不连续? 

3. 求解增量的方程病态。当前变量不再随意增长,而是该动的没有动。

 

还要找找处理这种情况有没有现成的方法。

posted @ 2015-01-13 21:43  dydx  阅读(285)  评论(0编辑  收藏  举报