我正在运行模拟,一些线性求解器正在返回病态矩阵的消息。
因此,在使用线性求解器之前,我正在寻找一种快速、易于实现的方法来检测矩阵是否病态。如果它是病态的,有什么好方法让它变得良好?
我正在运行模拟,一些线性求解器正在返回病态矩阵的消息。
因此,在使用线性求解器之前,我正在寻找一种快速、易于实现的方法来检测矩阵是否病态。如果它是病态的,有什么好方法让它变得良好?
要检测矩阵是否病态,您可以检查定义的条件数,矩阵
为:
对于范数 2,这等于奇异值的比率:
在数值上,还有其他方法可以估计。有关更多详细信息,请参阅 [1] 和 [2] 的第 15 章,您可以在其中找到不同语言的不同方法(Hager,来自 LINPACK,采样)的源代码。
威胁病态系统有两种主要方式:
预处理:使用这种技术,您可以获得一个在数学上与开始情况等效的系统,但条件数更好。这些方法取决于您拥有的矩阵的结构,但您可以查看例如 [3] 的迭代方法。
正则化:在这里您可以获得启动系统的近似值,这些方法也适用于不适定问题。该系列中的技术示例如下:
有关更多详细信息和参考资料,请参见示例 [4]。
[1] Higham,Nicholas J.,数值算法的准确性和稳定性。,宾夕法尼亚州费城:暹罗。xxx, 680 页。(2002 年)。ZBL1011.65010。
[2]网页矩阵条件数估计
[3] Saad, Yousef,稀疏线性系统的迭代方法。宾夕法尼亚州费城:SIAM 工业和应用数学学会。十八,528 页。(2003 年)。ZBL1031.65046。