如何使用PETSc估算大型稀疏矩阵的条件数?


Answers:


11

对于小矩阵,条件数可以使用奇异值分解可靠地计算。KSPSolve()对矩阵进行a 运算并使用-pc_type svd -pc_svd_monitor

对于较大的矩阵,可以使用Krylov方法估计条件数。例如,由GMRES执行的Arnoldi迭代增量计算Hessenberg分解。Hessenberg矩阵的极值奇异值和特征值与原始矩阵的极好的奇异值和特征值非常接近。要使PETSc以这种方式估算特征值,请运行

-ksp_monitor_singular_value -ksp_type gmres -ksp_gmres_restart 1000 -pc_type none

这些选项可以估计每次Krylov迭代的极值奇异值。GMRES用于重新启动时计算Krylov空间(您也可以使用CG)。在重新启动时,GMRES会丢弃当前的Krylov空间,因此所有关于奇异值估计的过程都会在重新启动时丢失。最后一个选项-pc_type none说要在未预处理的矩阵上执行此迭代。默认情况下,将使用预处理运算符(A P 1),因此最终将获得对预处理运算符的估计。P-1个一种一种P-1个

这对于最大的奇异值通常将是准确的,但是除非方法收敛,否则可能会高估最小的奇异值。如果您有矩阵的求解器(例如使用KSPSolve()),则可以使用与A 1相同的过程来估计的最小奇异值。一种一种-1个

如果您需要更精确地估计最小奇异值(以及所有其他特征值和奇异值问题),请使用SLEPc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.