在浮点中比较向量的正确方法是什么?

计算科学 浮点
2021-11-28 11:35:39

我知道我应该使用容差来比较浮点数。但是为了比较向量,我可以想到对应于不同距离度量的 3 种可能的解决方案:

  1. 分别比较每个向量的分量:如果所有 3 个向量都在容差范围内,则向量相等。此选项的行为类似于uniform norm,给出一个容差立方体。
  2. 将所有绝对差的总和与某个容差进行比较。这将表现得像出租车规范,给出一个单一的容忍。
  3. 计算 (vecA - vecB) 的欧几里得长度,看看它是否在公差范围内。这将给出具有公差范围的标准欧几里得范数。

但我主要关心的是数值稳定性。欧几里得范数“感觉像是”最好的选择,但我担心所有的计算都会导致更多的舍入误差。在较小程度上,选项 2 也可能引入错误。(例如,如果向量的x分量远大于yz,则将所有差异加在一起可能会淹没yz的任何贡献。)所以我目前倾向于选项 1。

任何人都可以权衡这个问题的权威吗?

1个回答

这个问题的答案很大程度上取决于您的应用程序。与其为确切的数字实现而烦恼,不如多考虑您建议的每个潜在实施例的含义。例如,一个或多个计算距离是否有物理解释?矢量分量的单位和比例是否相同?

在所有参数具有相同单位和不同值尺度的情况下,您应该更多地考虑对系统进行标注的最佳方法。 无量纲化有助于赶走邪恶的数值精度侏儒。

当您使用 x、y 和 z 作为值名称时,我怀疑您正在查看空间中的某种位置。这两个范数具有具有连续导数的明显优势,因此缺乏任何真正的问题信息,我可能会从那里开始。