由于这学期修了矩阵分析这门课,课程要求用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. JavaScript入门(二)

    JavaScript入门—操作DOM树 要点 DOM树是一个树形结构,操作DOM树通常是“更新.遍历.新增.删除”. 更新DOM树 拿到DOM节点 var id=document.getElement ...

  2. webpack等bundler是如何工作的-简化版本

    webpack- why and how 首先不要被webpack做的复杂花哨的工作所迷惑,到底webpack是个啥?一句话,webpack是一个module bundler(模块打包器).多一句话, ...

  3. Python pip安装第三方库的国内镜像

    Windows系统下,一般情况下使用pip在DOS界面安装python第三方库时,经常会遇到超时的问题,导致第三方库无法顺利安装,此时就需要国内镜像源的帮助了. 使用方法如下: 例如:pip inst ...

  4. English--五大基本句型基本概念

    English|五大基本句型基本概念 英语的基本句型是整个英语的框架体系,所以,祝愿看到此文的伙伴们,都可以牢牢掌握! 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力 ...

  5. VS 对话框控件的Tab顺序问题

    我们先来直观的看看各个控件的Tab顺序吧.打开“Resource View”视图,然后在资源中找到对话框IDD_ADDITION_DIALOG,双击ID后中间客户区域出现其模板视图.在主菜单中选择“F ...

  6. 原生JS实现上拉下拉列表

    话不多说,代码上来,有些知识点直接就在注释里 HTML <div class="list-down"> <button id="btn"> ...

  7. 英语hawkbillturtle玳瑁

    玳瑁(hawkbillturtle):属爬行纲,海龟科的海洋动物.一般长约0.6米,大者可达1.6米.头顶有两对前额鳞,吻部侧扁,上颚前端钩曲呈鹰嘴状:前额鳞2对:背甲盾片呈覆瓦状排列:背面的角质板覆 ...

  8. Android P(9.0) userdebug版本执行adb remount失败

    [DESCRIPTION]      在android P版本上如果按照“FAQ18076 android 6.0 M userdebug版本执行adb remount失败”的做法在userdebug ...

  9. 05-Vue组件

    定义Vue组件 什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可: 组件化和模块化的不同: ...

  10. Elasticsearch使用DateHistogram聚合

    date_histogram是按照时间来构建集合(桶)Buckts的,当我们需要按照时间进行做一些数据统计的时候,就可以使用它来进行时间维度上构建指标分析.     在前面几篇中我们用到的hitogr ...