第二章 数值数组及其运算中 国 民 航 大 学 电 子 信 息 工 程 学 院主要内容
概述
一维数组的创建和寻访
二维数组的创建
二维数组元素的标识
二维数组的子数组寻访和赋值
执行数组运算的常用函数
数组运算和矩阵运算中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.1 概述
数值数组和数组运算是 Matlab的核心内容
Matlab精心设计数组和数组运算的目的
使计算程序简单、易读,使程序指令更接近于教科书上的数学计算公式
提高程序的向量化程度,提高计算效率,节省计算机开销
数组数组是指由一组实数或复数排成的长方形阵列。它可以是一维的“行或列”,可以是二维的“矩形”,也可以是“三维”的,甚至是更高维的
数组运算无论数组间进行何种运算(加、减、乘、除或函数),数组运算是各数组对应元素之间的运算数组乘法运算必须在相同阶数的数组间进行(,*)
数组的乘方运算是以前一个数组的元素为底,以后一个数组的元素为指数,将对应的元素进行指数运算得到的新数组中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.2 一维数组的创建和寻访
一维数组的创建
逐个元素输入法变量名 =[元素 元素 元素 ]
说明:各元素间可以用空格,也可以用逗号分隔
冒号生成法变量名 =a,inc,b %生成从 a到 b,间隔为 inc的一维数组说明,a,数组的第一个元素
inc,采样点之间的间隔即步长(数组元素间的间隔长度)
( b-a)是 inc的整数倍,则所生成数组的最后一个元素等于 b
否则小于 b
例,在 matlab指令行输入
x=1:2:11 x=1:2:10
x= x=
1 3 5 7 9 11 1 3 5 7 9
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.2 一维数组的创建和寻访说明,a,inc,b之间必须用冒号,:”分隔(冒号必须在英文状态下)
inc 可以省略。省略时,默认其取值为 1,即认为 inc=1
inc 可以取正数或负数。但要注意,inc取正时,要保证 a<b;而 inc
取负时,要保证 a>b
定数线性采样法 linspace
功能:在设定的“总点数”下,均匀采样生成一维“行”数组。
格式,x=linspace(a,b,n)
说明:在 [a,b]中等间隔生成 n个元素等价于,x=a:(b-a)/(n-1):b
例,x=linspace( 1,10,5)
x =1.0000 3.2500 5.5000 7.7500 10.0000
x=linspace( 1,11,4)
x= 1.0000 4.3333 7.6667 11.0000
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.2 一维数组的创建和寻访
一维数组的子数组寻访令 x是 1× n维数组,则一维数组的子数组寻访为
x( index)
index:单个正整数 m( 1≤m ≤n)表示数组 x的第 m个元素例 x=[3 6 9 12 15 18 21]
x(3)=9
index:数组如 [m,p,q],表示寻访数组 x的第 m,p,q个元素组成的子数组( 1≤m ≤n,1≤p≤n,1≤q≤n)
例 x([1 3 5])=3 9 15 x([2 3 5 2 2 3 4 ])
index,p:q:m,表示寻访数组的第 p个到第 m个间隔为 q个步长所对应的元素组成的子数组。
例 x( 1,3,7) =3 12 21; x( 1,5) ; x(3:end)
index,find(逻辑表达式)表示寻找由逻辑表达式所指定的元数构成的子数组例 x(find(x>10))=12 15 18 21
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.2 一维数组的创建和寻访
关系运算函数 find的使用例:生成矩阵 x=[-2 -1 0 1 2 0.5 -1 inf 1 0.5]
x1=find(x==0) %找出 x中恒等于 0的元素的索引
x2=find(x>0) %找出 x中大于 0的元素的索引
x3=find(x) %找出 x中不等于 0的元素的索引
x4=find(abs(x)>0.1&abs(x)<0.6)
%找出 x中绝对值介于 0.1和 0.6之间的元素的索引中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.2 一维数组的创建和寻访
子数组的赋值格式,x(index)=y
说明,x(index)所得到的数据长度与 y的数据长度必须相同
index和子数组寻访中的 index定义一样
y可以是单个数,也可以是一维数组,也可以是某一维数组的子数组例 x(3)=0;
x(1:4)=randn(1,4);
x([1 4])=[2 2];
例 y=randn(1,10);
x(1:4)=y(2:5)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.3二维数组的创建
概述二维数组是由实数或复数排列成矩阵而构成的,如从数据结构上看,二维数组等价于矩阵当二维数组带有线性变换含义时,该二维数组就是矩阵
二维数组的创建
直接输入法
整个输入数组必须以方括号为其首尾
数组的行与行之间必须用分号,;”或回车键隔离
数组元素必须由逗号或空格分离
所有标点符号必须在英文状态下输入例
X=[1 2;3 4]
创建一个二维数组 Y,Y的第一行元素从 1到 6,间隔为 1; Y的第二行元素从
12到 1,间隔为 -2
Y=[1:6;12,-2,1]
74 65.2
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.3二维数组的创建
利用 M文件创建和保存数组对于经常需要调用且较大的数组,一般采用 M文件编辑器来建立数组步骤:
1,打开一个新的 M文件,编辑所要创建数组的 M文件
2,保存该文件
3,在 Matlab指令运行该文件名即可得到数组中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.4 二维数组的标识
全下标两个下标组成:行下标,列下标
x(2,4) % 数组 x的第二行第四列元素
单下标把二维数组的所有元素进行一维编号,然后标识编号规则:
数组按列进行排序
全下标和单下标的转换关系设 x为 m*n维数组,
(r,c)=(c-1)*m+r
ind=sub2ind(size,i,j) %全下标转换成单下标
[i,j]=ind2sub(size,ind) %单下标转换成双下标例,ind=sub2ind([2 2],2,2); [i,j]=ind2sub([2 2],4);
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.4 二维数组的标识
逻辑 1标识通过与数组 X中同样大小的数组 L中“逻辑值 1”所在的位置寻找数组 x中对应位置的元素例 找出数组 x=[-4 -2 0 2 4;-3 -1 1 3 5]中所有绝对值大于 3的元素
x=zeros(2,5);
x(:)=-4:5;
L=abs(x)>3;
islogical(L)
y=x(L)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.5 二维数组的寻访和赋值
二维数组的寻访规则格 式 说 明
A(r,c) 访问由 r和 c指定的元素或子矩阵
A(r,:) 访问由 r指定的行向量或子矩阵
A(:,c) 访问由 c指定的列向量或子矩阵
A(:) 单下标访问
A(r) 将矩阵按一维列向量来访问
A(:,end) 访问矩阵的最后一列
A(end,:) 访问矩阵的最后一行中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.5 二维数组的寻访和赋值

X=magic(4),a=x(1,2),
b=x([1,2],4:-1,3),%等价于 [x(1,4),x(1,3);x(2,4),x(2,3)]
c=x([1,2;3,4],[3,4;1,2]),%等价于 x([1,3,2,4],[3,1,4,2])
d=x([5 9;1 1]),%等价于 [x(5),x(9);x(1),x(1)]
e=x(:)’,% 单下标访问,
f=x(3:7),%单下标访问
g=x([3,1,8]),%单下标访问
h=x([3,7]),%单下标访问
k=x(2:3,2),%等价于 [x(2,2);x(3,2)]
m=x(logical([0 0 1 0 1])),%逻辑索引
sub2ind(size(x),2,3) %全下标索引到单下标索引的转换
[r,l]=ind2sub(size(x),[10 4]) %单下标索引到全下标索引的转换中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.5 二维数组的寻访和赋值
二维数组的赋值
A(r,c)=B %双下标方式赋值,size(B)=size(A(r,c))
A(:)=B(:) %全元素赋值,length(A(:))=length(D(:))
A(s)=B %单下标方式对 A的部分元素赋值。
例:
A=zeros(2,4) ;
A(:)=1:8;
s=[2 5 7];
A(s)=[10:10:30]’,% 单下标方式赋值
A(:,[3:5])=ones(3,3);%全下标方式赋值中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
函数数组运算规则对数组 X=[xij]m× n,函数 f(x)=[f(xij)] m× n
执行数组运算的常用函数
三角函数和双曲函数
sin 正弦函数 asin 反正弦
y=sin(x) y=asin(x)
例,x=-pi,0.1:pi 例 x = -1:.01:1;
y=sin(x) plot(x,asin(x)),grid on
plot(x,y,’r’)
sinh 双曲正弦 asinh反双曲余弦
y=sinh(x) y=asinh(x)
例,x = -5:0.01:5; 例 x = -5:.01:5;
plot(x,sinh(x)),plot(x,asinh(x)),
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
指数函数
exp 指数 y=exp(x) % ex
log 自然对数 y=log(x)
log10 常用对数 y=log10(x)
log2 以 2为底的对数 y=log2(x)
pow2 2的幂 y=pow2(x) %y=2x
y=pow2(z,x) %y=z× 2x
sqrt 平方根 y=sqrt( x)
例,x=-2,2
y=exp(x),
z=pow2(x)
a=exp(x)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
复数函数
abs 绝对值 conj 复数共轭
real 复数实部 angle 相角
imag 复数虚部例 x=[3+4i,1+3i,4+5i,-1+3i],
y=abs(x),
z=real(x)
a=angle(x)
b=imag(x)
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
圆整函数和求余函数
ceil (x),取大于或等于 x的最近的整数(向 +∞圆整函数)
fix(x),向 0取整
floor(x):取小于或等于 x的最近的整数(向 -∞圆整函数)
round(x),取最接近于 x的整数例,a = [-1.9,-0.2,3.4,5.6,7.0,2.4+3.6i]
b =round(a)
b = -2 0 3 6 7 2 + 4i
c =floor(a)
c = -2 -1 3 5 7 2 + 3i
d=fix(a)
d = -1 0 3 5 7 2 + 3i
e=ceil(a)
e= -1 0 4 6 7 3 + 4i
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
rem 求余数
R=rem(x,y)
% y≠0 R=x- fix ( x,/ y),* y,符号与 x相同
y=0 R=nan
mod 模除求余
R=mod(x,y)
% y≠0 R=x- floor ( x,/ y),* y,符号与 y相同
y=0 R=x
说明:若 x,y符号相同,则 rem (x,y) = mod (x,y)
若 x,y为正时,则 rem(-x,y) = mod(-x,y)-y
例 a= rem(7,3),b= mod(7,3),c= rem(-7,3),d= mod(-7,3),
a=1,b=1,c= -1,d=2
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.6 执行数组运算的常用函数
坐标转换函数
cart2sph 直角坐标变为球坐标
[theta,phi,r]= cart2sph(x,y,z)
theta,方位角 phi:俯仰角 r:半径
sph2cart球坐标变为直角坐标
cart2pol 直角坐标变为柱坐标三维
[theta,rho,z] = cart2pol(x,y,z)
二维
[theta,rho] = cart2pol(x,y)
pol2cart柱坐标变为直角坐标中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.7 数组运算和矩阵运算
数组之间运算时,参与运算的数组必须是同维的
矩阵运算遵循线性代数运算规则
关系运算和逻辑运算仅在数组间进行
A〉 B,A&B
数组的乘法,除法,幂运算
A.*B,% 对应项相乘
A./B,%对应项相除 B.\A
A.^n,%A的每个元素自乘 n次
矩阵的乘法,除法,幂运算
A*B,% 线性代数运算规则
A/B,% A*inv( B) XB=A
B\A,% inv( B) *A BX=A
A^n,%A为方阵,自乘 n次中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.7 数组运算和矩阵运算
转置操作数组 A.’ 非共轭转置矩阵 A’ 共轭转置
相关的函数运算数组,exp,log,sqrt
矩阵,expm,logm,sqrtm
例 A=[1,2;3,4],B= [2,3;4,5]
A*B,A/B,B\A,A.*B,B.\A,(A+Bi)’,(A+Bi).’
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 标准数组生成函数和数组操作函数
标准数组生成函数
eye 产生单位数组(矩阵),不适用于高维数组
eye( N) N阶单位数组(单位阵)
eye( M,N) M*N阶数组(矩阵),主对角元素为 1,其余为 0
eye ( [M,N])
rand 产生均匀分布随机数组(矩阵)
rand( N) N阶数组
rand( M,N) M*N阶数组
rand ( L1,L2,L3,?,.) L1*L2*L3*?,.阶高维数组
randn 产生正态分布随机数组
zeros 产生全零函数
zeros( N) N阶
zeros( M,N) M*N阶数组
zeros (L1,L2,L3,?,.) L1*L2*L3 阶高维数组
ones 产生全一数组,不适用于高维数组
magic 产生魔方数组 各行各列及对角线的元素之和相等 (不支持高维数组 )
中 国 民 航 大 学 电 子 信 息 工 程 学 院
2.8 标准数组生成函数和数组操作函数
diag 产生对角形数组,不适用于高维数组
A=diag(V)
V为具有 m个元素的向量其功能是产生一个 m× m对角数组主对角线元素即为向量 V的元素
A=diag(V,k),
其功能是产生一个 n× n(n=m+)对角数组第 k条对角线的元素即为向量 V的元素
k>0 主对角线之上的第 k条对角线
k<0 主对角线之下的第 k条对角线