11、矩阵的分解

news2025/1/9 15:29:37

目录

一、对称正定矩阵的Cholesky分解

二、一般方阵的高斯消去法分解

三、矩形矩阵的正交分解

四、舒尔分解


矩阵分解是把一个矩阵分解成几个“较简单”的矩阵连乘的形式。在MATLAB中矩阵分解的相关函数有:

在MATLAB中,线性方程组的求解主要基于4种基本的矩阵分解,即对称正定矩阵的Cholesky分解、一般方阵的高斯消去法分解、舒尔分解和矩形矩阵的正交分解。

一、对称正定矩阵的Cholesky分解

Cholesky分解在MATLAB中用函数chol()来实现,其常用的调用方式如下:

  1. R = chol(X):其中X为对称正定矩阵,R是上三角矩阵,使得X=R'·R。如果X 是非正定的,则结果将返回出错信息。
  2. [R,p] = chol(X):返回两个参数,并且不会返回出错信息。当X是正定矩阵时,返回的上三角矩阵R满足X=R'·R,且p=0;当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1:p-1,1:p-1)=R'·R。

示例1:利用chol进行矩阵分解

A=pascal(5) %产生5阶帕斯卡矩阵

B=eig(A) %矩阵A的特征值

C=chol(A) %利用chol进行矩阵分解

D=C'*C

运行结果:

对于稀疏矩阵,MATLAB提供了函数cholinc()来做不完全Cholesky分解。函数cholinc()的另一个优点是它可用于计算实半正定矩阵。函数cholinc()的调用格式如下:

  1. R = cholinc(X,DROPTOL):其中 X 和 R 的含义与函数 chol()中的变量相同,DROPTOL为不完全Cholesky分解的丢失容限。当DROPTOL设为0时,退化为完全Cholesky分解。
  2. R = cholinc(X,OPTS):其中 OPTS 为结构体,它有3个属性,即DROPTOL、MICHOL和RDIAG。DROPTOL为不完全Cholesky分解的丢失容限;MICHOL为1时采用改进算法的不完全Cholesky分解,否则不采用改进算法;RDIAG为1时R的对角元素中的零值替换成为DROPTOL的平方根,RDIAG为0时不做此替换。
  3. R = cholinc(X,'0'):完全Cholesky分解。
  4. [R,p] = cholinc(X,'0'):返回两个参数,并且不会返回出错信息。当X是正定矩阵时,返回的上三角矩阵R满足X=R'·R,且p=0;当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1:p-1,1:p-1)=R'· R。
  5. R = cholinc(X,'inf' ):采用 Cholesky-Infinity 分解。Cholesky-Infinity分解是基于Cholesky分解的,但它可以处理实半正定矩阵。

示例2:稀疏矩阵Cholesky分解

A=[2 0 3 0;0 25 0 30;3 0 91 0;0 32 0 661];

B=cholinc(sparse(A),'inf') %采用 Cholesky-Infinity 分解

C=full(B) %转为稀疏矩阵

D=C'*C

运行结果:

上面代码无错,我matlab缺少cholinc函数,不知道解决方式

二、一般方阵的高斯消去法分解

高斯消去法分解又称LU分解,它可以将任意一个方阵A分解为一个下三角矩阵L和一个上三角矩阵U 的乘积,即A=LU。LU分解在MATLAB中用函数lu()来实现,其调用方式如下:

  1. [L,U] = lu(X):X为一个方阵,L为“心理”下三角矩阵,U为上三角矩阵,满足关系X=L·U。
  2. [L,U,P] = lu(X):X为一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,满足关系P·X = L·U。
  3. Y = lu(X):X为一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中给出,矩阵Y的对角元素为上三角矩阵的对角元素,即Y=L+U-I。置换矩阵P的信息丢失。

利用LU分解来计算行列式的值和矩阵的逆,其命令形式如下:

  1. det(A)=det(L)*det(U)。
  2. inv(A)=inv(U)*inv(L)。

示例3:进行LU分解

A=[2 4 5;8 9 6;1 3 5];

[L1,U1]=lu(A) %矩阵的LU分解

[L2,U2,P]=lu(A)

B=lu(A)

C=L1*U1  %验证

D=L2+U2-eye(size(A))

运行结果:

此外,对于稀疏矩阵,MATLAB提供了函数luinc()来做不完全LU分解,其调用格式如下:

  1. [L U]= luinc(X,DROPTOL):其中 X、L 和 U 的含义与函数 lu()中的变量相同,DROPTOL为不完全LU分解的丢失容限。当DROPTOL设为0时,退化为完全LU分解。
  2. [L U] = luinc(X,OPTS):其中 OPTS 为结构体,它有4个属性,即DROPTOL、MICHOL、RDIAG 和 THRESH。DROPTOL 为不完全 LU分解的丢失容限;MICHOL为1时采用改进算法的不完全 LU分解,否则不采用改进算法;RDIAG为1时,R的对角元素中的零值替换成DROPTOL的平方根,为0时不做此替换;THRESH 是绕对角线旋转因子,其取值范围是[0,1],当THRESH 为0时强制绕对角线旋转,THRESH 的默认值是1。
  3. [L,U,P] = luinc(X,'0'):0级不完全LU分解。
  4. [L,U] = luinc(X,'0'):0级不完全LU分解。
  5. Y = luinc(X,'0'):0级完全LU分解。

三、矩形矩阵的正交分解

矩形矩阵的正交分解又称QR分解。QR分解把一个m×n的矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=Q·R。在MATLAB中QR分解由函数qr()来实现,下面介绍QR分解的调用方式

  1. [Q,R] = qr(A):其中矩阵R为与矩阵A具有相同大小的上三角矩阵,Q为正交矩阵,它们满足A=Q·R。该调用方式适用于满矩阵和稀疏矩阵。
  2. [Q,R] = qr(A,0):为“经济”方式的QR分解。设矩阵A是一个m×n 的矩阵,若m>n,则只计算矩阵Q的前n列元素,R为n×n的矩阵;若m≤n,则与[Q,R]=qr(A)效果一致。该调用方式适用于满矩阵和稀疏矩阵。
  3. [Q,R,E] = qr(A):R 是上三角矩阵,Q 为正交矩阵,E 为置换矩阵。它们满足A·E=Q·R,程序选择一个合适的矩阵 E 使得 abs(diag(R))是降序排列的。该调用方式适用于满矩阵。
  4. [Q,R,E] = qr(A,0):“经济”方式的QR分解,其中E是一个置换矢量。它们满足A(:,E)= Q·R。该调用方式适用于满矩阵。
  5. R =qr(A):返回上三角矩阵R,这里R= chol(A'·A)。该调用方式适用于稀疏矩阵。
  6. R = qr(A,0):以“经济”方式返回上三角矩阵R。
  7. [C,R] = qr(A,B):其中矩阵B必须与矩阵A具有相同的行数,矩阵R是上三角矩阵,C=Q' ·B。

示例4:通过QR分解分析矩阵的秩

A=[2 4 5;8 9 6;1 3 5];

[Q1,R1]=qr(A) %矩阵的QR分解

B=[2 4 5;8 9 6;1 3 5;5 4 10];

C=rank(B) %矩阵的秩

[Q2,R2]=qr(B) %矩阵的QR分解

运行结果:

四、舒尔分解

舒尔分解定义式为

其中A必须是一个方阵,U是一个酉矩阵,S是一个块对角化矩阵,由对角线上的1×1和2×2块组成。特征值可以由矩阵S的对角块给出,而矩阵U给出比特征向量更多的数值特征。此外,对缺陷矩阵也可以进行舒尔分解。MATLAB中用函数schur()来进行舒尔分解,其调用格式如下:

  1. [U,S] = schur(A):返回酉矩阵U和块对角矩阵S。
  2. S = schur(A):仅返回块对角矩阵S。
  3. schur(A,'real'):返回的实特征值放在对角线上,而把复特征值放在对角线上的2×2块中。
  4. schur(A,' complex'):返回的矩阵S是上三角矩阵,并且如果矩阵A有复特征值,则矩阵S是复矩阵。

另外,函数rsf2csf()可以把实数形式的舒尔矩阵转换成复数形式的

舒尔矩阵。

示例5:舒尔分解

A=pascal(5); %产生5阶帕斯卡矩阵

[U,S]=schur(A) %矩阵的舒尔分解

B=U*S*U-A %验证

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 第15天 搜索与回溯算法(中等)

目录 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树与双向链表 剑指 Offer 54. 二叉搜索树的第k大节点 剑指 Offer 34. 二叉树中和为某一值的路径 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径…

【懒狗福音】设置Bios电源自启实现远程办公

目录前言正文需求分析开始实现需求1需求2总结前言 今年寒假升级了下家里台式机的配置,已经很能满足我的生产力需求。 尽管我是按着MATX主机的方向配的,选择的机箱也是净重较轻的铝合金材质,机身自带提手也还算便捷。 但是装配完毕后它的整…

前端开发:JS中数组常用方法汇总

前言 在前端开发中关于数组的使用想必前端开发者并不陌生,尤其是在处理业务逻辑的时候,从后端获取的数据类型中数组类型基本占到70%的比例,所以与其说是处理数据,不如说是处理数组,虽然说的有点夸张,前端实…

vue文件导出/下载

const blob new Blob([res.data]);const elink document.createElement(a);elink.download 导出数据.xlsx;elink.style.display none;elink.href URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href);document.bo…

使用Coding管理项目代码记录

直接开门见山 一、创建项目 进入coding登录后,找到项目菜单,然后点击创建项目 二、创建代码仓库 进入项目中,针对不同需要创建代码仓库。大项目或者前后端分离分开开发的可以创建不同的代码仓库。 三、创建代码仓库与本地关联 项目管…

Java岗面试题--Java基础(日积月累,每日三题)

目录面试题一:JDK、JRE、JVM之间的区别面试题二:hashCode()与equals()之间的关系追问:为什么重写 equals() 就一定要重写 hashCode() 方法?面试题三:String、StringBuffer、StringBuilder的区别追问一:Stri…

vulfocus靶场通关(目录遍历)

uWSGI 目录穿越(CVE-2018-7490) uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议,并支持通过插件来运行各种语言,uWSGI 2.0.17之前的PHP插件,没有正确的处理DOCUMENT_ROOT检测,导致用户可以…

【运维】通过gotty实现网页代理访问服务器及K8S容器操作实践

Gotty 是Golang编写的可以方便的共享系统终端为web应用,是一个灵活强大的通过web访问终端的工具。本文将主要通过搭建Gotty实现对K8S容器的访问操作,开发如果想要正常的进行容器访问以及测试环境代码调试,最好是搭建一套与运维环境隔离的应用…

Gadget驱动程序框架

Gadget驱动程序框架 文章目录Gadget驱动程序框架参考资料:一、 怎样理解Gadget框架二、从硬件软件角度理解Gadget框架2.1 底层硬件操作_UDC驱动2.2 上层软件操作三、 从构造描述符的角度理解Gadget框架致谢参考资料: Linux下USB gadget设备详解Linux us…

Linux常用命令——quotaon命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) quotaon 激活Linux内核中指定文件系统的磁盘配额功能 补充说明 quotaon命令用于激活Linux内核中指定文件系统的磁盘配额功能。执行quotaon指令可开启用户和群组的才磅秒年空间限制,各分区的文件系统…

STM32——I2C外设总线

文章目录一、I2C外设简介二、I2C框图三、I2C基本结构四、主机发送五、主机接收六、I2C的中断请求七、软件/硬件波形对比八、硬件I2C读写MPU6050电路设计关键代码状态监控函数一、I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条…

Go语言jwt无感刷新以及解决SSO单点登录限制

前言 为什么使用JWT? Jwt提供了生成token以及token验证的方法,而token是一种不用存储在服务端,只需要由用户携带即可实现认证的一种方式。在介绍JWT之前,我们也应该先了解cookie和session。 Cookie和Session 为每一位用户设定…

PLSQL Developer 代码助手卡顿优化

支持付费优化 原因分析 代码助手卡顿来源于(不考虑网络和软件版本等影响) A.从已连接的数据库的数据字典中,读取该表的列信息B.将读取到的列信息返回到plsql编辑器,并进行字符处理,然后显示如何优化B 这个勾勾是维…

【GPLT 二阶题目集】L2-034 口罩发放

为了抗击来势汹汹的 COVID19 新型冠状病毒,全国各地均启动了各项措施控制疫情发展,其中一个重要的环节是口罩的发放。 某市出于给市民发放口罩的需要,推出了一款小程序让市民填写信息,方便工作的开展。小程序收集了各种信息&#…

redis的配置文件

目录 介绍 1. 单位的设置方式 2. 可以包含其他文件内容 3. 网络配置相关 4. 通用 5. 安全 6. 限制 redis的配置文件名为redis.conf,一般会安装在/etc目录下。 如果找不到该文件可以使用find命令查找。 find . -name redis.conf 介绍 1. 单位的设置方式 只支持字…

client-go监听apiserver,监听http2逻辑分析

前言 最近做项目,需要写一个controller(k8s的插件),需要从k8s的apiserver取数据,就用了自带的client-go,但是client-go是怎么从apiserver获取数据的一直没有研究过,只是看网上,看官…

Hudi系列10:Flink流式插入

文章目录流式插入概述一. Hudi流式插入案例1(datagen)1.1 准备工作1.2 源端准备1.3 目标端表准备1.4 ETL准备1.5 数据验证1.6 通过SPARK SQL查看数据二. Hudi流式插入案例2(Kafka)2.1 准备工作2.2 源端准备2.2.1 创建kafka的topic (hudi_flink)2.2.2 Flink SQL Client消费kafka…

卷积神经网络中的权值共享和局部连接

卷积神经网络中的权值共享和局部连接卷积神经网络的两大特点权值共享全连接卷积神经网络的两大特点 权值共享,就是输入一张图,用一个filter去扫这张图,filter里面的数就叫权重,这张图每个位置都是被同样的filter扫的,…

Flink官方例子解析:WordCount

1. 简介 今天介绍的是官方子项目flink-examples-streaming里面的WordCount例子。 WordCount ,中文:单词统计,是大数据计算常用的例子。 2. WordCount需要实现的功能 监听指定目录下的文件,读取文件的文本内容;如果未…

Python继承机制及其使用

Python 类的封装、继承、多态 3 大特性,前面章节已经详细介绍了 Python 类的封装,本节继续讲解 Python 类的继承机制。继承机制经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法&#…