MATLAB编程与应用系列-第3章 矩阵运算(4)

本系列教程来源于出版设计《基于MATLAB编程基础与典型应用书籍》,如涉及版权问题,请联系:[email protected]。 出版社:人民邮电出版社, 页数:525。

本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected]

##3.2 矩阵的分解
矩阵的分解是矩阵相关运算中的重要内容,MATLAB提供了用于矩阵分解运算的多种函数。本节将集中介绍MATLAB所提供的矩阵分解运算函数的功能及使用。

###3.2.1 LU分解
矩阵的三角分解又称高斯消去法分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。MATLAB提供了专门的函数lu来计算矩阵的LU分解。该函数的调用格式如下:

① [L,U] = lu(X)
② [L,U,P] = lu(X)

其中,返回矩阵U为上三角阵,矩阵L为下三角阵或其变换形式,且满足LU=X。返回矩阵P为单位矩阵的行变换矩阵,满足LU=PX。

【例3.24】矩阵X的LU分解
在命令窗口中输入以下内容,创建矩阵X:
>> X=[5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;4 5 6 7 8];
①对矩阵X进行LU分解,在命令窗口输入:
>> [L,U] = lu(X) %对矩阵X进行LU分解

###3.2.2 奇异值分解
奇异值分解在矩阵分析中占有极其重要的作用。MATLAB提供了用于矩阵奇异值分解的函数svd,该函数是利用LINPACK程序库中的ZSVDC编制而成的。在计算的过程中假如经过75步QR分解仍得不到一个奇异值,那么系统会给出“不收敛”的提示。奇异值分解函数svd的几种调用格式如下:

① s = svd (X)
② [U,S,V] = svd (X)
③ [U,S,V] = svd (X,0)

其中,命令①返回向量s包含矩阵X分解所得到的全部奇异值向量。命令② 返回一个与X同大小的对角矩阵S和两个酉矩阵U与V,且满足= USV‘。命令③ 得到一个“有效大小”的分解,如果m×n维矩阵X中m>n则只计算出矩阵U的前n列,矩阵S的大小为n×n。

【例3.25】奇异值分解。
在命令窗口中输入以下内容,创建矩阵b1。
>> b1=[1 2 3;4 5 6;7 8 9;2 4 6;5 7 5];
①对b1进行奇异值分解,返回一个与b1同大小的对角矩阵S以及两个酉矩阵U和V。在命令窗口中输入:
>> [U,S,V] = svd (b1) %对b1进行奇异值分解
②对b1进行奇异值分解,调用能得到一个“有效大小”的分解的函数格式,返回对角矩阵S以及两个酉矩阵U和V。在命令窗口中输入:
>> [U,S,V] = svd (b1,0) %对b1进行奇异值分解

###3.2.3 特征值分解
MATLAB提供了eig函数来对矩阵进行特征值分解,该函数的几种调用格式如下:

① d = eig(A)
② d = eig(A,B)
③ [V,D] = eig(A)
④ [V,D] = eig(A,‘nobalance‘)
⑤ [V,D] = eig(A,B)
⑥ [V,D] = eig(A,B,flag)

其中,①计算矩阵A的特征值d,返回结果以向量形式存放。②计算方阵A和B的广义特征值d,返回结果以向量形式存放。③计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。④计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。当矩阵A中有与截断误差数量级相差不远的值时,该指令可能更精确。‘nobalance‘起误差调节作用。⑤计算矩阵A和B的广义特征值向量阵V和广义特征值阵D,满足AV=BVD。最后一条命令⑥由flag指定算法计算矩阵A和B的特征值D和特征向量V。其中,flag的可能值为:‘chol‘ 和‘qz‘ 。当flag值为‘chol‘时表示对B使用Cholesky分解算法,其中A为对称Hermitian矩阵,B为正定阵。当flag值为‘qz‘时表示使用QZ算法,其中A、B为非对称或非Hermitian矩阵。

【3.26】特征值分解
在命令窗口中输入以下内容,创建矩阵A。
>> A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9];
对矩阵A进行特征值分解,在命令窗口输入:
>> [V,D] = eig(A) %对矩阵A进行特征值分解

###3.2.4 Cholesky分解
MATLAB提供了chol函数来对矩阵进行Cholesky分解,该函数的调用格式为:

①R = chol(X)
②[R,p] = chol(X)

函数调用格式①如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R‘*R = X;若X非正定,则产生错误信息。②不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。

【例3.27】Cholesky分解
在命令窗口中输入以下内容,创建矩阵A。
>> A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9];
对矩阵A进行Cholesky分解,在命令窗口中输入:
>> [R,p] = chol(A) %对矩阵A进行Cholesky分解

###3.2.5 QR分解
正交矩阵是指矩阵的列向量相互正交,且各个列向量的长度相等。QR分解就是将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。MATLAB提供了用于矩阵QR分解的函数,表3.7中介绍用于矩阵QR分解的函数调用格式和功能。
表3.7 矩阵QR分解
函数名 功能
[Q,R] = qr(A) 求得正交矩阵Q和上三角阵R,Q和R满足A=QR
[Q,R,E] = qr(A) 求得正交矩阵Q、上三角阵R和单位矩阵的变换形式矩阵E,R的对角线元素按大小降序排列,满足AE=QR
[Q,R] = qr(A,0) 产生矩阵A的“经济大小”分解
[Q,R,E] = qr(A,0) E的作用是使得R的对角线元素降序,且Q*R=A(:, E)
R = qr(A) 稀疏矩阵A的分解,只产生一个上三角阵R,满足R‘R = A‘A,这种方法计算A‘*A时减少了内在数字信息的损耗
[C,R] = qr(A,b) 用于稀疏最小二乘问题:minimize 的两步解:[C,R] = qr(A,b),x = R\c
R = qr(A,0) 针对稀疏矩阵A的经济型分解
[C,R] = qr(A,b,0) 针对稀疏最小二乘问题的经济型分解
[Q,R]= qrdelete(Q,R,j) 返回将矩阵A的第j列移去后的新矩阵的qr分解
[Q,R]= qrinsert(Q,R,j,x) 在矩阵A中第j列插入向量x后的新矩阵进行qr分解。若j大于A的列数,表示在A的最后插入列x

###3.2.6 Schur分解
Schur分解将使用schur函数,该函数的调用格式为:

①T = schur(A)
②T = schur(A,flag)
③[U,T] = schur(A,…)

命令行①-③返回正交矩阵U和schur矩阵T,满足A = UTU‘。其中,若A有复特征根,则flag=‘complex‘,否则flag=‘real‘。

【例3.31】Schur分解
在命令窗口输入以下内容,创建矩阵K。
>> K=magic(3); %生成3阶的魔方阵
对矩阵K进行Schur分解,在命令窗口输入:
>> [U,T]=schur(K) %对矩阵K进行Schur分解

###3.2.7 复数特征值对角阵与实数块特征值对角阵的转换
即使是实阵,在其特征值中也可能出现复数。实际使用中常需要把这一对对共轭复数特征值转化为一个(2x2)的实数块。函数调用格式为:

① [VC,DC] = rsf2csf (VR,DR) % 将实舒尔形式转化成复舒尔形式
② [VR,DR] = cdf2rdf (VC,DC) %将复舒尔形式转化成实舒尔形式

【例3.32】复数特征值对角阵与实数块特征值对角阵的转换
在命令窗口输入以下内容,创建矩阵B。
>> B=[5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;4 5 6 7 8];
首先对矩阵B进行Schur分解,在命令窗口输入:
>> [u,t]=schur (B) %对矩阵B进行Schur分解
然后将实舒尔形式转化成复舒尔形式,在命令窗口输入:
>> [U,T]=rsf2csf (u,t) %实舒尔形式转化成复舒尔形式

###3.2.8 广义奇异值分解
MATLAB提供了gsvd函数对矩阵进行广义奇异值分解,其具体调用格式为:

①[U,V,X,C,S] = gsvd(A,B)
②[U,V,X,C,S] = gsvd(A,B,0)
③sigma = gsvd (A,B)

其中,函数调用格式①返回酉矩阵U和V、一个普通方阵X、非负对角矩阵C和S,满足A = UCX‘,B = VSX‘,C‘C + S‘S = I (I为单位矩阵)。A和B的列数必须相同,行数可以不同。函数调用格式②和①基本相同,而③则返回广义奇异值sigma值。

【例3.33】广义奇异值分解
在命令窗口输入以下内容,创建矩阵AO和d。
>> AO=[1 2 3 4 5 6 7 8;2 3 4 5 6 7 8 9;3 4 5 6 7 8 9 0]‘;
>> d=magic(3); %生成3阶的魔方阵
对矩阵AO进行广义奇异值分解,在命令窗口输入:
>> [U,V,X,C,S] = gsvd(AO,d) %对矩阵AO进行广义奇异值分解

###3.2.9 特征值问题的QZ分解
MATLAB提供了qz函数对矩阵进行特征值问题的QZ分解,该函数的调用格式为:

①[AA,BB,Q,Z,V] = qz(A,B)
②[AA,BB,Q,Z,V] = qz(A,B,flag)

其中函数调用格式①中A、B为方阵,返回结果AA和BB为上三角阵,Q、Z为正交矩阵或其列变换形式,V为特征向量阵,且满足QAZ= AA 和QBZ = BB。命令行②产生由flag决定的分解结果,flag取值为‘complex‘表示复数分解(默认);取值为‘real‘表示实数分解。

【例3.34】特征值问题的QZ分解
在命令窗口输入以下内容,创建矩阵A和B。
>> A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9];
>> B=[5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;4 5 6 7 8];
对矩阵A、B进行特征值问题的QZ分解,在命令窗口输入:
>> [AA,BB,Q,Z,V] = qz(A,B) %对矩阵A、B进行特征值问题的QZ分解

###3.2.10 海森伯格形式的分解
如果矩阵H的第一子对角线下元素都是0,则H为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵,则它的海森伯格形式是对角三角阵。MATLAB可以通过相似变换将矩阵变换成这种形式,具体调用格式为:

①H = hess(A) 返回矩阵A的海森伯格形式
②[P,H] = hess(A) P为酉矩阵,满足:A = PHP‘ 且P‘P = eye(size(A))
【例3.35】海森伯格形式的分解
在命令窗口输入以下内容,创建矩阵A。
>> A=[1 2 3 4 5;5 3 4 8 5;6 8 7 6 9;2 6 8 2 1;2 7 9 3 9;]
计算矩阵A的海森伯格形式,可在命令窗口输入:
>> [P,H]=hess(A) %返回矩阵A的海森伯格形式

作者:德特数据
联系方式:[email protected]

原文地址:http://blog.51cto.com/14047253/2310312

时间: 2024-08-03 13:16:33

MATLAB编程与应用系列-第3章 矩阵运算(4)的相关文章

MATLAB编程与应用系列-第3章 矩阵运算(1)

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] 本章将介绍与MATLAB矩阵运算有关相关的内容.矩阵运算是MATLAB的基础,是MATLAB强大计算功能的体现.这一章的内容可以帮助读者解决一些学习和工作中常遇到的实际问题,让读者了解

MATLAB编程与应用系列-第3章 矩阵运算(2)

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] ###3.1.5 矩阵函数MATLAB提供了丰富的函数来实现对矩阵的各种运算,下面将逐步介绍.因篇幅关系,将不作数学方面的解释.表3.1所示为常用的矩阵运算函数以及函数相对应的功能描述

MATLAB编程与应用系列-第3章 矩阵运算(3)

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] ###3.1.8 矩阵和数组运算比较在进行矩阵和数组运算的时候,要认识到矩阵和数组类似运算的区别,两种运算指令形式和实质内涵的异同见表3.3.其中S为标量,A.B为矩阵.表3.3 矩阵

MATLAB编程与应用系列-第1章 MATLAB概述

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] 在科学研究和工程计算领域经常会遇到一些非常复杂的计算问题,利用计算器或手工计算是无法胜任的,只能借助计算机编程来实现,MATLAB正是解决这样复杂计算问题的强大的科学计算软件.MATL

MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(1)

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] MATLAB中的数学计算部分包括数值计算和符号计算两大部分,数值计算是MATLAB的核心,在数值计算过程中,同样需要辅以适当的符号运算,目前符号运算的发展也非常完善,同样得到广泛的应用

MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作(2)

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] 2.2 数组及矩阵的创建和操作 本节将介绍数组及矩阵的创建和操作,包括数组的输入以及数组元素的操作.由于数组和矩阵在创建和寻访的处理方式类似,因此将两者综合一起说明. ###2.2.1

MATLAB编程与应用系列-关于MATLAB编程入门教程的总体编写安排

本系列教程来源于出版设计<基于MATLAB编程基础与典型应用书籍>,如涉及版权问题,请联系:[email protected]. 出版社:人民邮电出版社, 页数:525. 本系列教程目前基于MATLABR2006a,可能对于更高级版本的功能和函数有差异,教程中如有问题,请联系:[email protected] #MATLAB基本介绍Matlab工程软件是MathWorks公司推出的一款具备强大数学运算能力的数学软件.随着工具箱的不断丰富和完善,Matlab工程软件几乎可以应用于社会各种工程领

异步编程系列第04章 编写Async方法

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而

异步编程系列第03章 自己写异步代码

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而