【矩阵原理】伪逆矩阵(pseudo-inverse)

本文详细介绍了矩阵的伪逆,包括其定义、Moore-Penrose条件,以及通过直接求解、SVD分解和QR分解三种方法进行计算。伪逆矩阵在信号检测与干扰消除等场景中有广泛应用。示例中展示了如何使用伪逆矩阵进行信号处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

伪逆矩阵的介绍&定义

矩阵的逆&伪逆

在这里插入图片描述
上图中的右逆矩阵根据维度可知,有所问题,可参考下图矩阵的伪逆推导及其结果。

矩阵的伪逆推导

在这里插入图片描述

定义:令A是任意mXn矩阵,称矩阵G是A的广义逆矩阵,若G满足下述条件(Moore-penrose条件):
(1)GAG = G;
(2)AGA = A;
(3)AG为hermitian矩阵,即(AG)^H=AG;
(4)GA为hermitian矩阵,即(GA)^H=GA;

伪逆矩阵的求法

直接求解:

求导,令导数为0,结果如下: I n v A = ( A T A ) − 1 A T InvA=(A^TA)^{-1}A^T InvA=(ATA)1AT

%直接求伪逆
InvA = inv(A’*A)*A’;

SVD求解

  • SVD分解求伪逆
    • 原理和公式:
      • SVD分解得到的矩阵:U和V是正交阵,S是对角阵
      • 正交阵的逆=转置
      • 对角阵的逆=非零元素求倒
    • Step1: 求解A的SVD分解
      • [U,S,V] = svd(A); % A = USV’
    • Step2: 将S中的非零元素求倒
      • T=S;
      • T(find(S~=0)) = 1./S(find(S~=0));
    • Step3: 求invA
      • svdInvA = V * T’ * U’;

QR求解

  • QR分解求伪逆,适用于稀疏矩阵
    • 原理:
      • QR分解得到的矩阵:Q是正交阵,R是非奇异上三角阵
      • 正交阵的逆=转置
      • 上(下)三角矩阵的逆也仍然是上(下)三角矩阵。
      • 不必用高斯消去法,向前替换法解方程。
      • 但是具体的我不知道怎么用程序来写,这里仍旧用了matlab的函数。
    • 公式:
      • [Q,R] = qr(A);
      • InvR = inv(R’*R)*R’;
      • qrInvA =InvR*Q’;

伪逆矩阵的应用

(1)信号的检测干扰消除

a=floor(10*rand(4,3))
a =
7 4 2
7 6 6
1 7 6
4 7 1


b=inv(a’*a)*a’
b =
0.1018 0.0650 -0.0959 -0.0180
-0.0263 -0.0767 0.0578 0.1658
-0.0296 0.1149 0.0903 -0.1719


b*a
ans =
1.0000 -0.0000 0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000


伪逆矩阵在维基百科中的详细介绍

在这里插入图片描述

参考链接

伪逆矩阵
伪逆矩阵(广义逆矩阵)

### 如何在 MATLAB 中计算矩阵的伪逆 对于给定的一个矩阵 \( A \),如果该矩阵不是方阵或是奇异矩阵,则无法通过传统的方式求得其逆矩阵。这时可以采用 Moore-Penrose 伪逆作为替代方案,在 MATLAB 中可以通过 `pinv` 函数轻松实现这一功能[^4]。 #### 使用 pinv 函数计算伪逆 MATLAB 提供了一个内置函数 `pinv()` 来直接获取矩阵的伪逆,此方法简单易用: ```matlab % 定义一个 m×n 的矩阵 A (m ≠ n 或者 det(A)=0) A = rand(m,n); % 这里仅作示意,实际应替换为具体数值 % 调用 pinv 函数获得 A 的伪逆 B B = pinv(A); ``` 上述代码片段展示了如何定义任意大小的矩形随机矩阵并调用 `pinv` 函数得到它的伪逆矩阵。需要注意的是,当输入参数是一个接近奇异或秩亏缺的矩阵时,还可以指定第二个可选参数 tol 控制截断阈值以提高稳定性: ```matlab tolerance = max(size(A)) * norm(A) * eps; B = pinv(A, tolerance); ``` 这里设置了一个合理的默认容忍度用于判断哪些较小特征值应该被忽略掉从而不影响最终的结果精度。 除了利用现成的库函数外,也可以基于 SVD 分解手动构建伪逆过程,这有助于理解背后的原理并且可能适用于某些特殊场景下的优化需求[^3]: ```matlab [U,S,V] = svd(A,'econ'); % 经济型奇异值分解 S_inv = diag(1./diag(S)); % 对角线元素取倒数形成新的对角矩阵 B_manual = V*S_inv*U'; % 构建伪逆矩阵 ``` 这段程序先执行经济版单值分解(即只保留必要的部分),接着针对非零奇异值得到它们对应的倒数构成一个新的对角矩阵,最后按照公式组合起来完成整个操作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值