病态无矩阵与基于矩阵的运算符之间的准确性

计算科学 数值分析 矩阵 精确 准确性 运算符拆分
2021-12-29 11:58:21

据我所知,随着矩阵条件数的增加,精度误差会变大。

考虑一个基于矩阵的运算符:

A=k

和一个无矩阵运算符:

A~=B1+B2+B3,Bi=xikxi

无矩阵算子和基于矩阵的算子之间的一个区别是A结合所有 3 个方向的导数,而无矩阵算子必须每次都添加所有 3 个方向的对角线。

我尝试在数值上比较这两种方法,我发现它们之间的差异在于机器精度的顺序。似乎运营商之间的差异也在增加k很大。

以下是我的问题:

1)我只是在可视化当地条件编号吗?k大吗?

2)这些方法中的一种是否更好,因为差异变大了?或者这只是由于条件数的增加而变得更加明显缺乏精度?

3)我完全错了吗?(这不应该发生)

2个回答

求解线性系统时Ax=b,您会遇到两个错误来源:

  • 舍入误差
  • 矩阵的病态。

出于所有实际目的,矩阵的计算表示的条件数等于精确矩阵的条件数(您无法通过计算方式表示),因此无论您是否将其表示为拆分矩阵 -自由形式,与否。

同样,是否将三个矩阵加在一起对矩阵的计算表示与“精确”矩阵之间的差异没有任何影响。也就是说,因为对于所有实际目的,添加 3 项与计算这些项中的每一项一样准确——实际上,3 次舍入等于舍入,即非常小。

换句话说,您的矩阵的两种表示形式之间没有实际差异,除非您的条件数在四舍五入水平上的数量级上。希望不是这样。

您的“两种方法”实际上是一回事。您已经知道它们在数学上是相同的。但它们在计算上也是一样的,除了操作顺序可能发生变化。操作顺序的更改将导致机器 epsilon 的顺序错误。

在以下意义上,您对条件编号是正确的。作为k增加,舍入误差的影响按比例放大。因此,如果k远大于您的运算符所应用的数量,您会注意到更多的舍入误差。