由于这学期修了矩阵分析这门课,课程要求用matlab实现矩阵的5种分解,仅仅是实现了分解,上传到博客存档,万一哪天某位同学就需要了呢。。

1.矩阵的满秩分解

  • 代码实现
 1 %矩阵的满秩分解
clear
%设输入矩阵为M(P152 例4.1.1)
A = [1,4,-1,5,6;
2,0,0,0,-14;
-1,2,-4,0,1;
2,6,-5,5,-7]
A1 = rref(A); %将矩阵A化成行最简形式保存在A1中
[m,n]=size(A); %获取矩阵A的大小:m行n列
B0= [];%生成一个空向量
C0= [];%生成一个空向量
for i=1:m %依次扫描矩阵m行
flag=1;
for j=1:n %依次扫描矩阵n列
if A1(i,j)==1 %若A1(i, j)等于1
for k=1:i-1 %固定j列,扫描此列的第1行到i-1行元素
if A1(k,j)~=0 %判断是否全为0
flag=0; %若不全为0,则将flag置为0(说明此列不是单位矩阵的列)
break;
end
end
for k=i+1:m %固定j列,扫描此列的第i+1行到m行(即最后一行)元素
if A1(k,j)~=0 %判断是否全为0
flag=0; %若不全为0,则将flag置为0(说明此列不是单位矩阵的列)
break;
end
end
if flag==1 %若flag为1(不为0),则说明此列是【矩阵的行最简形式矩阵】的单位矩阵的列
B0=[B0,A(:,j)]; %将矩阵A的j列加到B0列向量之后
C0=[C0;A1(i,:)]; %将矩阵A1的i行加到C0行向量之后,
end
end
end
end
[m1,n1]=size(B0); %获取矩阵B0的大小:m1行n1列
[m2,n2]=size(C0); %获取矩阵C0的大小:m2行n2列
B=B0(:,1:n1) %将矩阵B0的第1列到最后一列赋值给矩阵B
C=C0(1:m2,:) %将矩阵C0的第1行到最后一行赋值给矩阵C
%验证:BC=A
A_1= B*C

2.矩阵的正交三角分解

  • 代码实现

直接调用matlab自带qr()函数即可

 %矩阵的正交三角分解
clear;
A = [-3,1,-2;1,1,1;1,-1,0;1,-1,1]
[Q, R] = qr(A) %正交三角分解,Q为酉矩阵,R为正交下三角矩阵
%验证:QR是否为A,以及Q是否为酉矩阵
A_1 = Q * R
Q_1 = Q * conj(Q.')

3.矩阵的奇异值分解

  • 代码实现
 %矩阵的奇异值分解
clear,clc
A = [1,1;0,0;1,1];
[U,S,V] = svd(A) %返回一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足A= U*S*V~H。
%若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。 %验证A=USV~H
A = [1,1;0,0;1,1]
A_1 = U*S*conj(V.')

4.矩阵的极分解

  • 代码实现
 %矩阵的极分解
clear,clc;
A = [2,1,2;0,1,3;1,0,0];
H1 = sqrtm(A*A') %返回矩阵的主要平方根
U1 = inv(H1)*A %求逆
A_1 = H1*U1
H2 = sqrtm(A)
U2 = A*inv(H2)
A_2 = U2*H2

5.矩阵的谱分解

以正规矩阵为例:

  • 代码实现
 %矩阵的谱分解
clear,clc
A = [4,6,0;-3,-5,0;-3,-6,1]; %单纯矩阵
%A = [-2i,4,-2;-4,-3i,-3i;2,-2i,-5i]; %正规矩阵
[V,D] = eig(A) %求特征值与特征向量 %正交归一化
V_C = orth(V) ;%特征向量正交化
V_C_Z = V_C./repmat(sqrt(sum(V_C.^2,1)),size(V_C,1),1); %特征向量列归一化 A_H = A * conj(A');%求A的共轭转置
if A == A_H | A == -(A_H) %判断是否是正规矩阵
[m,n] = size(V_C_Z);
G2 = zeros(m,n);
for i=1:n
G1 = V_C_Z(:,i) * conj(V_C_Z');
G2 = G2 + D(i, i) * G1;
end
G_Z = G2
else %否则是单纯矩阵
P_1 = (inv(V))';
[m,n] = size(P_1);
G3 = zeros(m,n);
for i=1:n
G4 = V(:,i) * (P_1(:,i))';
G3 = G3 + D(i,i)* G4;
end
G_R = G3
end

 PS:满秩分解的参考地址记不住了,这里就不备注了,仅仅出于学习的目的,不喜勿喷。

最新文章

  1. 开发属于自己的yeoman脚手架(generator-reactpackage)
  2. struts2 框架处理流程
  3. JS识别ios & 安卓
  4. SSH如何通过公钥连接云服务器
  5. CRM 权限与分派不一样问题
  6. powershell ise好字库和diy配色文件分享
  7. TFS如何设置在客户端独占签出
  8. hdu4605 magic ball game 树状数组+离线处理
  9. 转VS快捷键
  10. SPA解释:单页应用程序
  11. flask前后台交互数据的几个思路
  12. MasterCard信用卡测试卡号-creditcard-1
  13. Spring学习(5)---Bean的定义及作用域的注解实现
  14. Web程序-----批量生成二维码并形成一张图片
  15. 使用 OpenSSL 创建私有 CA:1 根证书
  16. 英雄联盟lol登录错误:登录服务器未响应、您可能遇到了一个网络问题、请检查您的网络。
  17. shiro课程的学习
  18. linux下设置默认路径
  19. 【Netty官方文档翻译】引用计数对象(reference counted objects)
  20. jdbc oracle clob

热门文章

  1. 【转载】 C#中ArrayList集合类的使用
  2. Vue – 基础学习(1):对生命周期和钩子函的理解
  3. Java 之 自定义异常
  4. Process.Start可能无法选中指定文件的问题
  5. Spark排序方式集锦
  6. linux防火墙和xshell的链接
  7. sqlserver语句随笔
  8. Python 函数返回值类型
  9. Httpd服务入门知识-正向代理和反向代理
  10. 关于Tfrecord