使用直接方法时病态的症状是什么?

计算科学 线性求解器 条件数 调理
2021-11-24 00:22:07

假设我们有一个线性系统,我们对它的条件一无所知,也没有关于解决方案的初步信息。我们盲目地应用高斯消除并获得一些解x如果没有对矩阵进行彻底的初步分析,是否可以确定该解决方案是否值得信赖(即系统状况良好)枢轴点的大小是否提供了可靠的信息?

一般来说,“即时”检测病态的主要准则是什么?

3个回答

什么时候矩阵病态这取决于您正在寻找的解决方案的准确性,就像“美丽在旁观者的眼中”......

可能您的问题应该更好地重新表述,因为是否有基于LU分解的廉价且稳健的条件数估计器?

假设您对双精度算术中真正的一般(密集、非对称)问题感兴趣,我建议您使用 LAPACK 专家求解器DGESVX,它以倒数RCOND1/κ(A)作为奖励,您还有其他好处,例如方程平衡/平衡、迭代细化、前向和后向误差界限。顺便说一句,病理性病态条件 ( κ(A)>1/ϵ ) 由 表示为错误INFO>0

更详细地说,LAPACK 通过DGECON估计 1-范数(或 -范数,如果你正在解决)中的条件数基本算法在第 36 章中描述:“用于条件估计的稳健三角求解”ATx=b

我必须承认我不是该领域的专家,但我的理念是:“如果它对 LAPACK 来说足够好,它就适合我”。

具有范数 1 矩阵和范数 1 的随机右手边的病态方程组的解很可能具有条件数阶的范数。因此,计算一些这样的解决方案会告诉你发生了什么。

几乎不可能仅从一个结果就判断您的系统是否处于病态。除非您对系统的行为有一定的预见性(即知道解决方案应该是什么),否则您对单一解决方案无能为力。

话虽如此,如果您解决多个具有相同系统,您可以获得更多信息。假设您有一个形式的系统。对于您对其调节没有先验知识的特定 A,您可以执行以下测试: AAx=b

  1. 为特定的右手边向量求解 b 。 Ax=bb
  2. 扰动你的右手边向量,其中相比非常小 .bnew=b+ε||ϵ||||b||
  3. 求解Axnew=bnew
  4. 如果您的系统状况良好,那么您的新解决方案应该与旧解决方案相当接近(即应该很小)。如果您观察到新解决方案的显着变化(即很大),那么您的系统可能是病态的。 ||xxnew||||xxnew||

您可能需要求解多个具有不同右手边向量的线性系统,以便更好地指示系统是否为病态。当然,这个过程有点昂贵(假设您的直接求解器保存了它的因子,第一个解决方案的 )操作和每个后续解决方案的 \Theta(n^2) 操作)如果您的矩阵 A 相当小,这不是问题。如果它很大,您可能不想这样做。相反,您最好计算条件数在一个方便的规范中。Θ(n3)Θ(n2)||A||||A1||