解决稀疏且病态严重的系统


9

我打算解决Ax = b的问题,其中A是复杂,稀疏,不对称且病态严重(条件号〜1E + 20)的方形或矩形矩阵。我已经能够使用LAPACK中的ZGELSS准确地解决该系统。但是随着我系统中自由度的增加,由于没有利用稀疏性,因此在使用ZGELSS的PC上解决该系统需要花费很长时间。最近,我在同一系统上尝试了SuperLU(使用Harwell-Boeing存储器),但是对于条件编号> 1E + 12,结果不准确(我不确定这是否是旋转的数值问题)。

我更倾向于使用已经开发的求解器。是否有一个强大的求解器可以解决我提到的系统(即利用稀疏性)并且可靠地(根据条件数)求解?


1
您可以先决条件吗?如果是这样,那么Krylov子空间方法可能是有效的。即使您坚持使用直接方法,预处理也将有助于控制数值误差。
Geoff Oxberry

1
我在预处理方面也取得了很好的经验,方法大致如下文所述:en.wikipedia.org/wiki/…您可以使用精确的算术进行预处理。但是,我的矩阵都是密集的,因此无法在此处指出更具体的方法/例程。
AlexE

11
为什么条件数这么大?也许可以改进配方以使系统更好地适应环境?通常,您不能期望能够比以下方法更准确地评估残差机器精度条件编号,一旦位用完,这会使Krylov失去多少价值。如果条件编号是真的1020,则应使用四精度(__float128带有GCC,并由包括PETSc在内的一些软件包支持)。
杰德·布朗

2
您从何处获得此条件编号估算值?如果您要求Matlab估计具有零空间的矩阵的条件数,则它可能会赋予您无穷大,有时可能会给您一个非常大的数字(如您所拥有的)。如果您正在查看的系统的空间为空,并且知道它是什么,则可以对其进行投影,然后剩下的条件编号可能会更好。然后,您可以使用PETSc或Trilinos或您拥有的东西。
Daniel Shapero

3
Daniel- ZGELSS使用的截断SVD方法确定了空空间(与SVD中的微小奇异值相关的奇异向量是N(A)的基础),并找到了最小二乘解 一个X-b超过。pË[Rpñ一个
Brian Borchers 2013年

Answers:


13

当您使用ZGELSS解决此问题时,您在使用截断的奇异值分解来规范化此病态极端的问题。重要的是要了解,该库例程并非试图找到最小二乘解,而是试图平衡找到最小化的解反对最小化。 一个X=bX一个X-b

请注意,传递给ZGELSS的参数RCOND可用于指定应将哪些奇异值包括在解决方案的计算中,并将其排除在计算之外。任何小于RCOND * S(1)的奇异值(S(1)是最大奇异值)将被忽略。您尚未告诉我们如何在ZGELSS中设置RCOND参数,并且我们对矩阵或右侧系数的噪声水平一无所知,因此很难说您是否使用过适当数量的正则化。 一个b

您似乎确实对使用ZGELSS获得的正则化解感到满意,因此看起来正则化受截断SVD方法的影响(该方法在最小化最小二乘解中找到了最小解在奇异向量所跨越的解空间上的与大于RCOND * S(1)的奇异值相关联,对您来说是令人满意的。 X一个X-b

您的问题可以重新表述为“对于这个大的,稀疏的,病态严重的线性最小二乘问题,我如何有效地获得正则化最小二乘解?”

我的建议是使用迭代方法(例如CGLS或LSQR)来最小化显式正则化最小二乘问题

一个X-b2+α2X2

调整了正则化参数,以便对阻尼最小二乘问题进行良好的处理,使您对由此产生的正则化解感到满意。 α


我很抱歉没有一开始就提到这一点。解决的问题是使用有限元法的声学亥姆霍兹方程。由于用于近似解的平面波基础,系统的条件差。
user1234 2013年

和的系数从哪里来?它们是测量数据吗?是某个对象设计中的“精确”值(实际上不能加工为15位公差...)?一个b
Brian Borchers

1
的矩阵A和B使用亥姆霍兹PDE的弱形式形成,参见:asadl.org/jasa/resource/1/jasman/v119/i3/...
user1234

9

杰德·布朗(Jed Brown)已经在问题的注释中指出了这一点,但是如果条件数很大,您实际上不能以通常的双精度执行很多操作:在大多数情况下,您可能无法获得精确的一位数。您的解决方案,更糟糕的是,您甚至无法分辨,因为您无法准确评估与解决方案向量相对应的残差。换句话说:这不是您应该选择哪个线性求解器的问题-线性求解器无法对此类矩阵做有用的事情。

发生这种情况通常是因为您选择了不合适的依据。例如,如果您选择函数,则会得到病态矩阵1个XX2X3作为Galerkin方法的基础。(这导致Hilbert矩阵的条件非常差。)在这种情况下,解决方案不是询问哪个求解器可以求解线性系统,而是询问是否存在可以使用的较好的底数。我鼓励您做同样的事情:考虑重新制定问题,以免最终遇到这类矩阵。


当离散PDE的不适定问题时,例如反向热方程,肯定会以病态矩阵方程结束。情况并非如此,我们可以通过重新公式化公式或选择有效的矩阵求解器或提高浮点数的精度来求解。在这种情况下[即声学逆问题],需要一种正则化方法。
tqviet

7

解决病态问题的最简单/最快方法是提高计算精度(通过蛮力)。另一种(但并非总是可能的)方法是重新制定您的问题。

您可能需要使用四倍精度(34个十进制数字)。即使一个过程中丢失20位数字(由于条件编号),您仍将获得14位正确的数字。

如果有兴趣,MATLAB 现在也提供四精度稀疏求解器

(我是上述工具箱的作者)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.