应将劣于机器精度的矩阵项切成零?

时间:2018-07-25 16:55:33

标签: floating-point precision numerical scientific-computing discretization

我有一个使用双精度复数算法的代码,该代码形成大而稀疏的矩阵(这要归功于PETSc),以便解决通常需要高精度的流体力学稳定性问题(结果收敛到7/8位)

通过并行LU分解求解所得线性系统Ax = b。我的目标是解决大型3D问题,以使矩阵的领先维度可以达到数千万。

矩阵包含有限差分法的权重乘以所求解的不同物理方程式(流量,雷诺数...)和度量项的系数所得的元素。

如果一个矩阵项的绝对值低于双精度机器精度,则将其丢弃并将其切零。您会认为这是一种理智的方法,或者至少是毫无意义的吗?原因之一是我们要保存所有可能的兆字节内存。但是有争议的是

  • “很小”的条目可能会污染LU倒置过程,并在增加填充量时使其变得不稳定。

  • 如果在该过程中使用接近机器精度的矩阵条目,那么我认为涉及这些条目的任何算术运算的结果都可以视为“不可靠”吗?如果是,我不知道为什么要保留它们。

我知道机器精度是与最小可表示正数不同的概念。因此,我的推理可能在概念上是错误的,并且很乐意听取您的意见或更正。 谢谢!

1 个答案:

答案 0 :(得分:0)

这个问题的答案是“取决于情况”,正如其他人已经暗示的那样。但是,可以准确说明答案的依据。

假设您要求解线性系统,

Ax = b

其中A和b是矩阵和适当尺寸的向量。现在,您解决​​了扰动的线性系统

(A + E)\hat x = b

摄动矩阵E满足该条件

\| E \|_\infty \le \alpha \| A \|_\infty

如果\alpha \kappa_\infty(A) \le \tfrac12,则

\frac{\| x - \hat x \|_\infty}{\| x \|_\infty} \le 4 \alpha\,\kappa_\infty(A)

其中http://latex.codecogs.com/png.latex?%5Ckappa_%5Cinfty%28A%29是在行和范数中测得的A的条件。

(例如,可以在Golub,van Loan 矩阵计算第3章中找到此结果。)

换句话说,如果更改矩阵的项,则结果将通过每行的总扰动(\| \cdot \|_\infty是行和范数)乘以矩阵条件的倍数而变化。

因此,如果在乘以矩阵条件后,相对于A 的行和范数,每行的总扰动仍然很小,则允许矩阵的扰动。

当然,此结果仅适用于精确计算。但是,如我们所见,为了允许扰动矩阵,矩阵的条件数应足够小。因此,在这种情况下,如果干扰很小,则被干扰矩阵的条件数也将很小,并且在这种情况下,LU分解不会带来任何问题。