一种快速检查矩阵是否病态并将其转换为条件良好的方法

计算科学 线性代数 线性求解器
2021-12-18 07:48:37

我正在运行模拟,一些线性求解器正在返回病态矩阵的消息。

因此,在使用线性求解器之前,我正在寻找一种快速、易于实现的方法来检测矩阵是否病态。如果它是病态的,有什么好方法让它变得良好?

1个回答

要检测矩阵是否病态,您可以检查定义的条件数,矩阵 为: A

k(A)=||A||||A1||

对于范数 2,这等于奇异值的比率:

k(A)=σmax(A)σmin(A)

在数值上,还有其他方法可以估计有关更多详细信息,请参阅 [1] 和 [2] 的第 15 章,您可以在其中找到不同语言的不同方法(Hager,来自 LINPACK,采样)的源代码。k(A)

威胁病态系统有两种主要方式:

预处理:使用这种技术,您可以获得一个在数学上与开始情况等效的系统,但条件数更好。这些方法取决于您拥有的矩阵的结构,但您可以查看例如 [3] 的迭代方法。

正则化:在这里您可以获得启动系统的近似值,这些方法也适用于不适定问题。该系列中的技​​术示例如下:

有关更多详细信息和参考资料,请参见示例 [4]。


[1] Higham,Nicholas J.数值算法的准确性和稳定性。,宾夕法尼亚州费城:暹罗。xxx, 680 页。(2002 年)。ZBL1011.65010

[2]网页矩阵条件数估计

[3] Saad, Yousef,稀疏线性系统的迭代方法。宾夕法尼亚州费城:SIAM​​ 工业和应用数学学会。十八,528 页。(2003 年)。ZBL1031.65046

[4]基于 KRYLOV 子空间方法的病态线性系统正则化技术