论文部分内容阅读
计算机技术的发展推动了数值计算科学的发展,也推动了工程计算科学的进步。为了适应计算机高速度高容量的计算特点,新的计算理论和计算方法也大量涌现。传统的计算方法已经无法满足当今科学工程计算中出现的日益庞大且复杂的大规模线性方程组的计算要求,因此在计算技术和复杂工程计算问题双重推动下方程组的求解技术也随之发生变革。在电磁场有限元分析中,经常遇到求解大规模稀疏线性方程组的问题。面对大规模的稀疏线性方程组,直接法求解很难得到正确的解,为了克服这一困难迭代法被提出,迭代法主要有雅可比(Jacobi)迭代,高斯—赛德尔(Gauss-Seidel)迭代,超松弛(SOR)迭代。后来针对系数为正定对称矩阵的线性方程组提出了共轭梯度法,共轭梯度法是Krylov子空间迭代法中典型的一种方法。其优点是可以充分利用系数矩阵的稀疏性,收敛速度快、占用内存小等。但是Krylov子空间方法的收敛特性依赖于矩阵的频谱分布,如果在工程计算中遇到了频谱分布不均匀的矩阵那么Krylov子空间迭代法的收敛速度就会大大变慢,甚至不会收敛。为了应对这一问题,预处理思想被提了出来。预处理基本思想是对稀疏矩阵进行优化处理改善其条件数,也就是频谱分布,然后在进行迭代计算,这样就会得到理想的收敛速度和理想的解。预处理方法有多种,主要有稀疏近似逆预处理,对角尺度逆预处理,不完全LU预处理等。不完全LU预处理是通过高斯消元法将矩阵进行三角分解,丢掉部分元素而得到预条件子,这种预条件方法通用性强,已被广泛的应用到工程计算中去。线性方程组的计算,包括预处理等理论研究已经被广泛研究,其各种算法的性能也在Matlab环境下得到试验验证。在很多仿真软件中需要线性方程组的求解模块,文章针对电磁场有限元分析方中遇到的线性方程组问题,采用几种方法完成共轭梯度法C/C++程序模块,同时对ILU++进行了二次开发,实现了实数与复数线性方程组不完全预处理的迭代求解程序,并将文章完成的程序模块与商业软件GSS进行了性能比对,验证了文章完成的程序模块的可用性。