线性代数 · 矩阵 · Matlab | Moore-Penrose 伪逆矩阵代码实现
背景 - Moore-Penrose 伪逆矩阵:
- 对任意矩阵
,其 Moore-Penrose 逆矩阵 存在且唯一。- 定义:若矩阵 G 满足
,则 G 是 Moore-Penrose 逆矩阵,可以记作 。 - 性质:
满足 。
- 定义:若矩阵 G 满足
求解方法 1(迹方法):- 令
的秩为 r。 - 计算
。 - 令
。 - for i = 2 to r-1,计算
。 - 得到
。
- 令
求解方法 2(满秩分解法):- 若 A=FG 是满秩分解,则
。
- 若 A=FG 是满秩分解,则
代码 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
两份代码的计算结果一致,代码正确。
本文作者:MoonOut
本文链接:https://www.cnblogs.com/moonout/p/17825741.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步