理论教育 矩阵初等运算:运筹学实验指导及MATLAB

矩阵初等运算:运筹学实验指导及MATLAB

时间:2023-11-17 理论教育 版权反馈
【摘要】:例2.3对一些特殊矩阵,用相关命令生成,如单位阵、全0阵、幻方阵、全1阵等。例2.4对已经得到的矩阵进行合成或提取。例2.10生成全1阵,即一个矩阵的所有元素都是1,这在赋初值时很有用。矩阵与常数间的运算例2.19A+1,表示A中每个元素加1。

矩阵初等运算:运筹学实验指导及MATLAB

1.矩阵的生成

MATLAB中数据的结构形式就是一个矩阵。矩阵的建立方法如下:

①直接输入法

②冒号法;

③函数法;

④矩阵的编辑。

例2.2

直接输入小矩阵,其中同一行用逗号或空格分开,不同的行用分号分隔,整体用中括号[ ]括起。

例2.3

对一些特殊矩阵,用相关命令生成,如单位阵、全0阵、幻方阵、全1阵等。

例2.4

对已经得到的矩阵进行合成或提取。

提取矩阵a的第一列,同样,可以用a(1,:)来提取第一行,用a(:,2)来提取第二列,依此类推。

例2.5

向量的生成:用线性等间距生成向量矩阵。

其中,start为起始值;step为步长;end为终止值。当步长为1时,可省略step参数,另外,step也可以取负数。

例2.6

两个a合成一个大的矩阵c,观察其结构,为水平连接,如果为竖直连接,则为:

例2.7

生成矩阵A,然后把矩阵A的第1,3列去掉,这样的方法很直接,比起用循环或者其他方式要快很多。

例2.8

zeros(N)——生成N×N的全0矩阵,一般在赋初值时用到,可以避免在计算时为变量开辟新的内存。

zeros(M,N)——生成M×N的全0矩阵。

zeros(size(A))——与A相同大小。注意,size(A)是计算矩阵A的行和列,结果为[r,c],其中,r表示行数,c表示列数。

例2.9

eye(N),单位矩阵,生成主对角线为1的N行N列的矩阵。

例2.10

生成全1阵,即一个矩阵的所有元素都是1,这在赋初值时很有用。

Y=ones(n):生成n×n全1矩阵。

Y=one(m,n):生成m×n全1矩阵。

Y=ones([m,n]):生成m×n全1矩阵。

Y=ones(d1,d2,d3):生成d1×d2×d3全1矩阵。

Y=ones([d1,d2,d3]):生成d1×d2×d3全1矩阵。

Y=ones(size(A)):生成与矩阵A大小相同的全1矩阵。

例2.11

rand——生成随机数,为一个数,取值范围为0~1。

例2.12

round( )函数:取整函数。

如果要得到整数,如0~100,则可以将原来0~1的数乘以100后取整。round是向原点取整,即取最靠近原点的整数,如round(3.3)=3;round(-3.3)=-3。

例2.13

cat( )函数:A=cat(n,A1,A2,…,Am),创建多维数组

这里n=3是构造三维数组,n=1和2分别构造[A1;A2]及[A1,A2],都是二维数组。

例2.14

Y=blkdiag(a,b,c):产生以a,b,c为对角线元素的矩阵。

例2.15 求多项式(x-1)(x+2)(x-3)=x3-8x+13的酉矩阵和根。

A=company(u):u为多项式系统向量,A为酉矩阵,A的特征值就是多项式的特征根。

例2.16

H=hilb(n):产生n阶希尔伯特矩阵。

2.矩阵的转置

例2.17

对实矩阵用“′”符号或“·′”求转置,结果是一样的。

对于含复数的矩阵,“′”是同时对复数进行共轭处理,而“·′”只是将其排列形式进行转置。

magic是魔方生成命令,参数为几次。

3.矩阵元素的提取与替换

(1)单个元素的提取

如:

运行后

输入

运行后

(2)提取矩阵中某一行的元素

如:

运行后

输入

运行后

(3)提取矩阵中某一列

如:

运行后

输入

运行后

(4)提取矩阵中的多行元素

如:

运行后

输入

运行后

(5)提取矩阵中的多列元素

如:

运行后

输入

运行后

(6)提取矩阵中多行多列交叉点上的元素

如:

运行后

输入

运行后

(7)单个元素的替换

如:

运行后

输入

运行后

4.矩阵的高级运算

(1)矩阵群运算

MATLAB的运算符∗,/,\和^,指数函数expm,对数函数logm和开方函数sqrtm是对矩阵进行运算,即把矩阵作为一个整体来运算;其他MATLAB函数都是对矩阵中的元素进行运算,英文直译为数组运算(Array Operations),也可译为元素群运算。

幂次运算:矩阵为底数、指数是标量,与矩阵乘法一样。为保证内阶数相同,底数的矩阵必须是方阵。按矩阵运算,等于D∗D。(www.daowen.com)

矩阵是指数、底数是标量,矩阵也必须是方阵。底数和指数不能同时为矩阵。

按矩阵运算,求平方根,可以用U1∗U1=S表示,如果是一个数字,比如5,表示它的根号使用下面三个是等效的,都可以正确运行:

50.5;sqrt(5);sqrtm(5)

如果是个矩阵A,表示A的根号,则sqrt(A)表示A中各个元素开根号,然后形成一个新矩阵。sqrtm(A)得出的结果是一个新矩阵B,且满足A=B∗B,而A0.5则会出错,不能运行。但是A.0.5是正确的(注意A后面有个点),它的意思和sqrt(A)的相同。

例2.18

这里的A3,是(A∗A∗A),不是各元素的3次方。要注意的是,矩阵相乘对行列有要求,并且并非所有的矩阵都是可交换的。

(2)矩阵与常数间的运算

例2.19

A+1,表示A中每个元素加1。

2∗A,表示A中每个元素乘以2。

A/3,表示A中每个元素都除以3(常数通常只能作除数)。

(3)矩阵的逆运算

例2.20

需要注意的是,并非所有矩阵都有逆,可逆的充要条件是行列式值为非0数。手工求逆也是经常用到的,基本思路是对原矩阵右边接上一个单位矩阵,然后进行行变换。

5.行列式

例2.21

MATLAB中矩阵A的行列式,可以直接用MATLAB的函数det解决。

调用格式是:

注意:A必须是方阵,否则,函数运行会报错。

6.求秩函数

例2.22

矩阵的秩有很多种方法,MATLAB的rank函数是借助矩阵奇异值分解的方法来计算的。

7.迹函数

例2.23

即求对角线元素的和,主要是针对方阵的,如果不是方阵,也可以得到一个结果。

8.稀疏矩阵非零元素的索引

例2.24

[i,j,k]=find(S):检索S中非零元素的行标i、列标j及对应元素值v。

9.外部数据转换为稀疏矩阵

例2.25

S=spconvert(D):D共有3列,第一列为行下标,第二列为列下标,最后一列为元素值。

10.矩阵的加减法

采用MATLAB进行矩阵加、减法运算时,需要注意:

①参与加、减运算的矩阵必须同维。

②A/B时,A,B列数必须相同;A\B时,A,B行数必须相同。

③矩阵左乘与右乘不同,左除与右除不同。即A∗B不等于B∗A,A\B不等于A/B。

④标量或函数与矩阵的运算等于该标量或函数与矩阵的每一个元素的运算。

语句size检查矩阵阶数,两矩阵相加,阶数必须相同。

两相加、减的矩阵中,有一个是标量时,MATLAB将标量扩展成同等元素矩阵,与另一矩阵相加减。

11.矩阵的乘法

n×p阶矩阵A与p×m阶矩阵B的乘积C是n×m阶矩阵。p是A阵的列数、B阵的行数,称为两个相乘矩阵的内阶数。两矩阵相乘的必要条件是内阶数相等。

A与B的乘积的第i行第j列元素的值为A阵第i行和B阵第j列对应元素乘积的和。标量与矩阵相乘,不检查阶数,标量乘以矩阵的每一个元素。x与y内阶数不同,将y转置y′。

读作x左乘y′。

x右乘y′。

左、右乘结果不同,只有单位矩阵例外。单位矩阵乘以矩阵A,左、右乘结果仍等于该矩阵。

方程组x1+2x2+3x3=2,3x1–5x2+4x3=0,7x1+8x2+9x3=2,可以表示为ax′=b。

12.矩阵的除法及线性方程组的解

n×n阶方阵A和同阶的方阵V相乘,得出n阶单位矩阵I。

I为eye(n)。

V是A的逆阵。V存在条件:A的行列式不等于0,det(A)≠0,V=A-1

MATLAB内部函数inv,得出A的逆阵V。

D与B行数相等。

两端同时左乘inv(D)逆阵。

D\B为D左除B,左除时,阶数检查条件:两矩阵的行数必须相等。

未知矩阵在左。

解线性方程组Ax=B。

6x1+3x2+4x3=3

-2x1+5x2+7x3=-4

8x1-4x2-3x3=-7

13.矩阵结构形式的提取及变换

(1)矩阵元素的重排

函数B=reshape(A,m,n)。

返回的是一个m×n矩阵B,矩阵B的元素就是矩阵A的元素,若矩阵A的元素不是m×n个,则提示错误。B=reshape(A,m,n,p):返回的是一个多维的数组B,数组B中的元素个数和矩阵A中的元素个数相等。B=reshape(A,…,[ ],…):可以默认其中的一个维数。B=reshape(A,siz):由向量siz指定数组B的维数,要求siz的各元素之积等于矩阵A的元素个数。

(2)矩阵的复数排列

函数B=repmat(A,n)。

返回值B是一个n×n块大小的矩阵,每一块矩阵都是A。B=reshape(A,m,n):返回值B是由m×n个块组成的大矩阵,每一个块都是矩阵A。B=reshape(A,[m,n,p,…]):返回值B是一个多维数组形式的块,每一个块都是矩阵A。

(3)矩阵的左右翻转

函数flipir,调用格式:

B=fliplr(A):将矩阵A左右翻转成矩阵B。

(4)矩阵上下翻转

函数flipud,调用格式:

B=flipud(A):把矩阵A上下翻转成矩阵B。

多维数组翻转函数flipdim,调用格式:

B=flipud(A,dim):把矩阵或多维数组A沿指定维数翻转成B。

(5)矩阵的旋转

函数rot90,调用格式:

B=rot90(A):矩阵B是矩阵A沿逆时针方向旋转90°。

B=rot90(A,k):矩阵B是矩阵A沿逆时针方向旋转k·90°(要想顺时针旋转,k取-1)。

(6)对角线函数

对角线函数diag既可以用来生成矩阵,又可以用来生成提取矩阵的对角线元素,其调用格式为:

①A=diag(v,k):当v是有n个元素的向量时,返回矩阵A是行列数为n+|k|的方阵。向量v的元素位于A的第k条对角线上。k=0对应主对角线,k>0对应主对角线以上,k<0对应主对角线以下。

②A=diag(v):将向量v的元素放在方阵A的主对角线上,等同于A=diag(A,k)中k=0的情况。

③v=diag(A,k):提取矩阵A的第k条对角线上的元素于列向量v中。

④v=diag(A):提取矩阵A的主对角线元素于v中,这种调用等同于v=diag(A,k)中k=0的情况。

(7)下三角阵的提取

函数tril,调用格式:

①L=tril(A):提取矩阵A的下三角部分。

②L=tril(A,k):提取矩阵A的第k条对角线以下部分。k=0对应主对角线,k>0对应主对角线以上,k<0对应主对角线以下。

(8)上三角阵的提取

函数triu,调用格式:

①U=triu(A):提取矩阵A的上三角部分元素。

②U=triu(A,k):提取矩阵A的第k条对角线以上的元素。k=0对应主对角线,k>0对应主对角线以上,k<0对应主对角线以下。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈