0%

MATLAB矩阵及其运算

矩阵是MATLAB最基本和最重要的数据对象,因为MATLAB中大部分的运算是基于矩阵运算。

矩阵的创建

直接输入矩阵

MATLAB语言最简单的创建矩阵的方法是在命令窗口直接输入矩阵;规则如下:

  • 将所有矩阵元素置于同一[]

  • 同一行的不同元素之间用,或者空格符来分隔

  • 不同行用;或者回车符分隔

举个栗子

生成矩阵A:

>> A=[1 2 3;4 5 6;6 8 9]

A =

1 2 3
4 5 6
6 8 9

冒号生成矩阵

在MATLAB语言中,可利用;生成一个步长相等的一维数组或行向量;规则如下:

x=a:step:b
  • a是一维数组或行向量的第一个元素,b是其最后一个元素,step是步长增量

  • 冒号表达式可生成一个由a开始到b结束,以步长step自增或自减(step<0,b<a)的一维数组或行向量

  • 如果步长step=1,则冒号表达式可以省略步长

举个栗子

>> X1=1:1:10

X1 =

1 2 3 4 5 6 7 8 9 10
>> X2=1:10

X2 =

1 2 3 4 5 6 7 8 9 10
>> X3=10:-2:0

X3 =

10 8 6 4 2 0

利用函数生成矩阵

linspace函数

MATLAB语言可用linspace函数生成初值、终值和元素个数已知的一维数组或行向量,元素之间是等差数列;规则如下:

x=linspace(a,b,n)
  • ab分别是生成一维数组或行向量的初值和终值,n是元素个数;n省略时,自动生成100个元素

  • a>b,元素之间是等差递减;当a<b,元素之间是等差递增

举个栗子
>> X1=linspace(1,10,10)

X1 =

1 2 3 4 5 6 7 8 9 10
>> X2=linspace(10,6,5)

X2 =

10 9 8 7 6
>> X3=linspace(1,10)

X3 =

113

1.0000 1.0909 1.1818 1.2727 1.3636 1.4545 1.5455 1.6364 1.7273 1.8182 1.9091 2.0000 2.0909

1426

2.1818 2.2727 2.3636 2.4545 2.5455 2.6364 2.7273 2.8182 2.9091 3.0000 3.0909 3.1818 3.2727

2739

3.3636 3.4545 3.5455 3.6364 3.7273 3.8182 3.9091 4.0000 4.0909 4.1818 4.2727 4.3636 4.4545

4052

4.5455 4.6364 4.7273 4.8182 4.9091 5.0000 5.0909 5.1818 5.2727 5.3636 5.4545 5.5455 5.6364

5365

5.7273 5.8182 5.9091 6.0000 6.0909 6.1818 6.2727 6.3636 6.4545 6.5455 6.6364 6.7273 6.8182

6678

6.9091 7.0000 7.0909 7.1818 7.2727 7.3636 7.4545 7.5455 7.6364 7.7273 7.8182 7.9091 8.0000

7991

8.0909 8.1818 8.2727 8.3636 8.4545 8.5455 8.6364 8.7273 8.8182 8.9091 9.0000 9.0909 9.1818

92100

9.2727 9.3636 9.4545 9.5455 9.6364 9.7273 9.8182 9.9091 10.0000

logspace函数

MATLAB语言可用logspace函数生成一维数组或行向量,元素之间是对数等比数列;规则如下:

  • 第一个元素是10^a,最后一个元素是10^b,元素个数是n
  • 如果b的值是pi,则该函数生成api之间n个对数等比数列
举个栗子
>> X1=logspace(1,2,10)

X1 =

10.0000 12.9155 16.6810 21.5443 27.8256 35.9381 46.4159 59.9484 77.4264 100.0000
>> X2=logspace(1,pi,10)

X2 =

10.0000 8.7928 7.7314 6.7980 5.9774 5.2558 4.6213 4.0634 3.5729 3.1416

利用文本文件生成矩阵

MATLAB语言中的矩阵还可以由文本文件(.txt)生成。在软件安装目录\bin路径下新建文本文件并在其中输入矩阵,然后在命令窗口内使用load函数调用该文本文件。

文件内容不含变量名称,文件名为矩阵变量名。

举个栗子

生成矩阵A:

>> load A.txt
>> A

A =

1 2 3
4 5 6
7 8 9

特殊矩阵的生成

单位矩阵

MATLAB语言中可使用eye函数来生成单位矩阵,其调用方式如下:

X1=eye(n);
X2=eye(m,n)
  • X1=eye(n)表示生成n*n的单位矩阵
  • X2=eye(m,n)表示生成m*n的单位矩阵

举个栗子

>> X1=eye(3)

X1 =

1 0 0
0 1 0
0 0 1
>> X2=eye(4,5)

X2 =

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0

0矩阵

MATLAB语言中可使用zeros函数来生成0矩阵,其调用方式如下:

X1=zeros(n);
X2=zeros(m,n)
  • X1=zeros(n)表示生成n*n的0矩阵
  • X2=zeros(m,n)表示生成m*n的0矩阵

举个栗子

>> X1=zeros(3)

X1 =

0 0 0
0 0 0
0 0 0
>> X2=zeros(4,5)

X2 =

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

1矩阵

MATLAB语言中可使用ones函数来生成1矩阵,其调用方式如下:

X1=ones(n);
X2=ones(m,n)
  • X1=ones(n)表示生成n*n的1矩阵
  • X2=ones(m,n)表示生成m*n的1矩阵

举个栗子

>> X1=ones(3)

X1 =

1 1 1
1 1 1
1 1 1
>> X2=ones(4,5)

X2 =

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

魔方矩阵

魔方矩阵是指行和列、正和反斜对角线元素之和都相等的矩阵,MATLAB语言中可使用magic函数来生成魔方矩阵,其调用方式如下:

X=magic(n)

X=magic(n)表示生成nn的魔方矩阵*(n大于0且n不等于2)**

举个栗子

>> X=magic(3)

X =

8 1 6
3 5 7
4 9 2
附注
  • 计算每列的和

    >> A=sum(X)

    A =

    15 15 15
  • 计算每行的和

    >> B=sum(X')

    B =

    15 15 15

0~1均匀分布随机矩阵

MATLAB语言中可使用rand函数生成0~1均匀分布的随机矩阵,其调用方式如下:

X1=rand(n);
X2=rand(m,n);
X3=a+(b-a)*rand(m,n)
  • X1=rand(n)表示生成n*n个元素值为0~1均匀分布的随机矩阵
  • X2=rand(m,n)表示生成m*n个元素值为0~1均匀分布的随机矩阵
  • X3=a+(b-a)*rand(m,n)表示生成m*n个元素值为a~b均匀分布的随机矩阵

举个栗子

>> X1=rand(3)

X1 =

0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
>> X2=rand(2,3)

X2 =

0.9649 0.9706 0.4854
0.1576 0.9572 0.8003
>> X3=10+(15-10)*rand(2,3)

X3 =

10.7094 14.5787 14.7975
12.1088 13.9610 13.2787

正态分布随机矩阵

MATLAB语言中可使用randn函数生成均值为0,单位方差的正态分布随机矩阵,其调用方式如下:

X1=randn(n);
X2=randn(m,n);
X3=a+sqrt(b)*randn(m,n)
  • X1=randn(n)表示生成n*n个元素且均值为0,方差为1的正态分布随机矩阵
  • X2=randn(m,n)表示生成m*n个元素且均值为0,方差为1的正态分布随机矩阵
  • X3=a+sqrt(b)*randn(m,n)表示生成m*n个元素且均值为a,方差为b的正态分布随机矩阵

举个栗子

>> X1=randn(3)

X1 =

-1.2075 0.4889 -0.3034
0.7172 1.0347 0.2939
1.6302 0.7269 -0.7873
>> X2=randn(2,3)

X2 =

0.8884 -1.0689 -2.9443
-1.1471 -0.8095 1.4384
>> X3=1+sqrt(0.1)*randn(2,3)

X3 =

1.1028 1.4333 0.9677
0.7613 0.4588 0.9236

对角矩阵

MATLAB语言中可以使用diag函数来生成对角矩阵,其调用方式如下:

X=diag(v,k)
  • X=diag(v,k)表示生成以向量v元素作为矩阵X的第k条对角线元素的对角矩阵
  • k=0时,vX的主对角线;当k>0时,vX的主对角线上方第k条对角线的元素;当k<0时,vX的主对角线下方第k条对角线的元素

举个栗子

>> v=[3,2,1];
>> X1=diag(v)

X1 =

3 0 0
0 2 0
0 0 1

>> X2=diag(v,1)

X2 =

0 3 0 0
0 0 2 0
0 0 0 1
0 0 0 0

>> X3=diag(v,-1)

X3 =

0 0 0 0
3 0 0 0
0 2 0 0
0 0 1 0

X是一个矩阵,则diag(X)是提取矩阵X的对角线矩阵。

举个栗子

>> X=[1,2,3;4,5,6]

X =

1 2 3
4 5 6

>> Y=diag(X)

Y =

1
5

三角矩阵

MATLAB语言中可以使用triltriu函数来生成三角矩阵,其调用方式如下:

X1=tril(X,k);
X2=triu(X,k)
  • X1=tril(X,k)表示生成矩阵X中第k条对角线的下三角部分的矩阵
  • X2=triu(X,k)表示生成矩阵X中第k条对角线的上三角部分的矩阵
  • k=0为X的主对角线;k>0为X的主对角线以上;k<0为X的主对角线以下

举个栗子

>> X=ones(4);
>> X1=tril(X,-2)

X1 =

0 0 0 0
0 0 0 0
1 0 0 0
1 1 0 0

>> X2=triu(X,0)

X2 =

1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1

矩阵的修改

矩阵部分替换

MATLAB语言可以部分替换矩阵的某个值、某行或某列,方式如下:

A(m,n)=a1;
A(m,:)=[a1,a2,...,an];
A(:,n)=[a1,a2,...,am]
  • A(m,n)=a1表示替换矩阵A中的第m行,第n列元素为a1
  • A(m,:)=[a1,a2,...,an]表示替换矩阵A中第m行的所有元素为a1,a2,...,an
  • A(:,n)=[a1,a2,...,am]表示替换矩阵A中第n列的所有元素为a1,a2,...,am

举个栗子

>> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3
4 5 6
7 8 9

>> A(2,2)=10

A =

1 2 3
4 10 6
7 8 9

>> A(2,:)=[14 15 16]

A =

1 2 3
14 15 16
7 8 9

>> A(:,2)=[12 15 18]

A =

1 12 3
14 15 16
7 18 9

矩阵部分删除

MATLAB语言可以部分删除矩阵的行或列,方式如下:

A(:,n)=[];
A(m,:)=[]
  • A(:,n)=[]表示删除矩阵A的第n
  • A(m,:)=[]表示删除矩阵A的第m

举个栗子

>> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3
4 5 6
7 8 9

>> A(2,:)=[]

A =

1 2 3
7 8 9

>> A(:,2)=[]

A =

1 3
7 9

矩阵部分扩展

常用方式

MATLAB语言可以部分扩展矩阵,方式如下:

A=[A;B C]
  • A为原矩阵,BC为要扩展的元素,M为扩展后的矩阵
  • BC的行数都要相等
  • BC的列数之和要与A的列数相等
举个栗子
>> A=[1 0 0 0;0 1 0 0]

A =

1 0 0 0
0 1 0 0

>> B=zeros(2);
>> C=eye(2);
>> M=[A;B C]

M =

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

平铺矩阵函数

MATLAB语言可以利用平铺矩阵函数repmat扩展矩阵,调用方式如下:

M=repmat(A,m,n)
  • M=repmat(A,m,n)表示将矩阵A复制扩展为m*n
举个栗子
>> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3
4 5 6
7 8 9

>> M=repmat(A,2,3)

M =

1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9

指定维数拼接函数

MATLAB语言可以使用指定维数拼接函数cat拼接矩阵,调用方式如下:

M1=cat(1,A,B);
M2=cat(2,A,B);
M3=cat(3,A,B)
  • M1=cat(1,A,B)表示垂直拼接
  • M2=cat(2,A,B)表示水平拼接
  • M3=cat(3,A,B)表示三维拼接
举个栗子
>> A=eye(2);
>> B=zeros(2);
>> M1=cat(1,A,B)

M1 =

1 0
0 1
0 0
0 0

>> M2=cat(2,A,B)

M2 =

1 0 0 0
0 1 0 0

>> M3=cat(3,A,B)

M3(:,:,1) =

1 0
0 1


M3(:,:,2) =

0 0
0 0

矩阵结构变换

上下行对调

MATLAB语言可以使用flipud函数来上下变换矩阵的结构,调用方式如下:

M=flipud(A)
举个栗子
>> A=[1 2 3;4 5 6]

A =

1 2 3
4 5 6

>> M=flipud(A)

M =

4 5 6
1 2 3

左右列对调

MATLAB语言可以使用fliplr函数来左右变换矩阵的结构,调用方式如下:

M=fliplr(A)
举个栗子
>> A=[1 3 6;2 4 8]

A =

1 3 6
2 4 8

>> M=fliplr(A)

M =

6 3 1
8 4 2

逆(顺)时针旋转

MATLAB语言可以使用函数rot90旋转矩阵的结构,调用方式如下:

M1=rot90(A);
M2=rot90(A,k)
  • M1=rot90(A)表示将矩阵A逆时针旋转pi/2
  • M2=rot90(A,k)表示将矩阵A旋转k倍的pi/2;当k>0时,逆时针旋转;当k<0时,顺时针旋转
举个栗子
>> A=[1 2 3;4 5 6]

A =

1 2 3
4 5 6

>> M1=rot90(A)

M1 =

3 6
2 5
1 4

>> M2=rot90(A,-1)

M2 =

4 1
5 2
6 3

转置

MATLAB语言中转置用'运算符,方式如下:

M=A'
举个栗子
>> A=[1 2;3 4]

A =

1 2
3 4

>> M=A'

M =

1 3
2 4

变维

MATLAB语言可以使用reshape函数实现矩阵变维,调用方式如下:

M=reshape(A,m,n)
  • M=reshape(A,m,n)表示以矩阵A的元素构成m*nM矩阵
举个栗子
>> A=1:8

A =

1 2 3 4 5 6 7 8

>> M=reshape(A,2,4)

M =

1 3 5 7
2 4 6 8

矩阵的基本运算(非全部)

矩阵的除法运算

在MATLAB语言中,有左除(运算符:\)和右除(运算符:/)两种除法运算。若矩阵A为非奇异方阵,A\B等效于A的逆矩阵左乘矩阵B,即inv(A)*BB/A等效于A的逆矩阵右乘矩阵B,即B*inv(A)

举个栗子

>> A=[1 2;3 4];
>> B=[1 3;2 1];
>> M1=A\B

M1 =

0 -5.0000
0.5000 4.0000

>> M2=B/A

M2 =

2.5000 -0.5000
-2.5000 1.5000

矩阵的乘方运算

在MATLAB语言中,当A是方阵,n为大于0的整数时,矩阵An次乘方运算可以表示为A^n;当n为小于0的整数时,A^n表示A的逆矩阵的-n次方

举个栗子

>> A=[1 2;3 4];
>> M1=A^2

M1 =

7 10
15 22

>> M2=A^-2

M2 =

5.5000 -2.5000
-3.7500 1.7500

矩阵的点运算

在MATLAB语言中,点运算是一种特殊的运算,其运算符有.*./.\.^四种。点运算规则是对应元素进行相关运算,具体如下:

  • 若两个矩阵AB进行点乘运算,要求矩阵维度相同,对应元素相乘
  • AB两个矩阵同维,则A./B表示A矩阵除以B矩阵的对应元素;B.\A表示A矩阵除以B矩阵的对应元素
  • AB两个矩阵同维,则A.^B表示两个矩阵对应元素进行乘方运算
  • A.^b表示矩阵A的每个元素与标量b做乘方运算;a.^B表示标量a与矩阵B的每个元素进行乘方运算

举个栗子

>> A=[1 2;3 4];
>> B=[1 -1;2 1];
>> C=A.*B

C =

1 -2
6 4

>> C=A./B

C =

1.0000 -2.0000
1.5000 4.0000

>> C=B.\A

C =

1.0000 -2.0000
1.5000 4.0000

>> C=A.^B

C =

1.0000 0.5000
9.0000 4.0000

>> a=2;b=2;
>> C=A.^b

C =

1 4
9 16

>> C=a.^B

C =

2.0000 0.5000
4.0000 2.0000