MATLAB/Simulink权威指南:开发环境、程序设计、系统仿真与案例实战
上QQ阅读APP看书,第一时间看更新

2.4 矩阵分析

矩阵是MATLAB语言的基本运算单元。本节主要介绍矩阵分析与处理的常用函数和功能。

2.4.1 方阵的行列式

一个行数和列数相同的方矩阵可以看作一个行列式,而行列式是一个数值。MATLAB语言用D=det(A)函数求方矩阵的行列式的值。例如:

已知一个方矩阵A=[1 0 1;2 1 0;0 2 1],求行列式的值D。

2.4.2 矩阵的秩和迹

1.矩阵的秩

与矩阵线性无关的行数或者列数称为矩阵的秩。MATLAB语言用r=rank(A)函数求矩阵的秩。例如:

2.矩阵的迹

一个矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。MATLAB语言用t=trace(A)函数求矩阵的迹。例如:

2.4.3 矩阵的逆和伪逆

1.方阵的逆矩阵

对于一个方矩阵A,如果存在一个同阶方矩阵B,使得A·B=B·A=I(其中I为单位矩阵),则称B为A的逆矩阵,A也为B的逆矩阵。

在线性代数里用公式计算逆矩阵相对烦琐,然而,在MATLAB语言里,用求逆矩阵的函数inv(A)求解却很容易。例如:

显然,A∗B=B∗A=I,故B与A是互逆矩阵。

2.矩阵的伪逆矩阵

如果矩阵A不是一个方阵,或者A为非满秩矩阵,那么就不存在逆矩阵,但可以求广义上的逆矩阵B,称为伪逆矩阵,MATLAB语言用B=pinv(A)函数求伪逆矩阵。例如:

在线性代数中,可以用矩阵求逆的方法求解线性方程组的解。将设有n个未知数,由n个方程构成线性方程组,表示为

用矩阵表示为

Ax=b

其中:

线性方程组的解为

x=A1b

所以,利用MATLAB求系数矩阵A的逆矩阵,可以求线性方程组的解。

【例2-3】 利用MATLAB求系数矩阵的逆矩阵方法,求如下线性方程组的解。

MATLAB命令程序如下:

2.4.4 矩阵的特征值和特征向量

矩阵的特征值与特征向量在科学计算中广泛应用。设A为n阶方阵,使得等式Av=Dv成立,则D称为A的特征值,向量v称为A的特征向量。MATLAB语言用函数eig(A)求矩阵的特征值和特征向量,常用下面两种格式:

(1)E=eig(A)求矩阵A的特征值,构成向量E;

(2)[v,D]=eig(A)求矩阵A的特征值,构成对角矩阵,并求A的特征向量v。

例如:

显然,A∗v=v∗D,故D和v分别是A矩阵的特征值和特征向量。

特征值还可以应用于求解一元多次方程的根,具体方法是,先将方程的多项式系数组成行向量a,然后用compan(a)函数构造成伴随矩阵A,最后再用eig(A)函数求A的特征值,特征值就是方程的根。

【例2-4】 用MATLAB求特征值的方法求解一元多次方程的根,方程如下:

x55x45x35x26x=0

MATLAB命令程序如下:

当然,求一元多次方程的根还可以利用多项式函数roots。

显然,用这两种不同方法求解一元多次方程的根,结果是一样的。

2.4.5 矩阵的分解

矩阵有多种分解方法,常见的有对称正定矩阵分解(Cholesky)、高斯消去法分解(LU)、正交分解(QR)和矩阵的奇异值分解(SVD)。

1.对称正定矩阵分解

MATLAB语言中的对称正定矩阵Cholesky分解用函数chol(A),函数语法格式如下:

其中,分解后的R满足R′∗R=A。若A是n阶对称正定矩阵,则R为实数的非奇异上三角矩阵;若A是非正定矩阵,则产生错误信息。

其中,分解后的R满足R′∗R=A。若A是n阶对称正定矩阵,则R为实数的非奇异上三角矩阵,p=0;若A是非正定矩阵,则p为正整数。

例如,已知A=[1 1 1;1 2 3;1 3 6],求该矩阵的Cholesky分解。

MATLAB语言程序代码及结果如下:

由结果可知,Cholesky分解得到的R矩阵是一个实数的非奇异上三角矩阵,且满足R′∗R=A。

当A为非正定矩阵时,用Cholesky分解,错误信息如下:

2.矩阵的高斯消去法分解

高斯消去法分解是在线性代数中矩阵分解的一种重要方法,主要应用在数值分析中,用来解线性方程及计算行列式。矩阵的高斯消去法分解又称为三角分解,是将一个一般方矩阵分解成一个下三角矩阵L和一个上三角矩阵U,且满足A=LU,故称为LU分解。MATLAB语言用lu(A)函数实现LU分解。函数语法格式如下:

其中,L为下三角矩阵或其变换形式,U为上三角矩阵,且满足LU=A。

其中,L为下三角矩阵,U为上三角矩阵,P为单位矩阵的行变换矩阵,且满足LU=PA。

例如,已知A=[1 2 3;4 5 6;7 8 9],求该矩阵的LU分解。

MATLAB语言程序代码及结果如下:

由上述结果可知,LU分解得到的L是一个下三角变换矩阵,U是一个上三角矩阵,且满足L∗U=A。

同样的矩阵A,若用另一种LU分解,结果如下:

由上述结果可知,LU分解得到的L是一个下三角矩阵,U是一个上三角矩阵,P为单位矩阵的行变换矩阵,且满足L∗U=P∗A。

3.矩阵的正交分解

矩阵的正交分解是将一个一般矩阵A分解成一个正交矩阵Q和一个上三角矩阵R的乘积,且满足A=QR,故称为QR分解。

MATLAB语言用qr(A)函数实现QR分解。函数语法格式如下:

其中,Q为正交矩阵,R为上三角矩阵,且满足QR=A。

其中,Q为正交矩阵,R为对角元素按大小降序排列的上三角矩阵,E为单位矩阵的变换形式,且满足QR=AE。

例如,已知A=[1 2 3;4 5 6;7 8 9],求该矩阵的QR分解。

MATLAB语言程序代码及结果如下:

由上述结果可知,QR分解得到的Q是一个正交矩阵,R是一个上三角矩阵,且满足Q∗R=A。

同样的矩阵A,若用另一种QR分解,结果如下:

由上述结果可知,QR分解得到的Q为正交矩阵,R为对角元素按大小降序排列的上三角矩阵,E为单位矩阵的变换形式,且满足Q∗R=A∗E。

4.矩阵的奇异值分解

奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解方法,可以应用在信号处理和统计学等领域。矩阵的奇异值分解是将一个一般矩阵A分解成一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足A=U∗S∗V'。

MATLAB语言用svd(A)函数实现奇异值分解。函数语法格式如下:

s=svd(A)产生矩阵A的奇异值向量。

[U,S,V]=svd(A)产生一个与A同大小的对角矩阵S、两个酉矩阵U和V,且满足A=U∗S∗V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。

例如,已知A=[1 2 3;4 5 6],求该矩阵的奇异值分解。

MATLAB语言程序代码及结果如下:

由上述结果可知,奇异值分解得到的一个与A同大小的对角矩阵S、两个酉矩阵U和V,且满足A=U∗S∗V'。

2.4.6 矩阵的信息获取函数

MATLAB语言提供了很多函数以获取矩阵的各种属性信息,包括矩阵的大小、矩阵的长度和矩阵元素的个数等。

1.size

MATLAB语言可以用size(A)函数来获取矩阵A的行和列的数。函数的调用格式如下:

D=size(A)返回一个行和列数构成两个元素的行向量;

[M,N]=size(A)返回矩阵A的行数为M,列数为N。

例如,已知A=[1 2 3;4 5 6],求该矩阵的行数和列数。

MATLAB语言程序代码及结果如下:

2.length

MATLAB语言可以用length(A)函数来获取矩阵A的行数和列数的较大者,即length(A)=max(size(A))。函数的调用格式如下:

d=length(A)返回矩阵A的行数和列数的较大者。

例如:

3.numel

MATLAB语言可以用numel(A)函数来获取矩阵A的元素的总个数。函数的调用格式如下:

n=numel(A)返回矩阵A的元素的总个数。

例如: