数值是Matlab进行计算和处理的核心内容之一,出于快速计算的需要,Matlab总把数组看作存储和运算的基本单元,标量数据也被看作是(1×1)的数组
一维数组的创建
>> format compact
>> A1=[0 pi 0.5*pi 0.7 1.5]
A1 =
0 3.1416 1.5708 0.7000 1.5000
>> A2=0:0.5:3
A2 =
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
>> A3=linspace(1,6,7)
A3 =
1.0000 1.8333 2.6667 3.5000 4.3333 5.1667 6.0000
>> A4=logspace(1,6,7)
A4 =
1.0e+06 *
0.0000 0.0001 0.0005 0.0032 0.0215 0.1468 1.0000
- 直接输入法:可以直接通过空格、逗号和分号来分隔数组元素,在数组中输入任意元素,生成一维数组
- 步长生成法: x=a:inc:b , a 和
b 为一维向量数组的起始数值和终止数值, inc 为数组的间隔步长;如果 a 和b 为整数时,省略 inc 可以生成间隔为1的数列。 inc 也可以采用负数。- 等间距线形生产方法: x=linspace(a,b,n) ,这种方法采用函数在 a 和
b 之间的区间内得到 n 个线性采样数据点。- 等间距对数生成方法:
x=logspace(a,b,n) ,在设定采样点总个数 n 的情况下,采用常用的对数计算得到n 个采样点数据值。
访问数组内容
>> x=linspace(1,6,7)
x =
1.0000 1.8333 2.6667 3.5000 4.3333 5.1667 6.0000
>> x(5) %索引访问数组元素
ans =
4.3333
>> x(2:5) %访问一块数据
ans =
1.8333 2.6667 3.5000 4.3333
>> x(3:end) %访问一块数据
ans =
2.6667 3.5000 4.3333 5.1667 6.0000
>> x(1:2:7) %构造访问数组
ans =
1.0000 2.6667 4.3333 6.0000
>> x([1,4,6,3,3,3,2,2,2,2]) %直接构造访问数组
ans =
1.0000 3.5000 5.1667 2.6667 2.6667 2.6667 1.8333 1.8333 1.8333 1.8333
>> x([1 4 6 3 3 3 2 2 2 2 ]) %直接构造访问数组
ans =
1.0000 3.5000 5.1667 2.6667 2.6667 2.6667 1.8333 1.8333 1.8333 1.8333
一维数组可以是一个行向量,也可以是一列多行的列向量。在定义的过程中,如果元素之间通过“;”分隔元素,那么生成的向量是列向量;而通过空格或逗号分隔的元素则为行向量。列向量和行向量之间可以通过转置操作“’”来进行相互转化。如果一维数组元素是数组,那么经过转置操作后,得到的是复数的共轭转置结果,而采用点-共轭转置操作时得到的是转置数组
>> A=[1;2;3;4;5]
A =
1
2
3
4
5
>> B=A'
B =
1 2 3 4 5
>> C=linspace(1,10,5)
C =
1.0000 3.2500 5.5000 7.7500 10.0000
>> C=linspace(1,10,5)'
C =
1.0000
3.2500
5.5000
7.7500
10.0000
>> Z=A+C*I
Undefined function or variable 'I'.
Did you mean:
>> Z=A+C*i
Z =
1.0000 + 1.0000i
2.0000 + 3.2500i
3.0000 + 5.5000i
4.0000 + 7.7500i
5.0000 +10.0000i
>> Z1=Z'
Z1 =
1.0000 - 1.0000i 2.0000 - 3.2500i 3.0000 - 5.5000i 4.0000 - 7.7500i 5.0000 -10.0000i
>> Z2=Z.'
Z2 =
1.0000 + 1.0000i 2.0000 + 3.2500i 3.0000 + 5.5000i 4.0000 + 7.7500i 5.0000 +10.0000i
多维数组的创建
二维数组(即矩阵)的创建
- 直接输入二维数组元素来创建
- 通过Array Editor来输入二维数组
- 对于大规模数据,可以通过数据表格方式来输入,可单击选择空间的图标
选中已经编写好的矩阵数据文件后,导入到工作空间中。
- 可以通过Matlab所提供的其他函数来生成二维数组。
>> clear
>> A=[1 2 3 4;linspace(0,5,4);1:2:7;3:7]
Error using vertcat
Dimensions of matrices being concatenated are not consistent.
>> A=[1 2 3 4;linspace(0,5,4);1:2:7;3:6]
A =
1.0000 2.0000 3.0000 4.0000
0 1.6667 3.3333 5.0000
1.0000 3.0000 5.0000 7.0000
3.0000 4.0000 5.0000 6.0000
>> B=[123]
B =
123
>> B=[1 2 3 % Shift+回车
4 5 6
7 8 9]
B =
1 2 3
4 5 6
7 8 9
多维数组创建
多维数组(
n
<script type="math/tex" id="MathJax-Element-16">n</script>维数组),如在三位数组中存在行、列和页这样三维,在每一页中存在行和列。
- 直接创建法。可选择一些内置函数来创建,如zeros、ones、rand、randn等。
- 通过直接索引的方法进行创建。
- 使用reshape和repmat将二维数组转换为三维数组。
- 使用cat函数将低维数组转化为高维数组
>> A=zero(3,4,2)
Undefined function 'zero' for input arguments of type 'double'.
>> A=zeros(3,4,2)
A(:,:,1) =
0 0 0 0
0 0 0 0
0 0 0 0
A(:,:,2) =
0 0 0 0
0 0 0 0
0 0 0 0
>> B=zeros(2,3)
B =
0 0 0
0 0 0
>> B(:,:,2)=ones(2,3)
B(:,:,1) =
0 0 0
0 0 0
B(:,:,2) =
1 1 1
1 1 1
>> B(:,:,3)=4
B(:,:,1) =
0 0 0
0 0 0
B(:,:,2) =
1 1 1
1 1 1
B(:,:,3) =
4 4 4
4 4 4
>> C=reshape(B,2,9)
C =
0 0 0 1 1 1 4 4 4
0 0 0 1 1 1 4 4 4
>> C=(B(:,:,1)B(:,:,2)B(:,:,3))
C=(B(:,:,1)B(:,:,2)B(:,:,3))
|
Error: Unexpected MATLAB expression.
Did you mean:
>> C = [B(:,:,1) B(:,:,2) B(:,:,3)]
C =
0 0 0 1 1 1 4 4 4
0 0 0 1 1 1 4 4 4
>> reshape(C,2,3,3)
ans(:,:,1) =
0 0 0
0 0 0
ans(:,:,2) =
1 1 1
1 1 1
ans(:,:,3) =
4 4 4
4 4 4
>> reshape(C,[3,2,3])
ans(:,:,1) =
0 0
0 0
0 0
ans(:,:,2) =
1 1
1 1
1 1
ans(:,:,3) =
4 4
4 4
4 4
>> C=[1 2 3 4 5 6 7 8 9;10 11 12 13 14 14 16 17 18]
C =
1 2 3 4 5 6 7 8 9
10 11 12 13 14 14 16 17 18
>> reshape(C,[3,2,3])
ans(:,:,1) =
1 11
10 3
2 12
ans(:,:,2) =
4 14
13 6
5 14
ans(:,:,3) =
7 17
16 9
8 18
>> D=ones(3,2)
D =
1 1
1 1
1 1
>> repmat(D,[1,2,3])
ans(:,:,1) =
1 1 1 1
1 1 1 1
1 1 1 1
ans(:,:,2) =
1 1 1 1
1 1 1 1
1 1 1 1
ans(:,:,3) =
1 1 1 1
1 1 1 1
1 1 1 1
>> D=[1 2 3;4 5 6]'
D =
1 4
2 5
3 6
>> repmat(D,[1,2,3])
ans(:,:,1) =
1 4 1 4
2 5 2 5
3 6 3 6
ans(:,:,2) =
1 4 1 4
2 5 2 5
3 6 3 6
ans(:,:,3) =
1 4 1 4
2 5 2 5
3 6 3 6
>> X=zeros(2)
X =
0 0
0 0
>> Y=ones(2)
Y =
1 1
1 1
>> Z=repmat(2,2,2)
Z =
2 2
2 2
>> AA=cat(3,X,Y,Z)
AA(:,:,1) =
0 0
0 0
AA(:,:,2) =
1 1
1 1
AA(:,:,3) =
2 2
2 2
>> AA=cat(2,X,Y,Z)
AA =
0 0 1 1 2 2
0 0 1 1 2 2
>> AA=cat(1,X,Y,Z)
AA =
0 0
0 0
1 1
1 1
2 2
2 2
数组的运算
- 点方式运算表明是数组元素之间的运算关系
- 直接进行乘、除、乘方运算则是向量或矩阵之间的运算关系
- 对于向量的除法运算,左除(\)和右除(/)的意义不同,两者之间除数和被除数是不同的
常用的标准数组
函数 | 说明 | 备注 |
---|---|---|
eye | 生成单位矩阵 | 适用于生成二维矩阵 |
ones | 生成全1数组 | |
rand | 生成随机数组,数组元素均匀分布 | |
randn | 生成随机数组,数组元素服从正态分布 | |
zeros | 生成全0数组 |
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
>> randn(3)
ans =
0.5377 0.8622 -0.4336
1.8339 0.3188 0.3426
-2.2588 -1.3077 3.5784
>> rand(3)
ans =
0.9649 0.9572 0.1419
0.1576 0.4854 0.4218
0.9706 0.8003 0.9157
>> A=1:4
A =
1 2 3 4
>> diag(A,1)
ans =
0 1 0 0 0
0 0 2 0 0
0 0 0 3 0
0 0 0 0 4
0 0 0 0 0
>> diag(A)
ans =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> diag(A,-3)
ans =
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 0
0 2 0 0 0 0 0
0 0 3 0 0 0 0
0 0 0 4 0 0 0
下节:低维数组的寻址和搜索、低维数组的处理函数、高维数组的处理函数和运算