假设我们不知道矩阵明确但我们只能计算产品在哪里是一个列向量元素。有没有算法来判断是否是单数吗?
检查矩阵的奇异性
如果您可以计算产品和,正如您在评论中指定的那样,您可以运行基于 Lanczos 双对角化的经典稀疏 SVD 算法,例如scipy.sparse.linalg.svds
Matlab'ssvds
或 Julia's 。Arpack.svds
它们旨在计算奇异值,并且可能比手动编码的最小化程序更健壮。
然后距离(在欧几里得或 Frobenius 范数中)到最近的奇异矩阵恰好是最小的奇异值. 您将无法使用 IEEE 算法返回确切的是/否答案,因此这是您能做的最好的事情。
我还建议研究条件数估计器,它将(具有某种程度的 [不] 可靠性)预测矩阵在数值奇异上的有效性。
特别是,
- 基于 LSQR的“大稀疏矩阵的谱条件数估计”似乎是一个有趣的选择。
有一天引起了我的注意。我还建议查看本文中的参考资料,以了解该问题。
@Federico Poloni 的好答案表明不可能使用 IEEE 算法得到准确的是/否答案。
但是,使用带外舍入的区间算术,可能会得到“非单数/不知道”的答案。特别是,有可能明确得出最小奇异值严格大于零的结论。
请参阅已验证的奇异值边界,尤其是矩阵及其逆矩阵的谱范数,Siegfried M. Rump, BIT, 51(2):367384, 2011。
例如,可以使用MATLAB 下的INTLAB(由 Siegfried M. Rump 开发)来完成这种使用最小奇异值的向外舍入的区间算术计算。
结果将是:
- “非奇异”,即矩阵不是奇异的,因为它的最小奇异值肯定>0
或者
- “不知道”,即未明确确定矩阵是否奇异,因为未明确确定其最小奇异值是否=0
具有向外舍入的“标准”区间算术(包括 INTLAB)是使用双精度浮点算术完成的。但是,可以以更高的精度执行具有向外舍入的区间算术。这样做可能会为某些使用带外舍入的双精度区间算术“评估”为“不知道”的矩阵提供明确的“非奇异”结果。在具有向外舍入的无限精度区间算术的(不可实现的)限制中,可以明确地确定给定矩阵是否是奇异的。
这是我的 2 美分。我将设置以下最小化问题
如果的特征值为零,则将存在一个非零使得。所以,我会尝试计算 wrt的梯度,并使用梯度下降算法将推向零。如果你合理地接近零( 1e-12),那么矩阵是奇异的。的第一个变体可以计算为
您还需要避免的情况。从非零随机向量开始可能会有所帮助。
在这里,您需要计算与的乘积。鉴于您拥有的约束(您只能计算),我不确定这是否可能。也许专家可以回答。