给定一个奇异矩阵, 找到单个非零解的最快方法是什么?
请注意,我们不是在寻找整个内核,我们只想要其中的任何非零向量。我知道我们可以使用 SVD 来查找特征向量,但这似乎太复杂了。
给定一个奇异矩阵, 找到单个非零解的最快方法是什么?
请注意,我们不是在寻找整个内核,我们只想要其中的任何非零向量。我知道我们可以使用 SVD 来查找特征向量,但这似乎太复杂了。
如果已知所有特征值都是正的,那么形式的数值蛮力迭代方法
在哪里等于在哪里是的主要特征值可以使用。更一般地表达这一点
在哪里代表迭代。
信封计算的背面显示了它是如何工作的。考虑特征值分解,
将这个等式代入上面的一个导致
.
什么时候是一个非零特征向量,那么前置因子小于 1 并且对于 q 在范围内归零为接近无穷大。前置因子然而,对于零空间,计算结果为 1,并且不会随着迭代而减少。请注意,不能保证收敛到单个特征向量,因为零空间可能是退化的。
但正如评论中提到的,空空间包在引擎盖下使用 SVD。
你说最快的方法,我假设你的意思是计算操作,而不是代码运行时间——不确定我描述的算法是否有优化的例程。
您可以将行缩减(高斯消除)与旋转一起使用。请参阅 Strang 的线性代数教科书(第 3 版第 3.2 节)或Gaussian Elimination。它会失败,因为你的矩阵是奇异的。继续这样做,您将能够通过向后替换来求解 x。
例子:
2 2 3
2 2 1
1 1 5
从第二行减去第一行的 1.0 倍,从第三行减去 0.5 后:
1 1 1.5
0 0 -2
0 0 3.5
即使进行行交换,也无法在第 2 行、第 2 列中获得 1,因此您完成了。反向替换的解决方案是 x=[-1 1 0]。
您可以在 MATLAB 中使用 null(A) 或 A\b 解决此问题,但您是对的,这比需要的计算量要多得多。