第 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小时内删除。
发表评论