对于工业软件研发尤其是CAE软件研发来说,线性方程组的求解精度和速度较为重要,在方程组规模上来以后,以Krylov子空间为基础的PCG,Bicgstab,Gmres等方法相对于直接法在求解效率和精度控制上有较大优势。这也是abaqus等商业软件在对于规模较大的模型时采用迭代法求解通常会比直接法求解更快的其中一个原因。
以自由度数为41w的如下分布的稀疏矩阵为例,
该稀疏矩阵形成的系数方程组在matlab中采用直接求解为1.5s,采用一定预处理下的PCG求解时间为0.55s。
用笔者自行开发的稀疏矩阵PCG求解器运行此算例,方程组求解时间为0.628s。
此时,整个程序的运行时间瓶颈实际上并不在方程求解,而在于从文件中读取稀疏矩阵对应的数据。一般情况下采用fscanf读取数据会快于用fstream读取。改用fscanf读取数据后,程序总运行时间从原来的16s变为9s。