由于这学期修了矩阵分析这门课,课程要求用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:满秩分解的参考地址记不住了,这里就不备注了,仅仅出于学习的目的,不喜勿喷。

矩阵的五种分解的matlab实现的更多相关文章

  1. 五通信算法:五种编码增益比较matlab模拟

    1. 卷积编码增益性能.BER 信道环境:AWGN 信噪比SNR :0:0.1:6 MATALB仿真架构:源比特 +卷积码 +BPSK +AWGN +Viterbi +BER 说明:卷积编码,不同的R ...

  2. MATLAB 进行五种边缘检测

    自定义函数: function []=edge_detect(image_name) a=imread(image_name); I=rgb2gray(a); BW1=edge(I,'Roberts' ...

  3. Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I

    Atitit  五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I   1.1. .3 进程的阻塞1 1.2. 网络 ...

  4. 提高CSS文件可维护性的五种方法

    当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节.然而代码并不是马上就能完全定型,在余下的时间里还有不断的维护工作,而这些工作也许不会是你自己完成.所以,结构优良的代码能很大程度上优化它的可 ...

  5. 聊聊 Linux 中的五种 IO 模型

    本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538919&idx=1&sn=6013c451 ...

  6. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了详细总结,在此之间对Spring的事务配置只是停留在听说的阶段,总结一下,整体把控,通过这次的学习发觉Spring的事务配置只要把思路 ...

  7. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  8. 浅谈Linux下的五种I/O模型 两篇别人的博客

     http://blog.csdn.net/sinat_34990639/article/details/52778562  http://www.cnblogs.com/chy2055/p/5220 ...

  9. iOS 开发之模糊效果的五种实现

    前言 在iOS开发中我们经常会用到模糊效果使我们的界面更加美观,而iOS本身也提供了几种达到模糊效果的API,如:Core Image,使用Accelerate.Framework中的vImage A ...

随机推荐

  1. [转]解决ubuntu16.04 ‘E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ’ 问题

    当运行sudo apt-get install/update/其他命令时,会出现如下提示: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不 ...

  2. Java自学-异常处理 处理

    Java的异常处理办法 try catch throws 异常处理常见手段: try catch finally throws 步骤 1 : try catch 1.将可能抛出FileNotFound ...

  3. 8 Traits of an Experienced Programmer that every beginner programmer should know

    Referrence: http://whats-online.info/guides-and-info/36/Traits-of-Experienced-Programmer-that-every- ...

  4. Matlab享元模式

    享元模式(Flyweight)通过共享技术实现相同或相似对象的重用,可以减少创建对象的数量,以减少内存占用和提高性能.Java String的常量池,python logging,线程池,数据库连接池 ...

  5. powershell 远程下载并执行

    远程下载文件到本地并执行cmd.exe /c powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-ob ...

  6. jvm学习笔记之class文件的加载、初始化

    编写的java文件在要真正运行时,会首先被编译成 “.class"结尾的二进制文件,然后被虚拟机加载.那么在虚拟机中一个class文件要成为java实例,需要经历好几个步骤: 1.装载:装载 ...

  7. 第一册:lesson 131.

    原文: Don't be so sure. question:What's the problem about deciding on a holiday. Where are you going t ...

  8. Redis支持的数据类型

    String字符串: 格式: set key value string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 . string类型是Redi ...

  9. Httpd服务入门知识-Httpd服务安装

    Httpd服务入门知识-Httpd服务安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Httpd概述 1>.Httpd介绍 20世纪90年代初,国家超级计算机应用中心 ...

  10. Docker版zabbix

    1. docker-compose docker-compose :容器自带的编排工作,可以通过yaml编排文件,将容器要启动的命令写入文件,然后再利用docker-compose run file. ...