线性代数 · 矩阵 · 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/ ...
随机推荐
- 18、defer
1.defer是什么? 字面意思来看,defer是延迟,推迟的意思 在go语言中,使用defer关键字来延迟一个函数或者方法的执行 2.defer能干嘛? 对象.close(),临时文件的删除 文件. ...
- 【UniApp】-uni-app-CompositionAPI传递数据
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-传递数据 那么了解完了uni-app-传递数据之后,这篇文章来给大家介绍一下 uni-app-CompositionAPI传递数据 首 ...
- 解析$nextTick魔力,为啥大家都爱它?
1.为什么需要使用$nextTick? 首先我们来看看官方对于$nextTick的定义: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 由于vu ...
- NetSuite 开发日记 —— 库存详细信息记录更改数量问题
详细报错: "type":"error.SuiteScriptError","name":"USER_ERROR",&q ...
- Pikachu漏洞靶场 URL重定向
URL重定向 点击 我就是我,放荡不羁的我 可以发现url是这样的: http://192.168.171.30/pikachu/vul/urlredirect/urlredirect.php?url ...
- Feign源码解析:初始化过程(三)
背景 前面两篇讲了下,在一个典型的引入了feign.loadbalancer.nacos等相关依赖的环境中,会有哪些bean需要创建. 其中第一篇讲了非自动配置的bean,第二篇是自动配置的bean. ...
- jumpserver连接ecs实例报错:UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh_exchange_identification: Connection closed by remote host", "unreachable": true
报错分析思路: 1.是ssh密钥设置有没有对接 2.防火墙拦截问题 3.用户设置问题 4.sshd配置问题 问题解决: 无法与221.229.216.39端口35846进行协商:找不到匹配的主机密钥类 ...
- 袋鼠云数栈UI5.0设计实战|B端表单这样设计,不仅美观还提效
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:大喜 相关文章:袋鼠云出品!数栈UI 5.0全新体验升级, ...
- Spring源码学习笔记7——Spring bean的初始化
一丶前言 上篇中我们了解了Spring bean的实例化--存在方法覆盖的使用CGLIB动态代理生成子类,反之反射调用构造函数.实例化后bean中的字段都是默认值,接下来就是对bean的属性进行填充, ...
- 使用 Python 将数据写入 Excel 工作表
在数据处理和报告生成等工作中,Excel 表格是一种常见且广泛使用的工具.然而,手动将大量数据输入到 Excel 表格中既费时又容易出错.为了提高效率并减少错误,使用 Python 编程语言来自动化数 ...