我假设 pardiso 求解器在进入求解阶段之前计算(或估计)条件数。
有没有办法让 pardiso 输出条件号?
或者,最小和最大特征值当然也可以。
我还可以以矩阵市场格式输出矩阵并使用例如 scipy 进行计算,但这种操作对于大型矩阵来说是相当不愉快的。
我假设 pardiso 求解器在进入求解阶段之前计算(或估计)条件数。
有没有办法让 pardiso 输出条件号?
或者,最小和最大特征值当然也可以。
我还可以以矩阵市场格式输出矩阵并使用例如 scipy 进行计算,但这种操作对于大型矩阵来说是相当不愉快的。
计算矩阵的条件数是一项昂贵的操作(例如,涉及计算最大和最小幅度特征值,或求解多个(!)线性系统),因此默认情况下在调用线性求解器时这样做会非常浪费. 尝试求解系统更有意义,如果求解器因病态而崩溃,请捕获该错误并优雅地终止例程(并提供有用的错误消息警告病态)。此外,一些迭代求解器(最显着的是 GMRES)会产生对条件数的估计作为副产品。由于 PARDISO 是基于 LU 或 Cholesky 分解的并行直接求解器,因此不可用。
对于在不求解线性系统的情况下想知道条件数的极少数情况,存在专用例程。例如,LAPACK(捆绑在英特尔的 MKL 中)为密集矩阵提供了???con例程(参见https://software.intel.com/en-us/node/520910 )。估计(计算不可行)大型稀疏矩阵的条件数(基于用于计算近似特征值的 Krylov 方法)的例程也存在,但未捆绑在 MKL 中。如果这是您需要做的,您必须查看用于稀疏线性代数的专用包之一,例如 PETSc(请参阅如何使用 PETSc 估计大型稀疏矩阵的条件数?)或 Trilinos(查找IFPACK在文档中)。