伪逆矩阵
2015-11-18 08:29
218 查看
伪逆矩阵的定义
定义:令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,结果如下: InvA=(ATA)-1AT
% 直接求伪逆
InvA = inv(A'*A)*A';
② SVD求解
%% SVD分解求伪逆
% 原理和公式:1. SVD分解得到的矩阵:U和V是正交阵,S是对角阵
% 2. 正交阵的逆=转置
% 3. 对角阵的逆=非零元素求倒
% Step1: 求解A的SVD分解
[U,S,V] = svd(A); % A = U*S*V'
% Step2: 将S中的非零元素求倒
T=S;
T(find(S~=0)) = 1./S(find(S~=0));
% Step3: 求invA
svdInvA = V * T' * U';
③ QR求解
%% QR分解求伪逆
% 适用于稀疏矩阵
% 原理和公式:1. QR分解得到的矩阵:Q是正交阵,R是非奇异上三角阵
% 2. 正交阵的逆=转置
% 3. 上(下)三角矩阵的逆也仍然是上(下)三角矩阵。不必用高斯消去法,向前替换法解方程。
% 但是具体的我不知道怎么用程序来写,这里仍旧用了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
--------------------------------------------------------------------------
看到没Moore-Penrose伪逆满足(a)^+*a=xij当i=j时xij=1;否则为0。
相关文章推荐
- hadoop_cluser
- Android的核心包括几部分
- 选择排序
- Error:Execution failed for task ':app:processDebugResources'.
- Spring中将一个对象数据显示在前端的列表中
- cvc-complex-type.2.4.c 错误的修改
- python exp()
- 交换排序
- 常规功能和模块自定义系统 (cfcmms)—016模块字段的定义
- 可拖拽GridView代码解析
- Android Studio混淆打包配置
- 【笨木头Unity】入门之旅010(完结):Demo之四处找死(五)_UI
- 创业没有寒冬 心定方得始终
- [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验
- Android之Paint属性介绍
- 第11条:谨慎地覆盖clone
- 一位开发者的 Linux 容器之旅
- 百度校招小结:我做技术面试官的一些思考
- Extjs xtypes 常见示例
- hdu 4939 Stupid Tower Defense dp