为什么使用 svd() 反转矩阵?

信息处理 矩阵 svd 矩阵分解
2022-01-31 00:08:56

在 MATLAB 中,我使用 inverse()、svd() 和 chol() 比较了对 Hermitian 矩阵求逆所用的时间。svd() 花费的时间最长。那么有什么理由比其他两种方法更喜欢 svd() 吗?

1个回答

这两种方法的不同之处首先在于它们对矩阵类的适用性。

col(cholesky) 将Hermitian 正定矩形矩阵分解为下三角矩阵及其共轭转置的乘积;

svd(奇异值分解)将任何 m×n 矩阵分解为UΣV *的形式,其中UV是平方实数或复酉矩阵,分别为 m×m 和 n×n,而Σ是一个 m×n 矩形对角矩阵,其中对角线上的非负实数。

该方法inv在内部执行输入矩阵的 LU 分解(如果输入矩阵是 Hermitian,则执行 LDL 分解),但仅输出方阵的逆矩阵

只要矩阵满足所用方法的要求,SVD 和 Cholesky 都可以用于计算矩阵的伪逆。伪逆运算用于解决线性最小二乘问题以及其他信号处理、图像处理和大数据问题。

更新OP 的评论

该矩阵既可以是 Hermitian 矩阵,也可以不是正/负(半)定矩阵,在这种情况下,它被称为 Hermitian 不定矩阵。(广义)Cholesky 分解 Hermitian 半正定矩阵。您还可以分解一个(半)定矩阵,例如A negdef,只需调用chol())-A negdef 但由于不可避免的负数平方根,您无法使用 Cholesky 计算不定矩阵的逆矩阵。

秩亏矩阵(奇异值为零)是不可逆的,就像大多数一般情况矩阵一样。也就是说,对于秩亏矩阵,不存在矩阵A -1使得A -1 A = AA -1 = I 。尽管如此,您通过矩阵求逆解决的许多问题都可以通过矩阵求逆的推广、矩阵的伪逆来解决不定(因此是不可逆的)矩阵。

我不会对Moore-Penrose 伪逆概念的描述感到厌烦,关于这个主题的许多文章在网上和教科书中都很容易找到:简而言之,矩阵A +是矩阵 A 的如果AA + A = A (因此,A + AA + = A + )。如果A具有线性独立的列,则伪逆是左逆,因为在这种情况下A + A = I,您可以使用为此目的构建的样本低维矩阵来检查它。如果A具有线性独立的行,伪逆是右逆,因为在这种情况下AA + = I在一般情况下,A可能没有左/右逆,但仍有伪逆A +满足方程AA + A = A

回到二次规划问题:下面,所有矩阵和向量都是实值的,所以这里不是 Hermitian 共轭 H,而是矩阵转置 T。对于可逆(在“经典”意义上)矩阵A,二次形式 x opt = A -1 b处的最小值

f(x)=12xTAxxTb
f(xopt)=12bTA-1b

要计算A的倒数,请在此处使用函数chol()

您可以解决具有不可逆矩阵A的二次型的最小化问题,前提是A是半正定的,即使A在这种情况下没有逆矩阵。对于奇异矩阵A,最小值是 对于给定 的所有x x nx的维度,rA的秩。

f(xopt)=12bTA+b
x=A+b+UT(0z),zRn-r

此解中的矩阵U是A = UΣV T的奇异值分解因子,您可以使用函数 计算svd()因此,当唯一重要的是计算时间(FLOPS)时,也许并非所有“中间产品,无论它们是三角矩阵、特征向量、对角矩阵等,都是无关紧要的”?

在这些示例中,所有矩阵和向量都是实值的,我不确定这个示例是否可以轻松应用于您的波束成形问题。尽管如此,SVD 在信号处理中肯定很有用,例如,请参阅Image Reconstruction using SVD

为了完整起见: 1) 存在用于计算半正定矩阵的 Cholesky 分解的推广,并且可以借助Greville 算法计算伪逆。但是这个算法是通过对矩阵列的递归来实现的,Cholesky速度可以通过这个递归来抵消;2)“稳定性问题”通过低密度脂蛋白分解来解决。

无论如何,对于那些从事信号处理的人来说,这些代数技术并不是“太多信息”:如果,即使没有对矩阵的正定性进行初步分析,你开始使用一个chol()函数进行计算,结果发现你变得很奇怪结果,您现在知道可能是罪魁祸首。