MATLAB矩阵的表示
目录
矩阵元素的序号和下标可以利用sub2ind和ind2sub函数实现相互转换
矩阵的建立
利用直接输入法建立矩阵
建立实矩阵
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
建立复矩阵
>> B=[2+3i,5;3-5i,6j]
B =
2.0000 + 3.0000i 5.0000 + 0.0000i
3.0000 - 5.0000i 0.0000 + 6.0000i
利用已建好的矩阵建立更大的矩阵
大矩阵由已建好的小矩阵拼接而成
>> 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
用实部矩阵和虚部矩阵构成复数矩阵
>> R=[1,2,3;4,5,6];
>> I=[6,7,8;9,10,11];
>> ri=R+i*I
ri =
1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i
4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i
冒号表达式
用冒号表达式产生行向量
e1:e2:e3
其中e1为初始值,e2为步长,e3为终止值
>> t=0:1:5
t =
0 1 2 3 4 5
注:如果省略e2不写,则步长为1
>> t=0:5
t =
0 1 2 3 4 5
还可以用linspace函数产生行向量
linspace(a,b,n)
其中a和b是生成向量的第一个和最后一个元素,n是元素总数
>> linspace(0,pi,6)
ans =
0 0.6283 1.2566 1.8850 2.5133 3.1416
注:当n省略时,自动生成100个元素
>> linspace(0,pi)
ans =
1 至 11 列
0 0.0317 0.0635 0.0952 0.1269 0.1587 0.1904 0.2221 0.2539 0.2856 0.3173
12 至 22 列
0.3491 0.3808 0.4125 0.4443 0.4760 0.5077 0.5395 0.5712 0.6029 0.6347 0.6664
23 至 33 列
0.6981 0.7299 0.7616 0.7933 0.8251 0.8568 0.8885 0.9203 0.9520 0.9837 1.0155
34 至 44 列
1.0472 1.0789 1.1107 1.1424 1.1741 1.2059 1.2376 1.2693 1.3011 1.3328 1.3645
45 至 55 列
1.3963 1.4280 1.4597 1.4915 1.5232 1.5549 1.5867 1.6184 1.6501 1.6819 1.7136
56 至 66 列
1.7453 1.7771 1.8088 1.8405 1.8723 1.9040 1.9357 1.9675 1.9992 2.0309 2.0627
67 至 77 列
2.0944 2.1261 2.1579 2.1896 2.2213 2.2531 2.2848 2.3165 2.3483 2.3800 2.4117
78 至 88 列
2.4435 2.4752 2.5069 2.5387 2.5704 2.6021 2.6339 2.6656 2.6973 2.7291 2.7608
89 至 99 列
2.7925 2.8243 2.8560 2.8877 2.9195 2.9512 2.9829 3.0147 3.0464 3.0781 3.1099
100 列
3.1416
显然,linspace(a,b,n) 与 a:(b-a)/(n-1):b 等价
矩阵元素的引用
矩阵元素的引用方式
矩阵元素通过下标(Subscript)来引用
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> A(1,2)
ans =
2
还可以将矩阵的元素赋新值
>> A=[1,2,3;4,5,6]
A =
1 2 3
4 5 6
>> A(1,2)=0
A =
1 0 3
4 5 6
当给出的行下标或列下标大于原来矩阵的行数和列数,则将自动扩展原来的矩阵,将扩展后未赋值的矩阵元素置为0
>> A=[1,2,3;4,5,6];
>> A(4,5)=20
A =
1 2 3 0 0
4 5 6 0 0
0 0 0 0 0
0 0 0 0 20
矩阵元素通过序号(Index)来引用
矩阵元素的序号就是相应元素在内存中的排列顺序,即线性索引号。
在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)
其中,S表示要转换的矩阵的行数和列数,是列数和行数组成的向量,通常用size函数获取;I是要转换矩阵的行下标。J是要转换矩阵的列标。
注:I,J分别是两个矩阵,分别是是要转换的元素的行标和列标组成,且存在对应关系
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> D=sub2ind(size(A),[1,2;1,2],[1,2;2,1])
D =
1 5
4 2
以上例子,可以看出矩阵I,J对应起来依次得到A(1,1)、A(2,2)、A(1,2)、A(2,1),对应的序号为
1,5,4,2,按照I,J的元素摆放形式摆放
ind2sub函数用于将矩阵的序号转换为对应的下标
[I,J]=ind2sub(S,D)
其中,S表示要转换的矩阵的行数和列数;D是序号,返回值为序号所对应元素的行下表和列下标
>> [I,j]=ind2sub([3,3],[1,3,5])
I =
1 3 2
j =
1 1 2
3*3的矩阵的第1、3、5个元素的下标分别是(1,1)、(3,1)、(2,2)
利用冒号表达式获取子矩阵
A(i,:)表示A矩阵第i行的全部元素,A(:,j)表示A矩阵的第j列全部元素。
A(i:i+m,k:k+n)表示A矩阵第i-i+m行且j-j+n列的全部元素
A(i:i+m,:)表示A矩阵第i-i+m行的全部元素,A(:,k:k+m)表示A矩阵第k-k+m列的全部元素
end表示某一维的末尾元素下标
[i,j,k,...]表示取第i,j,k,...行/列的元素
>> A=[1:1:5;6:1:10;11:1:15;16:1:20]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
>> A(1,:)
ans =
1 2 3 4 5
>> A(:,2)
ans =
2
7
12
17
>> A(:,2:4)
ans =
2 3 4
7 8 9
12 13 14
17 18 19
>> A(2:3,:)
ans =
6 7 8 9 10
11 12 13 14 15
>> A(2:3,4:5)
ans =
9 10
14 15
>> A(2 :3,4:5)
ans =
9 10
14 15
>> A(2:3,1:3:5)
ans =
6 9
11 14
>> A(2:3,1:2:5)
ans =
6 8 10
11 13 15
>> A(end,:)
ans =
16 17 18 19 20
>> A([1,4],3:end)
ans =
3 4 5
18 19 20
利用空矩阵删除矩阵的元素
空矩阵
>> X=[]
X =
[]
将某些元素从矩阵中删除,采用将其置为空矩阵是一种有效的方法
>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,2,8]
A =
1 2 3 0 0
7 0 9 2 6
1 4 -1 2 8
>> A(:,[2,4])=[]
A =
1 3 0
7 9 6
1 -1 8
改变矩阵的形状
reshape(A,m,n)函数在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵
>> A=[1,2,3,4,5,6,7,8,9,10,11,12]
A =
1 2 3 4 5 6 7 8 9 10 11 12
>> Y=reshape(A,3,4)
Y =
1 4 7 10
2 5 8 11
3 6 9 12
>> Z=reshape(Y,2,6)
Z =
1 3 5 7 9 11
2 4 6 8 10 12
注:reshape函数只是改变了原矩阵的行数和列数,即改变了其逻辑结构,但不改变原矩阵元素个数及其储存顺序
A(:)将矩阵A的每一列堆叠起来,形成一个列向量,从而改变了矩阵的形状
>> A=[1,2,3,4,5,6,7,8,9,10,11,12]
A =
1 2 3 4 5 6 7 8 9 10 11 12
>> B=A(:)
B =
1
2
3
4
5
6
7
8
9
10
11
12
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了