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

news/2024/7/7 19:55:12

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


矩阵的分解函数
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)) 


http://lihuaxi.xjx100.cn/news/252651.html

相关文章

FreeBSD设备驱动管理介绍(BSP: Ti AM335x)

这段时间一直在忙FreeBSD驱动移植的项目,因此对FreeBSD做了一定的了解,鉴于网上对于FreeBSD的设备驱动资料较少,在这里给出本人对于FreeBSD驱动管理的理解心得(主要是USB驱动管理),希望能对开源开发者有所帮…

2018年终总结

转眼间,2018年就要过去了,又可以来总结一年的得失了。 今年可以说是充满了收获与挑战的一年,一年的工作基本上是围绕着node来进行的,前端相关的东西是做的越来越少。 工作相关的 今年应该说是换工位频率非常高的一年,东…

基于HTML5的Google水下搜索

这次愚人节的时候,Google推出了水下搜索,当然,这只是一个愚人的小把戏,不过效果非常不错,进入页面后,第一眼是一个水面的效果,水下的鲨鱼在游来游去,然后Google logo和搜索框从水面上…

Play.ht训练出播客乔布斯/用嘴做视频?Meta出品/我国牵头发布首个自动驾驶测试场景领域国际标准...

本周,业界有哪些新鲜事?核心硬件Linux 6.1为LoongArch CPU带来新功能日前,Linux 6.1为LoongArch CPU带来新的附加功能。早在5.19版本中,Linux便实现对LoongArch CPU 的初步支持,此后开发人员坚持填补功能特性上的短板&…

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

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

如何通过一行代码下载B站视频?

文章目录如何通过一行代码下载B站视频?Step1:安装you-getStep2:下载B站视频总结如何通过一行代码下载B站视频? You-Get 是一个基于 Python 3 的下载工具。使用 You-Get 可以很轻松的下载网络上的视频、图片及音乐。 下面我们介绍…

javassist学习笔记

2019独角兽企业重金招聘Python工程师标准>>> 介绍:www.javassist.org/ javassist、ASM 对比 1、javassist是基于源码级别的API比基于字节码的ASM简单。 2、基于javassist开发,不需要了解字节码的一些知识,而且其封装的一些工具类可…

Makefile (2) gdb

gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面step over 运行整个函数step return 跳出当前函数 4.继续运行 5.打印和监控值 下面是栗子: 1 #include <stdlib.h>2 #include <stdio.h>3 ​4 static int add(int i) //创…