首页 > 其他分享 >线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现

线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现

时间:2023-11-11 12:12:42浏览次数:39  
标签:Moore Penrose 代码 矩阵 times mathrm


背景 - Moore-Penrose 伪逆矩阵:

  • 对任意矩阵 \(A\in\mathbb C^{m\times n}\) ,其 Moore-Penrose 逆矩阵 \(A^+\in\mathbb C^{n\times m}\) 存在且唯一。
    • 定义:若矩阵 G 满足 \(AGA=A,~ GAG=G,~ (AG)^H=AG,~ (GA)^H=GA\) ,则 G 是 Moore-Penrose 逆矩阵,可以记作 \(A^+\) 。
    • 性质:\(A^+\) 满足 \(A^{++}=A,~ A^{H+}=A^{+H},\) \(\mathrm{rank}(A^+)=\mathrm{rank}(A),\) \(\mathrm{Range/Null}(A^+)=\mathrm{Range/Null}(A^H)\) 。
  • \(A^+\) 求解方法 1(迹方法):
    • 令 \(A_{m\times n}\) 的秩为 r。
    • 计算 \(B=A^TA\) 。
    • 令 \(C_1=I_{n\times n}\) 。
    • for i = 2 to r-1,计算 \(C_{i+1}=(1/i)\mathrm{tr}(C_iB)I-C_iB\) 。
    • 得到 \(A^+=\frac{r}{\mathrm{tr}(C_rB)}C^rA^T\) 。
  • \(A^+\) 求解方法 2(满秩分解法):
    • 若 A=FG 是满秩分解,则 \(A^+=G^H(F^HAG^H)^{-1}F^H\) 。

代码 0(matlab 内置函数):直接使用 pinv() 函数。

代码 1(满秩分解法):(fullrank_decompose 代码见 代码存档

function [B] = moore_penrose_pinv(A)
% using full rank decomposition

[m,n] = size(A);

[F,G] = fullrank_decompose(A);
B = G'*(F'*A*G')^(-1)*F';

end

代码 2(迹方法):

function [X] = moore_penrose_pinv2(A)
% using trace method

[m,n] = size(A);
r = rank(A);

B = A'*A;
C = eye(n);
for i = 1:r-1
    C = 1/i*trace(C*B)*eye(n)-C*B;
end

X = r/trace(C*B)*C*(A');

end

测试代码:

A = [7 12 7 6 9
17 32 18 15 14
14 20 12 14 16
15 16 11 14 18];

B = moore_penrose_pinv2(A)

计算结果:

octave:5> source("my_script.m")
B =

  -0.175926   0.212037  -0.619907   0.474074
   0.112434  -0.043783   0.226257  -0.223280
   0.041005   0.120503  -0.391601   0.233862
  -0.400794  -0.100397   0.627579  -0.279365
   0.333333  -0.133333   0.066667  -0.066667


octave:6> source("my_script.m")
B2 =

  -0.175926   0.212037  -0.619907   0.474074
   0.112434  -0.043783   0.226257  -0.223280
   0.041005   0.120503  -0.391601   0.233862
  -0.400794  -0.100397   0.627579  -0.279365
   0.333333  -0.133333   0.066667  -0.066667

两份代码的计算结果一致,代码正确。



标签:Moore,Penrose,代码,矩阵,times,mathrm
From: https://www.cnblogs.com/moonout/p/17825741.html

相关文章

  • MATLAB对矩阵按照某一列排序
    转载:matlab对矩阵按照某一列排序_matlab对矩阵按列升序排列-CSDN博客升序排列:命令:data=[1,2,3;7,8,9;4,5,6];a1=sortrows(data,1);%按照第一列排序(升序),其他列与排序结果一一对应。a2=sortrows(data,2);%按照第二列排序(升序),其他列与排序结果一一对应......
  • 邻接表与邻接矩阵的转换
    //邻接表--->邻接矩阵voidConvert(GraphG,&intA[n][n]){  for(inti=0;i<n;i++){    for(p=G.vexnum[i].firstarc;p;p=p->nextarc){      A[i][p->adjvex]=1;    }  }} //邻接矩阵--->邻接表voidConvert(intA[n][n],Graph&G){  Ar......
  • 矩阵维度变换--einops库
    importeinops#创建一个形状为(batch_size,seq_length,hidden_dim)的张量tensor=tf.constant([[[1,2,3,4],[5,6,7,8]],[[9,10,11,12],[13,14,15,16]]])#使用einops进行维度交换......
  • 牛客[编程题] HJ69 矩阵乘法
    HJ69矩阵乘法中等  通过率:48.01%  时间限制:1秒  空间限制:32M  描述如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的矩阵的大小不超过100*100输入描述:第一行包含一个正整数x,代......
  • 10_矩阵键盘
    矩阵键盘矩阵键盘介绍扫描的概念矩阵按键原理图按按键显示对应数字MatrixKey.c#include"Delay.h"#include<REGX52.H>unsignedcharMatrixKey(){ unsignedcharKeyNumber=0; P1=0xFF; P1_7=0; if(P1_3==0){Delay(20);while(P1_3==0);Delay(20);KeyNumber=1;......
  • 【可视化】基于Matlab实现图表视化相关矩阵,相关值显示为左下角的热图,使用颜色渐变来指
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 上海森堡矩阵快速求解行列式
    这是一个没啥用的小trick,鉴于上下海森堡矩阵对称,此处只谈论上海森堡矩阵。定义海森堡阵(Hessenberg),是一个数学用语,对方阵\(A\),若\(i>j+1\)时,有\(A_{i,j}=0\),则称\(A\)是上海森堡阵。行列式求解考虑从行列式定义入手,即每行每列选择恰好一个元素,并乘以其奇偶性作为系数累......
  • 数据结构三元顺序表稀疏矩阵的加法程序
    三元顺序表稀疏矩阵的加法三元顺序表是什么?稀疏矩阵又是什么?稀疏矩阵的加法和普通矩阵的加法有什么不同?你看到这些是不是都有些困惑。那么现在我们就来讲讲这些陌生的东西。三元顺序表将稀疏矩阵非零元素对应的三元组所构成的集合,按照行优先的顺序排列成一个线性表,毫无疑问......
  • Scipy中稀疏矩阵用法解析(sp.csr_matrix;sp.csc_matrix;sp.coo_matrix)用法
    参考:链接orig=np.array([[1,0,2],[0,0,3],[4,7,6]])aa=csr_matrix(orig)aa有如下属性:#2代表第第一行有2个不为零的元素,#3代表第第一和二行不为零的元素总共有3个#6代表第第一、二和三行不为零的元素总共有6个indptr:array([0,2,3......
  • 满秩矩阵
    单位阵:单位阵是单位矩阵的简称,它指的是对角线上都是1,其余元素皆为0的矩阵。在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,我们称这种矩阵为单位矩阵,简称单位阵。它是个方阵,除左上角到右下角的对角线(称为主对角线)上的元素均为1以外全都为0。可用将系数矩......