zeros、ones、rand、randn和eye函数当只有一个参数n时,则为n×n的方阵; 当eye(m,n)函数的m和n参数不相等时则单位矩阵会出现全0行或列。 【例2.3】查看eye函数的功能。
X1=eye(2,3)
X1 =
1 0 0 0 1 0
X2=eye(3,2)
X2 =
1 0 0 1 0 0
4. 通过MAT数据文件加载矩阵
通过“load”命令或选择菜单“File”→“Import Data”命令加载MAT数据文件来创建矩阵。
5. 在M文件中创建矩阵
M文件实际上是一种包含MATLAB代码的文本文件; 通过在MATLAB命令窗口中运行M文件创建矩阵。
2.2.2矩阵元素和操作
矩阵和多维数组都是由多个元素组成的,每个元素通过下标来标识。
1. 矩阵的下标 (1) 全下标方式
矩阵中的元素可以用全下标方式标识,即由行下标和列下标表示,一个m×n的a矩阵的第i行第j列的元素表示为a(i,j)。
注意:
? 如果在提取矩阵元素值时,矩阵元素的下标行或列(i,j)大于矩阵的大小(m,n),则
MATLAB会提示出错;
? 而在给矩阵元素赋值时,如果行或列(i,j)超出矩阵的大小(m,n),则MATLAB自动
扩充矩阵,扩充部分以0填充。
a=[1 2;3 4;5 6]
a =
1 2 3 4 5 6
a(3,3) %提取a(3,3)的值
??? Index exceeds matrix dimensions.
a(3,3)=9 %给a(3,3) 赋值
a =
1 2 0 3 4 0 5 6 9
(2) 单下标方式
先把矩阵的所有列按先左后右的次序连接成“一维长列”,然后对元素位置进行编号。 以m×n的矩阵a为例,若元素a(i,j)则对应的“单下标”为s= (i-1)×m+j。
2. 子矩阵块的产生
子矩阵是从对应矩阵中取出一部分元素构成,用全下标和单下标方式取子矩阵。 (1) 用全下标方式
矩阵a为图2.2所示,则:
? 取行数为1、3,列数为2、3的元素构成子矩阵。
a([1 3],[2 3])
ans =
2 0 6 9
? 取行数为1~3,列数为2~3的元素构成子矩阵,“1:3”表示1、2、3行下标。
a(1:3,2:3)
ans =
2 0 4 0 6 9
? 取所有行数即为1~3,列数为3的元素构成子矩阵,“:”表示所有行或列。
a(:,3)
ans = 0 0 9
? 取行数为1~3,列数为3的元素构成子矩阵,用“end”表示某一维数中的最大值,即3。
a(1:3,end)
ans = 0 0 9
(2) 用单下标方式
取单下标为1、3、2、6的元素构成子矩阵。
a([1 3;2 6])
ans =
1 5 3 6
(3) 逻辑矩阵
子矩阵也可以利用逻辑矩阵来标识;
逻辑矩阵是大小和对应矩阵相同,而元素值为0或者1的矩阵。
可以用a(L1,L2)来表示子矩阵,其中L1、L2为逻辑向量,当L1、L2的元素为0则不取该位置元素,反之则取该位置的元素。
【例2.5】利用逻辑矩阵来提取矩阵,其中矩阵a如上图2.2所示。
l1=logical([1 0 1])
%给出逻辑向量l1
l1 =
1 0 1
l2=logical([1 1 0]) %给出逻辑向量l2
l2 =
1 1 0
a(l1,l2)
%取出1、3行且1、2列的元素
ans =
1 2 5 6
【例2.5续】逻辑矩阵可以由矩阵进行逻辑运算得出。
b=a>1 %得出逻辑向量b
b =
0 1 0 1 1 0 1 1 1
a(b) %按单下标顺序排成长列
ans = 3 5 2 4 6 9
3. 矩阵的赋值
? 全下标方式:a(i,j)=b,给a矩阵的部分元素赋值则b矩阵的行列数必须等于a矩阵的行列数。
clear a
a(1:2,1:3)=[1 1 1;1 1 1] %给第一、二行元素赋值为全1
a =
1 1 1 1 1 1
? 单下标方式:a(s)=b,b为向量,元素个数必须等于a矩阵的元素个数。
a(5:6)=[2 3]
%给第5、6元素赋值
a =
1 1 2 1 1 3
? 全元素方式:a(:)=b,给a矩阵的所有元素赋值则b矩阵的元素总数必须等于a矩阵的元素总数,但行列数不一定相等。
a=[1 2;3 4;5 6]
a =
1 2 3 4 5 6
b=[1 2 3;4 5 6]
b =
1 2 3 4 5 6
a(:)=b
%按单下标方式给a赋值
a =
1 5 4 3 2 6
4. 矩阵元素的删除
删除操作就是简单地将其赋值为空矩阵(用[]表示)。
a=[1 2 0;3 4 0;5 6 9]
a =
1 2 0 3 4 0 5 6 9
a(:,3)=[]
%删除一列元素
a =
1 2 3 4 5 6
a(1)=[]
%删除一个元素,则矩阵变为行向量
a =
3 5 2 4 6
a=[]
%删除所有元素为空矩阵
a =
[]
5. 生成大矩阵
在MATLAB中,可以通过方括号“[]”实现将小矩阵联接起来生成一个较大的矩阵。
a=[1 2 0;3 4 0;5 6 9]
a =
1 2 0 3 4 0 5 6 9
[a;a]
%联接成6×3的矩阵
ans =
1 2 0 3 4 0 5 6 9 1 2 0 3 4 0 5 6 9
a=[1 2 0;3 4 0;5 6 9] [a a] %联接成3×6的矩阵
ans =
1 2 0 1 2 0 3 4 0 3 4 0 5 6 9 5 6 9 a=[1 2 0;3 4 0;5 6 9]
[a(1:2,1:2) 10*a(1:2,2:3)] %计算并联接
ans =
1 2 20 0 3 4 40 0
6. 矩阵的翻转 a =
1 2 0 3 4 0 5 6 9
表2.3 常用矩阵翻转函数
函数名 triu(X) 功能 产生X矩阵的上三角矩阵,其余元素补0。 例子 输入 triu(a) 结果 ans = 1 2 0 0 4 0 0 0 9 tril(X) 产生X矩阵的下三tril(a) ans =