【问题标题】:Should matrix entries inferior to machine precision be chopped to zero?是否应该将低于机器精度的矩阵条目切为零?
【发布时间】:2019-01-02 13:57:46
【问题描述】:

我有一个双精度复杂算术代码,可以形成大型稀疏矩阵(感谢 PETSc),以解决通常需要高精度的问题(例如,结果收敛到 7/8 位)

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

该矩阵包含由有限差分法的权重乘以所求解的不同物理方程的系数和度量项得到的元素。

如果一个矩阵条目的绝对值低于双精度机器精度,我将其丢弃并将其切为零。您是否认为这是一种理智的方法,或者至少是毫无意义的?一个原因是我们希望节省所有可能的兆字节内存。但有待商榷的是

  • “非常小的”条目可能会污染 LU 反演过程并使其在增加填充时变得不稳定。

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

我知道机器精度是一个不同于最小可表示正数的概念。因此,我的推理可能在概念上是错误的,并且希望得到您的意见或更正。 谢谢!

【问题讨论】:

  • 不是我本人(对此不太了解),但这可能会被否决或关闭,因为这似乎是一个见仁见智的问题,这在这里是题外话。
  • 绝对“机器 epsilon”通常不是使用的正确阈值。我们不知道矩阵中的重要值是否倾向于在 1、1e-20 或 1e20 左右,因此我们不知道它们与机器 epsilon 的关系。将阈值设置为围绕计算中重要值的大小乘以机器 epsilon 更为合适。 “周围”的含义取决于上下文。任何单个操作的最大误差为 ½ 个 epsilon,但多个操作的复合会产生更大的误差……
  • ... 如果您的 LU 反演在数值上不稳定,那么任何更改都是错误的。尽管如此,由于舍入错误而出现的任何小值都是有用的信息,是浮点算法可以产生的最佳信息。换句话说,它们不应该被认为是不可靠的。低信息比信息好。丢弃它们会丢弃信息,这可能会使计算结果远离正确答案,并且不稳定的过程会加剧错误。所以真正的问题是你的计算能否很好地容忍微小的变化,结果会不会……
  • ... 性能提升值得结果质量下降。这需要更多信息才能回答。
  • @EricPostpischil:考虑把它作为一个答案,即使这个问题可能是一个离题的话题。

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


【解决方案1】:

正如其他人已经建议的那样,这个问题的答案是“视情况而定”。但是,可以准确地说明答案取决于什么。

假设你要求解线性系统,

,

其中 A 和 b 是一个矩阵和一个适当维度的向量。现在,你求解扰动线性系统

,

扰动矩阵 E 满足这一点

.

如果,那么

,

其中 是在行和范数中测量的 A 的条件。

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

换句话说,如果您更改矩阵的条目,结果将更改为每行的总和扰动( 是行和范数)乘以矩阵条件的倍数。

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

当然,这个结果只适用于精确计算。然而,正如我们所看到的,为了允许对矩阵进行扰动,矩阵的条件数应该足够小。因此,在这种情况下,如果扰动很小,则被扰动矩阵的条件数也会很小,在这种情况下,LU分解没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2017-05-30
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多