第 2 章 数值数组及向量化运算本章集中讲述两个数据类型(数值数组和逻辑数组)、两个特有概念变量(非数和空)、
以及MATLAB的数组运算和向量化编程。值得指出:本章内容是读者今后编写各种科学计
算M码的基本构件。
数值数组(Numeric Array)是MATLAB最重要的数据类型数组。在各种维度的数值数
组中,二维数组为最基本、最常用。本章对二维数组创建、标识、寻访、扩充、收缩等方
法进行了详尽细腻的描述,并进而将这些方法推广到高维数组。
本章讲述的逻辑数组主要产生于逻辑运算和关系运算。它是MATLAB 援引寻访数据、
构成数据流控制条件、、编写复杂程序所不可或缺的重要构件。
数组运算是MATLAB区别于其它程序语言的重要特征,是MATLAB绝大多数函数指
令、Simulink许多库模块的本性,是向量化编程的基础。为此,本章专辟第2.2节用于阐述MATLAB的这一重要特征。
在此提醒读者注意:随书光盘mbook目录上保存着本章相应的电子文档“ch02_数值数
组及向量化运算.doc”。该文档中有本章全部算例的可执行指令,以及相应的运算结果。
2.1数值数组的创建和寻访
2.1.1一维数组的创建
1递增/减型一维数组的创建
(1)“冒号”生成法
(2)线性(或对数)定点法
2其他类型一维数组的创建
(1)逐个元素输入法
(2)运用MATLAB函数生成法
【例2.1-1】一维数组的常用创建方法举例。
a1=1:6
a2=0:pi/4:pi
a3=1:-0.1:0
a1 =
1    2    3    4    5    6
a2 =
0    0.7854    1.5708    2.3562    3.1416
a3 =
Columns 1 through 8
1.0000    0.9000    0.8000    0.7000    0.6000    0.5000    0.4000    0.3000
Columns 9 through 11
0.2000    0.1000        0
b1=linspace(0,pi,4)
b2=logspace(0,3,4)
b1 =
0    1.0472    2.0944    3.1416
b2 =
1          10        100        1000
c1=[2  pi/2  sqrt(3)  3+5i]
c1 =
2.0000            1.5708            1.7321
3.0000 + 5.0000i rng default
c2=rand(1,5)
c2 =
0.8147    0.9058    0.1270    0.9134    0.6324
〖说明〗
x1=(1:6)' , x2=linspace(0,pi,4)'
y1=rand(5,1)
z1=[2; pi/2; sqrt(3); 3+5i]
2.1.2二维数组的创建
1小规模数组的直接输入法
【例2.1-2】在MATLAB环境下,用下面三条指令创建二维数组C。
a=2.7358; b=33/79;
C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]
C =
1.0000            5.4716 + 0.4177i  0.6909
0.7071            4.8244            3.5000 + 1.0000i
2中规模数组的数组编辑器创建法
3(×的数组输入MATLAB内存,并命名为A18。【例2.1-3】试用变量编辑器,把如下)6
0.8147    0.9134    0.2785    0.9649    0.9572    0.1419
0.9058    0.6324    0.5469    0.1576    0.4854    0.4218
0.1270    0.0975    0.9575    0.9706    0.8003    0.9157
图2.1-1  利用数组编辑器创建中规模数组
3中规模数组的M文件创建法
【例2.1-4】为数组AM,创建一个 exm020104_Matrix.m 文件。以后每当需要AM数组时,只要运行exm020104_Matrix文件,就可在内存生成AM。
图2.1-2  利用M文件创建数组
4利用MATLAB函数创建数组
【例2.1-5】利用MATLAB指令产生数组。
(1)
ao=ones(2,4)
az=zeros(2,5)
ae=eye(3)
am=magic(4)
ad=diag(am)
add=diag(diag(am))
ao =
1    1    1    1
1    1    1    1
az =
0    0    0    0    0
0    0    0    0    0
ae =
1    0    0
0    1    0
0    0    1
am =
16    2    3    13
5    11    10    8
9    7    6    12
4    14    1
5    1
ad =
16
11
matlab数组赋值6
1
add =
16    0    0    0
0    11    0    0
0    0    6    0
0    0    0    1
(2)
%
rng default
Au=rand(1,5)
Ai=randi([-3,4],2,8)
As=randsrc(3,12,[-3,-1,1,3],1)
Ap=randperm(8)
Au =
0.8147    0.9058    0.1270    0.9134    0.6324
Ai =
-3    1    4    4    0    -2    4    4
-1    4    -2    4    3    0    3    2
As =
-1    -1    -3    1    -3    1    -3    3    3    -3    -3    1      1    -3    -1    -1    3    -1    -3    -1    3    -3    -1    1    -3    -3    -1    1    -3    1    3    1    -3    3    3    -1 Ap =
1    7    8    4    6    5
2    3
%
rng(0,'v5normal')
randn(2,6)
ans =
-0.4326    0.1253  -1.1465    1.1892    0.3273  -0.1867
-1.6656    0.2877    1.1909  -0.0376    0.1746    0.7258
(3)
n=5;lambda=2;
A = gallery('jordbloc',n,lambda)
A =
2    1    0    0    0
0    2    1    0    0
0    0    2    1    0
0    0    0    2    1
0    0    0    0    2
rng(11,'v5normal')
n=6;
kappa=1e8;
mode=2;
B= gallery('randsvd',n,kappa,mode)
Bsv=svd(B)'
Bc=cond(B)
B =
-0.2402  -0.6286  -0.6241  -0.1413    0.2258  -0.2410
-0.5761    0.2703    0.2092  -0.1420  -0.2454  -0.4657
0.5168  -0.1311    0.0244  -0.6882  -0.4403  -0.2138
0.5613    0.2022  -0.1260    0.2781    0.3097  -0.1772
-0.0744    0.0489    0.3518  -0.5518    0.7473    0.0709
-0.1044  -0.2899    0.1391  -0.0840  -0.2010    0.7394
Bsv =
1.0000    1.0000    1.0000    1.0000    1.0000    0.0000
Bc =
1.0000e+008
2.1.3二维数组元素的标识和寻访
1数组的维数和大小
(1)数组的维数(Dimension)
(2)数组的大小(Size)
【例2.1-6】数组的维数、大小和长度
clear
A=reshape(1:24,2,3,4);
dim_A=ndims(A)
size_A=size(A)
L_A=length(A)
dim_A =
3
size_A =
2    3    4
L_A =
4
2数组的标识和寻访
【例2.1-7】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。
(1)
A=zeros(2,6)
A(:)=1:12
a8=A(8)
a311=A([3,11])
A =
0    0    0    0    0    0
0    0    0    0    0    0
A =
1    3    5    7    9    11
2    4    6    8    10    12
a8 =
8
a311 =
3    11
(2)
A(3,7)=37
a13=A(:,[1,3])
aend=A([2,3],4:end)
A =
1    3    5    7    9    11    0
2    4    6    8    10    12    0
0    0    0    0    0    0    37
a13 =
1    5
2    6
0    0
aend =
8    10    12    0
0    0    0    37
(3)
L=A<3
A(L)=NaN
L =
1    0    0    0    0    0    1
1    0    0    0    0    0    1
1    1    1    1    1    1    0
A =
NaN    3    5    7    9    11  NaN
NaN    4    6    8    10    12  NaN
NaN  NaN  NaN  NaN  NaN  NaN    37

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。