矩阵是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语言中,可利用;
生成一个步长相等的一维数组或行向量;规则如下:
举个栗子
>> 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
函数生成初值、终值和元素个数已知的一维数组或行向量,元素之间是等差数列;规则如下:
举个栗子
>> 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 =
列 1 至 13
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
列 14 至 26
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
列 27 至 39
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
列 40 至 52
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
列 53 至 65
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
列 66 至 78
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
列 79 至 91
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
列 92 至 100
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
,则该函数生成a
到pi
之间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)
表示生成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)
表示生成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)
表示生成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)
表示生成n
n
的魔方矩阵*(n大于0且n不等于2)**
举个栗子
>> X=magic(3)
X =
8 1 6 3 5 7 4 9 2
|
附注
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)
表示生成以向量v
元素作为矩阵X
的第k
条对角线元素的对角矩阵
- 当
k
=0时,v
为X
的主对角线;当k
>0时,v
为X
的主对角线上方第k
条对角线的元素;当k
<0时,v
为X
的主对角线下方第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语言中可以使用tril
和triu
函数来生成三角矩阵,其调用方式如下:
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
的第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
为原矩阵,B
和C
为要扩展的元素,M
为扩展后的矩阵
B
和C
的行数都要相等
B
和C
的列数之和要与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)
表示将矩阵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)
表示三维拼接
举个栗子
>> 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
函数来上下变换矩阵的结构,调用方式如下:
举个栗子
>> 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
函数来左右变换矩阵的结构,调用方式如下:
举个栗子
>> 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)
表示将矩阵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语言中转置用'
运算符,方式如下:
举个栗子
>> A=[1 2;3 4]
A =
1 2 3 4
>> M=A'
M =
1 3 2 4
|
变维
MATLAB语言可以使用reshape
函数实现矩阵变维,调用方式如下:
M=reshape(A,m,n)
表示以矩阵A
的元素构成m*n
维M
矩阵
举个栗子
>> 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)*B
;B/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的整数时,矩阵A
的n
次乘方运算可以表示为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语言中,点运算是一种特殊的运算,其运算符有.*
、./
、.\
、.^
四种。点运算规则是对应元素进行相关运算,具体如下:
- 若两个矩阵
A
和B
进行点乘运算,要求矩阵维度相同,对应元素相乘
- 若
A
和B
两个矩阵同维,则A./B
表示A
矩阵除以B
矩阵的对应元素;B.\A
表示A
矩阵除以B
矩阵的对应元素
- 若
A
和B
两个矩阵同维,则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
|