MATLAB矩阵的表示
- 矩阵的建立
1、直接输入法建立矩阵
将矩阵中的元素用中括号括起来,按照矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔
例如 A = [1,2,3;4,5,6;7,8,9]
2、利用已经建立好的矩阵建立更大的矩阵
一个大矩阵可以由已经建立好的小矩阵拼接而成:
A = [1,2,3;4,5,6;7,8,9]
B = [-1,-2,-3;-4,-5,-6;-7,-8,-9]
C = [A,B;B,A]
可以用实部矩阵和虚部矩阵构成复数矩阵:
B = [1,2,3;4,5,6]
C = [6,7,8;9,10,11]
A = B + i*C
3、冒号表达式(产生行向量)
格式:e1:e2:e3(初始值:步长:终止值)
0:1:5 和0:5等价 省略步长时,默认为1
linspace函数:linspace(a,b,n) (第一个元素,最后一个元素,元素总数)
当n省略时,自动产生100个元素 - 结构矩阵和单元矩阵
1、结构矩阵
格式:结构矩阵元素.成员名 = 表达式
2、单元矩阵(把不同类型的数据放在一个变量中)
与结构矩阵不同的是,结构矩阵的各个元素下还有成员,每个成员都有自己的名字;而单元矩阵的各个元素就是不同类型的数据
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用大括号括起来
矩阵元素的应用
- 矩阵元素的引用方式
1、通过下标来引用矩阵的元素
A(3,2)就表示矩阵第3行第2列的元素,如果使用直接输入法输入一个矩阵,然后给矩阵中的某个元素赋值,那么就只改变当前元素的值不影响矩阵中的其他元素
例如 A = [1,2,3;4,5,6]
A(4,5) = 200
当前矩阵A是一个两行三列的矩阵,但是赋值操作的行下标列下标均超过了矩阵本身的大小,这时MATLAB就会自动扩充矩阵的大小,然后进行赋值操作,扩充的元素均初始化为0
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
2、通过序号来引用矩阵的元素
在MATLAB中,矩阵元素按列来存储,即先存储第一列的元素,再存储第二列的元素,以此类推
矩阵元素的序号就是矩阵元素在内存中的排列顺序
还是同样的矩阵A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
MATLAB按列来存储,那么按照序号来表示就是:
A(1) = 1 A(2) = 4 A(3) = 2 A(4) = 5 A(5) = 3 A(6) = 6
序号与下标是一一对应的,矩阵元素A(i,j)的序号就是(j-1) * m+i
矩阵元素的序号与下标可以利用sub2ind函数和ind2sub函数实现相互转换
sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号,调用格式为:
D = sub2ind(S,I,J) (序号 = sub2ind(行数和列数组成的向量,转换矩阵元素的行下标,列下标))
例如 A = [1:3;4:5] (通过冒号表达式来建立矩阵,步长省略默认为1)
A =
1 2 3
4 5 6
D = sub2ind(size(A),[1,2;2,2],[1,1;3,2])
这样调用结果为:
D =
1 2
6 4
ind2sub函数:将矩阵元素的序号转换成对应的下标,其调用格式为:
[I,j] = ind2sub(S,D) ([行下标,列下标] = ind2sub(行数和列数组成的向量,序号)
例如[I,J] = ind2sub([3,3],[1,3,5])
I = 1 3 2 J = 1 1 2 - 利用冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵
(1)用冒号表达式作为引用矩阵的下标
(2)用单个的冒号来作为行下标和列下标,代表全部行全部列
A(i,:):第i行的全部元素
A(:,j):第j列的全部元素
A(i:i+m,k:k+m):第ii+m行内且在第kk+m列中的所有元素
A(i:i+m,:):第i~i+m行的全部元素 - end运算符:表示某一维的末尾元素的下标
例如A = [1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20]
A(end,:) 表示输出最后一列的全部元素
ans =
16 17 18 19 20
A([1,4],3:end) 表示输出第1行和第4行从第3列到最后一列的全部元素
ans =
3 4 5
18 19 20 - 删除矩阵元素
利用空矩阵删除矩阵的元素,直接将要删除的元素置为空矩阵即可
例如A = [1,2,3,0,0;7,0,9,2,6;1,4,3,1,8]
1 2 3 0 0
7 0 9 2 6
1 4 3 1 8
A(:,[2,4]) = [] 表示删除第2列和第4列的元素
A =
1 3 0
7 9 6
1 3 8 - 改变矩阵的形状
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排列成m*n的二维矩阵
注意:reshape函数只是改变原矩阵的行数和列数,并不改变原矩阵元素个数及其存储顺序
例如A = [1,2,3,4,5,6,7,8,9,10,11,12]
B = reshape(A,3,4) A和B都是有12个元素的矩阵
B =
1 2 3 4
5 6 7 8
9 10 11 12
特殊表示:A(:)
表示将矩阵A的每一列元素堆叠起来,成为一个列向量