在有限元程序中,刚度方程[K]建立完毕,节点力向量F经过了非齐次边界条件处理、等效节点力处理后,都搞成了已知量。此时,就可以解F=KD方程组,来求节点位移向量D了。
求解F=KD方程组的方法有很多,主要可以分为精确解法和迭代解法两种。顾名思义,精确解法就是直接解出D向量的精确值。迭代法则用于复杂的方程组,在精确解难以求出或求解成本太高时,通过一次次迭代近似求解,逼近精确解,当达到可接受的精度时,迭代停止。
对于商用有限元软件,由于模型太大太复杂,一般都使用迭代求解。
本篇介绍适用于小型方程组且能够得到精确解答的情况,使用LDLT方法解刚度方程F=KD,并用C++实现。
(1)LDLT方法的原理
LDLT分解法是一种基本的线性方程组直接解法。其优势是可以节约内存空间和减少计算量,其公式推导的资料在网上有一大堆,有兴趣的同学可以自行查找。此处仅简要说明。
对于对称正定矩阵A(例如,刚度矩阵[K]),可以将A分解为A =LDLT.并且该分解是唯一的。其中L是单位下三角矩阵,D为对角线矩阵,且对角线元素不为零。其中各矩阵的形式为:
A=