1 MATLAB矩阵的表示
1.1矩阵建立
1.直接输入法
将矩阵的元素用中括号括起来,按矩阵行顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。
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]
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
3.实部矩阵与虚部矩阵构成复数矩阵
>>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.00001
4.冒号表达式产生行向量
格式:e1:e2:e3
- e1:初始值
- e2:步长
- e3:终止值
以e1开始到e3结束,以步长e2为增量的行向量
>>t=0:1:5
t=
0 1 2 3 4 5
省略步长e2,则步长为1(t=0:1:5与t=0:5等价)。
5. linspace函数产生行向量
格式:linspace(a,b,n)
- a:生成向量的第一个元素
- b:生成向量的最后一个元素
- n:元素总数
当n省略时,自动生成100个元素
1.2结构矩阵和单元矩阵
1.结构矩阵
结构数据类型可以将一组数据类型不同而逻辑相关的数据组成有机的整体,每个数据构成结构数据的一个成员。
结构数据构成结构矩阵(每个元素为结构数据类型)。
-
格式
- 结构矩阵元素.成员名=表达式
>>a(1).x1=10; a(1).x2='1iu'; 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]
- 给a(1)的x1成员赋值10;
- 给a(1)的x2成员赋值字符串liu;
- 给a(1)的x3成员赋值一个矩阵。
2.单元矩阵
结构数据类型不同类型的数据放在一个变量中。
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元素用" { } "括起来。
>>b= {10,'1iu',[11,21;34,78]; 12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]}
b=
[10] '1iu' [2x2 double]
[12] 'wang' [2x2 double]
[14] 'cai' [2x2 double]
2矩阵元素引用
2.1引用方式
1.通过下标来引用矩阵的元素,下标必须为正整数,且要用" ( ) "括起来。
例:
A(3,2)表示A矩阵第3行第2列的元素,给这个元素赋值200。
>>A=[0]
>>A(3,2)=200
A=
0 0
0 0
0 200
只改变了A(3,2)这个元素的值,并不会影响到其他的元素
2.矩阵元素序号引用
在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:表示对应下标元素的序号,它的行列数与I和J相同
S:表示要转换的矩阵的行数和列数组成的向量,通常用size函数来获取
I:是要转化矩阵元素的行下标
J:是要转换矩阵的列下标
如果I和J是矩阵,表示要将矩阵中的多个元素的行列下标转换成存储的序号,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)
S:表示要转换的矩阵的行数和列数组成的有两个元素的向量
D:序号,函数返回值为序号所对应元素的行下标和列下标
I:对应元素的行下标
j:对应元素的列下标
>>[I,J]=ind2sub([3,3],[1,3,5])
I=
1 3 2
J=
1 1 2
2.2冒号表达式获得子矩阵
子矩阵是指由矩阵中的一部分元素构成的矩阵。(逗号隔开)
- A(i,:) 第i行的全部元素
- A(:,j) 第j列的全部元素
- A(i:i+m,:) 第i~i+m行的全部元素
- A(i:i+m,k:k+m) 第i~i+m行内且在第k~k+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,:)
%A矩阵第1~2行
ans =
1 2 3 4 5
6 7 8 9 10
>>A(2:3,1:2:5)
%A矩阵第2~3行内第1、3、5列;(1:2:5) 2为步长
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,:)
%A矩阵最后一行
ans =
16 17 18 19 20
>>A([1,4],3:end)
%A矩阵第一行和第四行的第三列到最后一列的元素
ans =
3 4 5
18 19 20
2.3空矩阵删除矩阵的元素
空矩阵是指没有任何元素的矩阵。
A(:,[2,4])=[]表示赋空矩阵,删除第二列和第四列元素。
2.4改变矩阵的形状
改变行数和列数
- reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵元素个数及其存储顺序(序号)。
- A(: ) :将矩阵A的每一列元素堆叠起来,成为一个列向量。
>>A=[-45,65,71;27,35,91]
A=
-45 65 71
27 35 91
>>B=A(:) <=> >>B=reshape(A,6,1)
B=
-45
27
65
35
71
91