继前文 有限元基础知识:线性化
说过Newton-Raphson迭代的基本流程,当时我们介绍的也叫完全牛顿法 (Full Newton) 我们通过不断的迭代使得
即内外力平衡,其中外力是有所施加的载荷决定的,而内力则是由系统的应力与当前构型决定的。那么为了完成这个过程,我们就需要进行如下的计算,即在每一个迭代步都计算切线刚度矩阵,
即根据第 个迭代步的构型、应力应变状态计算当前的切线刚度矩阵。
这个过程就好比精确制导,在每一个迭代之后,我们都准确的知道下一个迭代的方向,但是代价就是在每一个迭代后,我们都需要重新的计算刚度矩阵,并重新进行矩阵求解,而众所周知这个过程开销是比较大的。
举个例子,在我们做非线性仿真分析的时候,经常需要将每一步切的比较小,那么可能一个非线性仿真就有几十个上百个增量步,而每个增量步内又有4-5个迭代步,那么可能会使得求解刚度矩阵的次数轻松的超过上百次,非常的费时(这也是非线性分析比线性分析花费时间长的多的主要原因之一)。
另外有个问题就是因为每一步都需要计算切线刚度矩阵,当系统接近极值点的时候,就容易切线矩阵奇异,造成数值振动或者不收敛。
所以我们就可以做多种方法,来改变一下最原始的牛顿法,今天先说一种:修正牛顿法 (Modified Newton)
其实改进牛顿法也比较容易理解,其核心无非就是,原本的牛顿法是每个迭代步都计算一次切线刚度矩阵,而改进牛顿法采用一种比较懒的策略,那就是我每隔几步算一次刚度矩阵,这样呢,就可以算完刚度矩阵后将分解后的矩阵存下来,大幅度提升效率。然而其实天下也没有免费的午餐,既然现在不再精确制导,而是开始大力出奇迹,我们理所当然的可以认为,现在的迭代路径并没有完全牛顿法那么精确,为了实现同样的收敛,我们往往需要迭代更多次。
如下图所示的结构,在考虑几何非线性的情况下,我们可以看到,完全牛顿法收敛步数远小于修正牛顿法,大概是修正牛顿法的 , 然而因为其每一迭代步求解非常快,总体消耗的时间却可能更少。
一般商业软件中对于修正牛顿法有几种方式: