在之前文章中提到了工程领域的模型数据和支付宝数据最大的区别就是:前者模型是一个整体,不可分割,这就导致模型计算难以分解,模型越大,计算时间越长。在硬件多核,网络分布式计算,GPU计算,软件OpenMP,OpenMPI等并行计算技术越来越成熟之后,这种矛盾就越来越突出。
模型降阶,简单讲就是在保证设定精度的前提下,简化模型,减少计算量。这种简单的思想很早就出现在工程领域的文献中,但其作为具有理论以及的较为系统的数学方法也就是近一二十年的事。
在多物理场仿真领域,最后都需要求解大规模线性方程组,自由度少则几十万,多则上千万,利用常规求解方法效率低下,而模型降阶的目的正是降低此类问题的计算复杂性,例如,在大规模动力系统和控制系统的仿真中,通过减少模型的关联状态空间尺寸或自由度,可以计算出与原始模型的近似值。再比如,在进行精确模型分析之前,用户只想对模型部分进行建模仿真,或只想了解大概数值范围和趋势,都可以通过模型降阶方法来减少模型计算时间。
模型降解的通常要求是:
1. 计算结果与原始模型相比,误差小或者在设定介绍范围内;
2. 保留原始模型的特点和特征;
3. 降阶后的模型计算要保证稳定性和有效性。
可以看出,广义上的模型降阶泛指简化减少模型计算。本文要讨论重点是求解大规模线性方程组的降阶方法。
在模型降阶中,最基础和最常用的就是Krylov子空间方法。Krylov全名Aleksey Nikolaevich Krylov,1863年出生于俄国,俄罗斯海军工程师,一生著有300多篇论文和书籍,涵盖了流体力学,造船,天文,测量,数学等领域。1931年Krylov提出了Krylov子空间和方法的论文,Krylov方法通常采用所构造的标准列正交向量基底对系统进行模型降阶,使得降阶系统的传递函数对于原始线性系统的传递函数,在其指定的区域内有很好的近似。Kylov子空间方法在数学理论上相当完善,其主要优点是算法稳定,能保持原始传递函数的特点,有时还能保持系统的基本特性。
对于线性方程组 A*x = B
其中A为 N*N的矩阵,N为大数
常规方法为 x=A的逆矩阵*B
很显然,直接求逆矩阵比较困难,尤其A是稀疏矩阵时
我们将 A的逆矩阵*B = m1*B + m2*A*B + m3*A*A*B
其中m1,m2,m3为未知的标量系数,可以看出A,B都是已知量,只要求解 m1,m2,m3就可以了
Krylov已经证明,当m个数=N时,其结果为精确解。
实际工程中,可以根据具体情况选择m的数量。
一些常用的Krylov子空间方法包括:
Arnoldi降阶算法
共轭梯度系列相关算法
最小余量系列相关算法
C正交Arnoldi算法
块Arnoldi算法
对称和非对称Lanczos降阶算法
多重Krylove子空间降阶
在算法工具方面,Matlab 仍然是首选。推荐两个基于Matlab的MOR算法工具:
MORLAB
https://www.mpi-magdeburg.mpg.de/projects/morlab
RBmatalb
https://www.morepas.org/software/
联系客服