检查矩阵的奇异性

计算科学 线性代数 矩阵
2021-12-18 07:10:38

假设我们不知道n×n矩阵A明确但我们只能计算产品Ax在哪里x是一个列向量n元素。有没有算法来判断是否A是单数吗?

4个回答

如果您可以计算产品AAT,正如您在评论中指定的那样,您可以运行基于 Lanczos 双对角化的经典稀疏 SVD 算法,例如scipy.sparse.linalg.svdsMatlab'ssvds或 Julia's 。Arpack.svds它们旨在计算奇异值,并且可能比手动编码的最小化程序更健壮。

然后距离(在欧几里得或 Frobenius 范数中)A到最近的奇异矩阵恰好是最小的奇异值σmin. 您将无法使用 IEEE 算法返回确切的是/否答案,因此这是您能做的最好的事情。

我还建议研究条件数估计器,它将(具有某种程度的 [不] 可靠性)预测矩阵在数值奇异上的有效性。

特别是,

有一天引起了我的注意。我还建议查看本文中的参考资料,以了解该问题。

@Federico Poloni 的好答案表明不可能使用 IEEE 算法得到准确的是/否答案。

但是,使用带外舍入的区间算术,可能会得到“非单数/不知道”的答案。特别是,有可能明确得出最小奇异值严格大于零的结论。

请参阅已验证的奇异值边界,尤其是矩阵及其逆矩阵的谱范数,Siegfried M. Rump, BIT, 51(2):367384, 2011

例如,可以使用MATLAB 下的INTLAB(由 Siegfried M. Rump 开发)来完成这种使用最小奇异值的向外舍入的区间算术计算。

结果将是:

  1. “非奇异”,即矩阵不是奇异的,因为它的最小奇异值肯定>0

或者

  1. “不知道”,即未明确确定矩阵是否奇异,因为未明确确定其最小奇异值是否=0

具有向外舍入的“标准”区间算术(包括 INTLAB)是使用双精度浮点算术完成的。但是,可以以更高的精度执行具有向外舍入的区间算术。这样做可能会为某些使用带外舍入的双精度区间算术“评估”为“不知道”的矩阵提供明确的“非奇异”结果。在具有向外舍入的无限精度区间算术的(不可实现的)限制中,可以明确地确定给定矩阵是否是奇异的。

这是我的 2 美分。我将设置以下最小化问题

π(x)=12(Ax)T(Ax)

如果的特征值为零,则将存在一个非零使得所以,我会尝试计算 wrt的梯度,并使用梯度下降算法将推向零。如果你合理地接近零( 1e-12),那么矩阵是奇异的。的第一个变体可以计算为Axπ(x)=0πxπππ

δπ=xTATAδx=(Ax)TAδx=gTδx,
其中是梯度。所以gg
g=ATAx

您还需要避免的情况。从非零随机向量开始可能会有所帮助。x=0

在这里,您需要计算的乘积。鉴于您拥有的约束(您只能计算),我不确定这是否可能。也许专家可以回答。ATAxAx