1. 数组和矩阵
数组:用空格或者逗号间隔数组元素,用方括号括起来
构造数组的方法:增量法和linspace函数法
增量法:>> b=10:2:15
b =
10 12 14
>> a=10:15
a =
10 11 12 13 14 15
>> b=3.3:5.5
b =
3.3000 4.3000 5.3000
>> 9:-1:1
ans =
9 8 7 6 5 4 3 2 1
Linspace:x=linspace(first,last,num) first,last首位元素,num是个数(输出几个数)
>> x=linspace(1,9,9)
x =
1 2 3 4 5 6 7 8 9
>> x=linspace(1,9,2)
x =
1 9
矩阵:Matlab中,二维数组称为矩阵。
创建矩阵最简单的方法是用[ ] ,在方括号内输入多个元素可以创建矩阵的一个行,并用逗号或者空格把每个元素间隔开:
>> row=[1 3 5 7 9]
row =
1 3 5 7 9
>> row=[1,3,5,7,9]
row =
1 3 5 7 9
如果想开始一个新行,则用分号终止当前行:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
构造特殊矩阵:
构造特殊矩阵用函数来实现:
特殊矩阵构造函数如下表所示:
函数
功能
ones
创建一个所有元素都为1的矩阵
zero
创建一个所有元素都为0的矩阵
eye
创建对角线元素为1,其他元素为0的矩阵
accumarray
将输入矩阵的元素分配到输出矩阵中的指定位置
diag
根据矢量创建对角矩阵
magic
创建一个方形矩阵,其中行、列和对角线上元素的和相等
rand
创建一个矩阵或者数组,其中的元素为服从均匀分部的随机数
randn
创建一个矩阵或数组,其中的元素为服从正态分布的随机数
randperm
创建一个矢量(1*n的矩阵)
A=zero(4,6,’uint32’)
A=magic(5)
A=rand(5)*20
A=[1 23 4 5 6 7 ];
B=diag(A,0)% A中的元素为对角线
3、聚合矩阵
聚合矩阵是通过连接一个或多个矩阵来形成新的矩阵。表达式C=[A,B]在水平方向上聚合矩阵A和B,表达式C=[A;B]将在垂向上聚合他们。
A =
1 1 1 1 1
1 1 1 1 1
B =
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.60680.7621 0.8214 0.7919 0.1763
C=[A;B]
C =
1.0000 1.0000 1.0000 1.0000 1.0000
1.0000 1.0000 1.0000 1.0000 1.0000
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763
可以用聚合的方法创建矩阵甚至多维数组,但不能生成不规则的形状,只能是矩形。(此时要注意行数和列数是否匹配)
矩阵聚合函数
cat()沿指定的维数聚合矩阵
horzcat()水平聚合矩阵
vercat()垂向聚合矩阵
repmat()通过复制和叠置矩阵来创建新矩阵
blkdiag()用已有矩阵创建块对角矩阵
>> A=[8 1 6;3 5 7;4 9 2]
A =
81 6
35 7
49 2
>> B=repmat(A,2,4)
B =
81 6 81 6 81 6 81 6
35 7 35 7 35 7 35 7
49 2 49 2 49 2 49 2
81 6 81 6 81 6 81 6
35 7 35 7 35 7 35 7
49 2 49 2 49 2 49 2
>> A=magic(3);
>> B=[-5 -6 -9;-4 -4 -2];
>> C=eye(2)*8;
>> D=blkdiag(A,B,C)
>> D =
81 6 0 0 0 0 0
35 7 0 0 0 0 0
49 2 0 0 0 0 0
0 0 0 -5-6 -9 0 0
0 0 0 -4-4 -2 0 0
0 0 0 0 0 0 80
0 0 0 0 0 0 08
4、组合不同类型的数据
构造矩阵时,如果矩阵的数据类型不同,则MATLAB会自动对某些元素进行类型转换,然后生成的矩阵具有相同的类型。
用一个高精度的矩阵和一个低精度的矩阵构造新矩阵时,新矩阵是低精度的。例如,聚合double型和single型的矩阵。MATLAB会将double型元素转换为single型。
1)single型和double型矩阵聚合----------single型
2)integer型和double型矩阵聚合---------int8型
3)字符型和double型聚合----------------字符型
4)逻辑型和double型聚合--------------double型
例子:
>>x=[true false false pi sqrt(7)]
x =
1.0000 0 0 3.1416 2.6458
>>class(x)
ans =
double
5获取矩阵的元素
利用编号和索引,可以获取MATLAB矩阵的元素:
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(4,2)
ans =
14
给出一个矩阵:
>> A=[2 6 9;4 2 8;3 0 1]
A =
2 6 9
4 2 8
3 0 1
在内存中是按下面的序列保存的:
2,4,3,6,2,0,9,8,1
矩阵A的第3行第2列元素可以看做实际保存序列中的第6个元素,要获取这个元素,可以使用标准语法A(3,2)和A(6).在使用线性索引方式时,如果矩阵大小为[d1,d2]即d1行d2列,则位置(i,j)处的元素在保存序列中的位置为:
(j-1)d1+i
举例:
>>linearindex=sub2ind(size(A),3,2)
linearindex =
6
>> [rowcol]=ind2sub(size(A),6)
row =
3
col =
2
冒号运算符
A =
2 6 9
4 2 8
3 0 1
>> A(1:2:end)=-10
A =
-10 6 -10
4 -10 8
-10 0 -10
6、获取与矩阵有关的信息
length( ) 返回最长维的长度
ndims( ) 返回维数
numel ( )返回元素个数
size()返回每一维的长度
求平均值用numel()函数实现
>> A=rand(5)*10;
A(4:5,:)=[]
A =
1.9343 6.9790 4.9655 6.6023 7.2711
6.8222 3.7837 8.9977 3.4197 3.0929
3.0276 8.6001 8.2163 2.8973 8.3850
sum(A(:))/numel(A)
ans =
5.6663