前言
矩阵是matlab中最基本的数据对象,matlab的大部分运算和命令都是在矩阵运算的意义下进行的。
一、矩阵的建立
- 直接输入法:
将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。
A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
- 套娃式建立:利用已建立好的矩阵建立更大的矩阵:一个大矩阵可以由已经建立好的小矩阵拼接而成。类似于分块
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]
C =
1 2 3 -1 -2 -3
4 5 6 -4 -5 -6
7 8 9 -7 -8 -9
-1 -2 -3 1 2 3
-4 -5 -6 4 5 6
-7 -8 -9 7 8 9
- 利用实部矩阵和虚部矩阵来构成复数矩阵。
B=[1,2,3;4,5,6];
C=[6,7,8;9,10,11];
A=B+i*C
A =
1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i
4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i
二、向量的产生
冒号表达式
- 初始值:步长:终止值
t=0:1:5
t =
0 1 2 3 4 5
- linspace函数
linspace(第一个元素,最后一个元素,元素总数) 当n省略时,自动产生100个元素
x=linspace(0,pi,6)
x =
0 0.6283 1.2566 1.8850 2.5133 3.1416
结构矩阵和单元矩阵
结构矩阵
结构矩阵元素.成员名=表达式
a(1).x1=10;a(1).x2=‘liu’;a(1).x3=[11,21;34,78];
a(2).x1=12;a(2).x2=‘wang’;a(2).x3=[34,191;27,578];
a(3).x1=14;a(3).x2=‘cai’;a(3).x3=[13,890;67,231];
单元矩阵
建立单元矩阵也是直接输入,只是单位矩阵元素用大括号括起来。
b = {0,‘liu’,[11,21;34,78];12,‘wang’,[34,191;27,578];14,‘cai’,[13,890;67,231]}
b =
3×3 cell 数组
[ 0] 'liu' [2×2 double]
[12] 'wang' [2×2 double]
[14] 'cai' [2×2 double]
三、矩阵的操作
矩阵元素的引用
- 通过下标来引用
A(3,2)表示A矩阵第三行第二列的元素。
A = [1,2,3;4,5,6];
A(4,5)=10
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 10
- 通过序号来引用
在matlab中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存第二列元素,一直到最后一列元素。
矩阵元素的序号就是矩阵元素在内存中的排列顺序。
A = [1,2,3;4,5,6]
A =
1 2 3
4 5 6
A(3)
ans =
2
序号与下标是一一对应的,以m×n矩阵A为例,矩阵元素A(i,j)的序号(j-1)×m+i。
矩阵元素的序号与下标可以利用sub2ind和ind2sub函数相互转换。
sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号。调用格式为:
D = sub2ind(S,I,J)
D — 序号
S — 行数和列数组成的向量
I — 转换矩阵元素的行下标
J — 转换矩阵元素的列下标
A=[1:3;4:6]
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)
D=sub2ind(size(A),[1,2;2,2],[1,1;3,2])
D =
1 2
6 4
[I,J]=ind2sub([3,3],[1,3,5])
I =
1 3 2
J =
1 1 2
利用冒号表达式获得一部分子矩阵
A(i,:)第i行的全部元素
A(:,j)第j列的全部元素
A(i:i+m,k:k+m)第i-i+m行内且在第k-k+m列中的所有元素
A(i:i+m,:)第i-i+m行的全部元素
A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
A(1:2,:)
ans =
1 2 3 4 5
6 7 8 9 10
A(2:3,1:2:5)
ans =
6 8 10
11 13 15
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)
ans =
3 4 5
18 19 20
删除矩阵
-用空矩阵删除矩阵的元素
A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20];
A(:,[2,4])=[]
A =
1 3 5
6 8 10
11 13 15
16 18 20
改变矩阵的形状
reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
【注】reshape函数只改变原矩阵的行数和列数,但并不改变原矩阵元素个数及存储顺序。
A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15;16,17,18,19,20];
y=reshape(A,5,4)
y =
1 7 13 19
6 12 18 5
11 17 4 10
16 3 9 15
2 8 14 20
A(:) 将矩阵A的每一列元素堆叠起来,成为一个列向量。
A=[1,2,3,4,5;6,7,8,9,10]
A =
1 2 3 4 5
6 7 8 9 10
B=A(:)
B =
1
6
2
7
3
8
4
9
5
10
A(:)等价于reshape(A,10,1)。
总结
本节主要介绍了在matlab中对矩阵的基本操作。