假设我们有一个线性系统,我们对它的条件一无所知,也没有关于解决方案的初步信息。我们盲目地应用高斯消除并获得一些解。如果没有对矩阵进行彻底的初步分析,是否可以确定该解决方案是否值得信赖(即系统状况良好)?枢轴点的大小是否提供了可靠的信息?
一般来说,“即时”检测病态的主要准则是什么?
假设我们有一个线性系统,我们对它的条件一无所知,也没有关于解决方案的初步信息。我们盲目地应用高斯消除并获得一些解。如果没有对矩阵进行彻底的初步分析,是否可以确定该解决方案是否值得信赖(即系统状况良好)?枢轴点的大小是否提供了可靠的信息?
一般来说,“即时”检测病态的主要准则是什么?
什么时候矩阵病态?这取决于您正在寻找的解决方案的准确性,就像“美丽在旁观者的眼中”......
可能您的问题应该更好地重新表述,因为是否有基于分解的廉价且稳健的条件数估计器?
假设您对双精度算术中真正的一般(密集、非对称)问题感兴趣,我建议您使用 LAPACK 专家求解器DGESVX,它以倒数。作为奖励,您还有其他好处,例如方程平衡/平衡、迭代细化、前向和后向误差界限。顺便说一句,病理性病态条件 ( ) 由 表示为错误INFO>0
。
更详细地说,LAPACK 通过DGECON估计 1-范数(或 -范数,如果你正在解决)中的条件数。基本算法在第 36 章中描述:“用于条件估计的稳健三角求解”。
我必须承认我不是该领域的专家,但我的理念是:“如果它对 LAPACK 来说足够好,它就适合我”。
具有范数 1 矩阵和范数 1 的随机右手边的病态方程组的解很可能具有条件数阶的范数。因此,计算一些这样的解决方案会告诉你发生了什么。
几乎不可能仅从一个结果就判断您的系统是否处于病态。除非您对系统的行为有一定的预见性(即知道解决方案应该是什么),否则您对单一解决方案无能为力。
话虽如此,如果您解决多个具有相同系统,您可以获得更多信息。假设您有一个形式的系统。对于您对其调节没有先验知识的特定 A,您可以执行以下测试:
您可能需要求解多个具有不同右手边向量的线性系统,以便更好地指示系统是否为病态。当然,这个过程有点昂贵(假设您的直接求解器保存了它的因子,第一个解决方案的 )操作和每个后续解决方案的 \Theta(n^2) 操作)如果您的矩阵 A 相当小,这不是问题。如果它很大,您可能不想这样做。相反,您最好计算条件数在一个方便的规范中。