是否存在一个大的条件数变得“有问题”的一般阈值?

计算科学 条件数
2021-12-07 17:34:57

我认为在线性代数社区中答案可能是否定的,但我会在上面说任何话108而且你开始失去太多的精确度,使情况变得有问题。在他们使用 OLS 的一些统计设置中,我看到它表明即使值超过20是有问题的,但这似乎很极端。你们如何评估条件编号是否“有问题”?

1个回答

这个答案是我一起编译和编辑的评论。我为重复道歉。

我会考虑以上任何事情1/ϵmach有问题,因此它取决于浮点系统。但这也取决于线性系统的大小。您可以创建条件数为 O(1000) 的小型线性系统 (3x3),并且计算机找到的解决方案可能超出可接受的容差。一般来说,我告诉我的学生,如果他们使用双精度,危险区域从 1000 开始,如果超过,他们需要特别小心1/ϵmach.

我想指出,条件数与您使用的方法的稳定性没有太大关系。即使它是连接的,例如,如果您使用共轭梯度法,来自矩阵的误差也在 mat-vec 步骤。所以问题可能是由 mat-vec 操作的条件数而不是矩阵的条件数引起的。

正如 Federico Poloni 在评论中指出的那样,矩阵向量乘法问题的条件数从上面受矩阵的条件数限制A,例如AA1. 但是,我认为我们应该考虑更一般的 mat-vec条件数的界限:. 虽然我们可以立即将问题的条件数等于矩阵的条件数,但我通常看到它写为我相信这个想法是 mat-vec 和 msolve 是彼此的逆,如果其中一个是良条件的,另一个将是病态的,类似于乘法和除法(一些例外情况适用:都是条件良好的)。因此,对于具有高条件数 msolves 的矩阵,仍然可能是这样的情况AxAx/Axακ(A)α=(x/Ax)/(A1)1×xx/1(x/Ax)A1. 因此,mat-vec 操作的条件数可能远低于矩阵的条件数。作为一个极端的例子,如果是奇异仍然有意义并且可能是良条件的,但是是一个不适定问题。AAxκ(A)=A1x

因此,如果算法的基本步骤存在与输入错误相关的问题,直接方法和 CG 都会遇到类似的问题。但这与传统观点不同,即病态问题很难独立于您使用的算法的稳定性来解决。

请注意,我对的任意选择对我来说基本上是一种启发式方法,根据我的经验,这正是事情开始破裂的地方。例如,相对幅度对矩阵(或右侧向量)的小扰动可能会导致高达,即使您假设您有一个完美的算法,它不会引入和传播错误并且不受浮点运算的影响。而且我的误差容限通常在级别,在双精度下接近 :)1/ϵmachϵmachϵmach108ϵmach