当前位置: 首页 > 编程日记 > 正文

【MATLAB】矩阵运算之矩阵分解

矩阵分解:把一个矩阵分解成为矩阵连乘的形式。


矩阵的分解函数
cholCholesky分解
cholinc稀疏矩阵的不完全Cholesky分解
lu矩阵LU分解
luinc稀疏矩阵的不完全LU分解
qr正交三角分解
svd奇异值分解
gsvd一般奇异值分解
schur舒尔分解

在MATLAB中线性方程组的求解主要基于四种基本的矩阵分解。

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

用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。

考虑线性方程组Ax=b时,可以做Cholesky分解,使得A=R' * R,R' * R*x=b,得到x=R\(R'\b)

>> clear all
>> a=pascal(5)a =1     1     1     1     11     2     3     4     51     3     6    10    151     4    10    20    351     5    15    35    70>> eig(a)%【对称阵A是正定矩阵的充分必要条件是A的特征值全为正】ans =0.01080.18121.00005.517592.2904>> R=chol(a)R =1     1     1     1     10     1     2     3     40     0     1     3     60     0     0     1     40     0     0     0     1>> R'*Rans =1     1     1     1     11     2     3     4     51     3     6    10    151     4    10    20    351     5    15    35    70

2、一般方程的高斯消去法分解(LU分解)

将任意一个方阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,A=LU,MATLAB中用lu()实现。

[L,U]=lu(X)     (X是一个方阵,L为“心理”下三角矩阵,U为上三角矩阵)

[L,U,P]=lu(X)    (X是一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,PX=LU)

Y=lu(X)     (X是一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中给出,Y的对角元素为上三角矩阵的对角元素,Y=L+U-I)

考虑线性方程组Ax=b时,可以做LU分解,使得A=LU,L* U*x=b,得到x=U\(L\b)

det(A)=det(L)*det(U)  (det为求行列式命令)

inv(A)=inv(U)*inv(L)    (inv为求匿命令)

>> clear all
>> a=[2 4 5;8 9 6;1 3 5]a =2     4     58     9     61     3     5>> [l1 u1]=lu(a)l1 =0.2500    0.9333    1.00001.0000         0         00.1250    1.0000         0u1 =8.0000    9.0000    6.00000    1.8750    4.25000         0   -0.4667>> [l2 u2 p]=lu(a)l2 =1.0000         0         00.1250    1.0000         00.2500    0.9333    1.0000u2 =8.0000    9.0000    6.00000    1.8750    4.25000         0   -0.4667p =0     1     00     0     11     0     0>> y1=lu(a)y1 =8.0000    9.0000    6.00000.1250    1.8750    4.25000.2500    0.9333   -0.4667>> l1*u1==aans =1     1     11     1     11     1     1>> p*a==l2*u2ans =1     1     11     1     11     1     1>> l2+u2-eye(3)==y1ans =1     1     11     1     11     1     1

3、舒尔分解

A=U*S*U',用schur()函数实现

U是一个酉矩阵(n阶复方阵U的n个列向量是U空间的一个标准正交基,则U是酉矩阵。显然酉矩阵是正交矩阵往复数域上的推广)

特征值可以由矩阵S的对角块给出,U给出比特征向量更多的数值特征。

>> a=pascal(5)a =1     1     1     1     11     2     3     4     51     3     6    10    151     4    10    20    351     5    15    35    70>> [u ,s]=schur(a)u =0.1680   -0.5706   -0.7660    0.2429    0.0175-0.5517    0.5587   -0.3830    0.4808    0.07490.7025    0.2529    0.1642    0.6110    0.2055-0.4071   -0.5179    0.4377    0.4130    0.45150.0900    0.1734   -0.2189   -0.4074    0.8649s =0.0108         0         0         0         00    0.1812         0         0         00         0    1.0000         0         00         0         0    5.5175         00         0         0         0   92.2904>> u*sans =0.0018   -0.1034   -0.7660    1.3404    1.6143-0.0060    0.1013   -0.3830    2.6528    6.91420.0076    0.0458    0.1642    3.3711   18.9633-0.0044   -0.0939    0.4377    2.2789   41.67260.0010    0.0314   -0.2189   -2.2476   79.8179>> ans*u'ans =1.0000    1.0000    1.0000    1.0000    1.00001.0000    2.0000    3.0000    4.0000    5.00001.0000    3.0000    6.0000   10.0000   15.00001.0000    4.0000   10.0000   20.0000   35.00001.0000    5.0000   15.0000   35.0000   70.0000

4、矩形矩阵的正交分解(QR分解)

把一个mxn的矩阵分解为正交矩阵Q和上三角矩阵R的乘积,A=Q*R

QR分解用函数qr()实现

[Q,R]=qr(A)    (适用于满矩阵和稀疏矩阵)

[Q,R,E]=qr(A)     (R是上三角矩阵,Q是正交矩阵,E为置换矩阵,AE=QR)

R=qr(A)    (返回上三角矩阵R,R=chol(A'*A))

相关文章:

Java入门—输入输出流

File类的使用 文件是:文件可认为是相关记录或放在一起的数据的集合。 Java中,使用java.io.File类对文件进行操作 public class FileDemo {public static void main(String[] args) {String path "E:\\pdd";File f new File(path);//判断是文…

Web框架基准测试

Web Framework Benchmarks 这是许多执行基本任务(例如JSON序列化,数据库访问和服务器端模板组成)的Web应用程序框架的性能比较。每个框架都在实际的生产配置中运行。结果在云实例和物理硬件上捕获。测试实现主要是由社区贡献的,所…

vsftpd用户配置 No.2

在配置ftp虚拟用户的过程中,还有一种配置方式。yum -y install 安装vsftpdcp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak编辑vsftpd.conf开启下列选项:anonymous_enableNOlocal_enableYESwrite_enableYESlocal_umask022anon_mkdir_write_enab…

【MATLAB】稀疏矩阵(含有大量0元素的矩阵)

1、稀疏矩阵的储存方式 对于稀疏矩阵,MATLAB仅储存矩阵所有非零元素的值及其位置(行号和列号)。 2、稀疏矩阵的生成 1)利用sparse函数从满矩阵转换得到稀疏矩阵函数名称表示意义sparse(A)由非零元素和下标建立稀疏矩阵A。如果A已是…

httpTomcat

Tomcat是web应用服务器的一种 转载于:https://juejin.im/post/5beaf7e451882517165d91d1

memcached(二)事件模型源码分析

在memcachedd中,作者为了专注于缓存的设计,使用了libevent来开发事件模型。memcachedd的时间模型同nginx的类似,拥有一个主进行(master)以及多个工作者线程(woker)。 流程图 在memcached中&…

【MATLAB】MATLAB的控制流

1、if-else-end if expressioncommands1 elseif expression2commands2 ... else commandsn end 2、switch-case switch valuecase1 test1%如果value等于test1,执行command1,并结束此结构command1case2 test2command2...case3 testkcommandk otherw…

Linux查看本机端口

查看指定的端口 # lsof -i:port 查看所有端口 # netstat -aptn 安装telnet #yum install -y telnet.x86_64 #telnet ip 端口

Node.js安装

通过nvm安装 下载nvm并执行wget -qO- https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh将命令输出到终端命令中~/.bashrcexport NVM_DIR"$HOME/.nvm"更新文件source .bashrc通过nvm安装node.jsnvm install 10.13安装的版本是10.13的版本 通过命令查看…

mongodb常用语句以及SpringBoot中使用mongodb

普通查询 某个字段匹配数组内的元素数量的,假如region只有一个元素的 db.getCollection(map).find({region:{$size:1}}) 假如region只有0个元素的 db.getCollection(map).find({region:{$size:0}}) db.getCollection(map).find({region:{$size:1}}).count() db.get…

2002高教社杯---A车灯线光源的优化设计

A题 车灯线光源的优化设计 安装在汽车头部的车灯的形状为一旋转抛物面,车灯的对称轴水平地指向正前方, 其开口半径36毫米,深度21.6毫米。经过车灯的焦点,在与对称轴相垂直的水平方向,对称地放置一定长度的均匀分布的线光源。要求…

从Date类型转为中文字符串

//主方法public static String DateToCh(Date date) {Calendar cal Calendar.getInstance();cal.setTime(date);int year cal.get(Calendar.YEAR);int month cal.get(Calendar.MONTH) 1;int day cal.get(Calendar.DAY_OF_MONTH);return getYear(year) getTenString(month…

第十四课 如何在DAPP应用实现自带钱包转账功能?

1,为什么DAPP生态需要自带钱包功能? 区块链是一个伟大的发明,它改变了生产关系。很多生态,有了区块链技术,可以由全公司员工的"全员合伙人"变成了全平台的”全体合伙人”了,是真正的共享经济模式…

为什么jdk源码推荐ThreadLocal使用static

ThreadLocal是线程私有变量,本身是解决多线程环境线程安全,可以说单线程实际上没必要使用。 既然多线程环境本身不使用static,那么又怎么会线程不安全。所以这个问题本身并不是问题,只是有人没有理解ThreadLocal的真正使用场景&a…

C与C++之间相互调用

1、导出C函数以用于C或C的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言。如果是从C语言模块使用,则用C链接声明这些函数。如果使用此技术并为DLL提供头文件&#xff0c…

【MATLAB】三维图形的绘制mesh

步骤如下: (1)确定自变量x和y的取值范围和取值间隔 x x1 :dx :x2 , y y1 : dy : y2 (2)构成xoy平面上的自变量采样“格点”矩阵 ①利用格点矩阵的原理生成矩阵。 xx1:dx:x2; yy1:dy:y2; Xones(size(y))*x; Yy*o…

ORA-01919: role 'PLUSTRACE' does not exist

环境:Oracle 10g,11g.现象:在一次迁移测试中,发现有这样的角色赋权会报错不存在: SYSorcl> grant PLUSTRACE to jingyu; grant PLUSTRACE to jingyu* ERROR at line 1: ORA-01919: role PLUSTRACE does not exist 查询发现这个…

Java反射以及应用

需求:需要通过反射动态获取类的字段类型,然后做特殊处理 Java反射getDeclaredField和getField的区别 getDeclaredFiled 只能获取类本身的属性成员(包括私有、共有、保护) getField 仅能获取类(及其父类可以自己测试) public属性…

【MATLAB】雅可比矩阵jacobi matrix

参考页面: https://baike.baidu.com/item/%E9%9B%85%E5%8F%AF%E6%AF%94%E7%9F%A9%E9%98%B5/10753754?fraladdin#1 在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。 由球坐标系到直角坐标系的转…

Laravel:使用Migrations

1、首先利用artisan创建一个可迁移的数据表模板,该命令运行后会在database/migrations目录下生成一个文件 php artisan make:migration create_fees_count_table --createfees_count 2、生成的文件包含up和down两个方法,其中up中是包含了添加表&#xff…

基于libevent和unix domain socket的本地server

https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根据这一篇写一个最简单的demo。然后开始写client。 client调优 client最初的代码如下&#xff1a; 1 #include <sys/socket.h>2 #include <sys/un.h>3 #include <stdio.h>4 #include …

软件体系架构模式之一什么是软件架构模式

什么是软件架构模式 计划启动未开发的软件项目&#xff1f;然后选择正确的架构模式将对项目的结果起关键作用。选择市场上最流行或最新的技术并不总是意味着会带来最好的结果。但是&#xff0c;选择最合适的解决方案将为行之有效的问题和反复出现的问题提供可靠的解决方案。 …

HP 服务器 iLO 远程控制软件 介绍

iLO了解&#xff1a;iLO 是一组芯片&#xff0c;内部是vxworks的嵌入操作系统,在服务器的背后有一个标准RJ45口对外连接生产用交换机或者带外管理的交换机。iLO 全名是 Integrated Lights-out&#xff0c;它是惠普某些型号的服务器上集成的远程管理端口&#xff0c;它能够允许用…

【MATLAB】数据分析之数据插值

插值&#xff1a;求过已知有限个数据点的近似函数。 区别于拟合&#xff1a; 拟合&#xff1a;已知有限个数据点求近似函数&#xff0c;不要求过已知数据点&#xff0c;只要求在某种意义下它在这些点上的总偏差最小。 基本常用的插值方法&#xff1a;拉格朗日多项式插值&…

迈斯!啊呸~数学

1.数论 快速幂 int po(int x,int y) {int ans1;while(y){if(y%21)ans1ll*ans*x%p;x1ll*x*x%p;y/2;}return ans; } 乘法逆元&#xff08;保证模域p与求逆元的数互质&#xff09; po(a,p-2);//a为需要求逆元的数 扩展欧几里得&#xff08;exgcd&#xff09; #include<cstdio&g…

软件体系架构模式之二分层体系结构

分层体系结构模式是n层模式&#xff0c;其中组件被组织在水平层中。这是设计大多数软件的传统方法&#xff0c;并且具有独立性。这意味着所有组件都是互连的&#xff0c;但彼此之间不依赖。 图1&#xff1a;分层架构 在此体系结构中有四层&#xff0c;其中每一层在模块和其中的…

linux下mysql的root密码忘记解决方法

1&#xff0e;首先确认服务器出于安全的状态&#xff0c;最安全的状态是到服务器的Console上面操作&#xff0c;并且拔掉网线&#xff0c;或者可以使用--skip-networking限制只能从本地连接2&#xff0e;修改MySQL的登录设置&#xff1a; # vim /etc/my.cnf在[mysqld]的段中加上…

【Python】turtle库的小应用

心血来潮&#xff0c;哈哈哈&#xff0c;画的不好&#xff0c;请多见谅 大家如果想要尝试turtle库&#xff0c;可以借鉴&#xff1a; https://www.cnblogs.com/nowgood/p/turtle.html 导入库&#xff0c;我的pycharm里可以直接使用&#xff0c;哈哈哈&#xff0c;不行就pip…

[转]MySQL修改时区的方法小结

本文转自&#xff1a;https://www.cnblogs.com/mracale/p/6064447.html 这篇文章主要介绍了MySQL修改时区的方法,总结分析了三种常见的MySQL时区修改技巧,包括命令行模式、配置文件方式及代码方式,需要的朋友可以参考下 方法一&#xff1a;通过mysql命令行模式下动态修改 1.1 查…

swift轮播图代码

import UIKit private let CycleCellID "CycleCellID" class BannerCycleView: UIView { var layout : UICollectionViewFlowLayout! var collectionView :UICollectionView! var pageContol : UIPageControl? var cycleTimer : Timer? let timeInterval : TimeI…