线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现
背景 - 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
两份代码的计算结果一致,代码正确。
线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现的更多相关文章
- 求伪逆矩阵c++代码(Eigen库)
非方阵的矩阵的逆矩阵 pseudoInverse 伪逆矩阵是逆矩阵的广义形式,广义逆矩阵 matlab中是pinv(A)-->inv(A). #include "stdafx.h&q ...
- 【线性代数】7-3:对角化和伪逆(Diagonalization and the Pseudoinverse)
title: [线性代数]7-3:对角化和伪逆(Diagonalization and the Pseudoinverse) categories: Mathematic Linear Algebra ...
- 混淆矩阵-MATLAB代码详解
一.混淆矩阵 (一).简介 在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵.在图像精度评价中,主要用于比较分类结果和实际测得值, ...
- 《数字图像处理原理与实践(MATLAB文本)》书代码Part7
这篇文章是<数字图像处理原理与实践(MATLAB文本)>一本书的代码系列Part7(由于调整先前宣布订单,请读者注意分页程序,而不仅仅是基于标题数的一系列文章),第一本书特色186经225 ...
- 线性代数-矩阵-【1】矩阵汇总 C和C++的实现
矩阵的知识点之多足以写成一本线性代数. 在C++中,我们把矩阵封装成类.. 程序清单: Matrix.h//未完待续 #ifndef _MATRIX_H #define _MATRIX_H #incl ...
- matlab函数interp2及其c++代码
最近将一个matlab程序转为c++,途中遇到interp2这个家伙,我是左查右查,发现网上没有人总结这个玩意,于是我来初探一下,还是别有洞天的,嘿嘿. 1.关于interp2 Vq = interp ...
- vs 2010调用matlab dll显示窗口核心代码
matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...
- c++实现矩阵类矩阵行列式,伴随矩阵,逆矩阵
//Matrix ver1.0 //只支持矩阵内部(方阵)的运算 #include<iostream> #include<math.h> using namespace std ...
- Matlab中调用第三方Java代码
搞了一天,才算搞定. 第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: disp(java.lang.System.get ...
- 线性代数-矩阵-【5】矩阵化简 C和C++实现
点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...
随机推荐
- Leader笔记:程序员小团队透明和信任管理
今天想跟大家分享一下小团队的透明管理,这也是一个管理技巧,相信很多Leader身份的同学都了解到主管有很大的一个优势,就是在组织内拥有了信息不对称能力,Leader能够听到和了解到完全不同层面上的内容 ...
- 蓝桥杯-最短路 (SPFA算法学习)
SPFA算法主要用来解决存在负边权的单源最短路情况(但不能有负环!!!)一个简单的方法判断是否有没有负环可以通过判断是否有一个节点是否频繁进出队列. 以下内容转自https://blog.csdn.n ...
- 【2020】装了VirtualBox后VMware Workstation无法使用SSH连接Centos的解决方法
装了个VirtualBox,然后发现无法使用Xshell远程Vmware中的centos了,一开始感觉是虚拟网卡冲突了,发现把VirtualBox的虚拟网卡禁用就可以使用,但是好麻烦啊??每次我特么要 ...
- ElasticSearch之Analyze index disk usage API
本API用于分析.统计指定index当前占用的存储空间. 考虑到本特性目前仍然处于预览状态,因此使用方法.参数等可能会发生变化,或者未来也许会被删除. 本API暂时不建议在生产系统中使用. 命令样例如 ...
- Shell脚本实践总结
对比大小 符号用法:(必须使用双括号) < 小于 (( "$a" < "$b" )) <= 小于等于 (( "$a&q ...
- CTFHub XSS DOM跳转 WriteUp
前文:DOM反射XSS 进入网站,直接查看源代码,下面是关键代码,这里有xss漏洞: <script> var target = location.search.split("= ...
- android Handler应用
android在运行时改变ui需要在ui线程中修改才行,不然就会报错或者无法启动应用. 我们怎么可以做事不管呢? 既然不能在ui线程外的地方运行修改ui的代码,我们可以用Handler解决这个问题, ...
- 如何保证XML正确性
如何保证XML正确性 XML是个盒子,什么都能装,但是装进去的东西正确与否恐怕无法得知.往往我们都人工审核.双人复核保证,但是次数多了难免会出错.那么我们如何保证和避免这种问题出现呢? 那就是XSD, ...
- HDU 4893 线段树延迟标记
原题链接 题意 初始有一长度为n,全为0的序列 每次我们可以对这个序列进行三种操作: 1.将某个位置的数加上d 2.输出某个区间的和 3.将某个区间内每个数字变为与其最接近的斐波那契数,如果有两个最相 ...
- MySQL思维导图:MySQL的架构介绍
MySQL的架构介绍(思维导图形式) MySQL简介 概述 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. ...