matlab数值数组及向量化运算.docx
- 文档编号:3325143
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:159.36KB
matlab数值数组及向量化运算.docx
《matlab数值数组及向量化运算.docx》由会员分享,可在线阅读,更多相关《matlab数值数组及向量化运算.docx(19页珍藏版)》请在冰豆网上搜索。
matlab数值数组及向量化运算
第2章数值数组及向量化运算
数值数组(NumericArray)和数组运算(ArrayOperations)始终是MATLAB的核心内容。
本章教学内容:
数组浮点算法的特点;一、二维数值数组的创建和寻访;常用标准数组生成函数和数组构作技法;数组运算和向量化编程;实现数组运算的基本函数;关系和逻辑操作。
2.1数值计算的特点和地位
【例2.1-1】已知
,求
。
(1)符号计算解法
symstx%定义符号变量
ft=t^2*cos(t)
sx=int(ft,t,0,x)
ft=
t^2*cos(t)
sx=
x^2*sin(x)-2*sin(x)+2*x*cos(x)
(2)数值计算解法
dt=0.05;
t=0:
dt:
5;%取一些离散点
Ft=t.^2.*cos(t);
Sx=dt*cumtrapz(Ft);%梯形法求定积分
t(end-4:
end)%end表示最后一个元素
Sx(end-4:
end)%Sx的最后5个元素
plot(t,Sx,'.k','MarkerSize',12)
xlabel('x'),ylabel('Sx'),gridon
ans=
4.80004.85004.90004.95005.0000
ans=
-20.1144-19.9833-19.7907-19.5345-19.2131
图2.1-1在区间[0,5]采样点上算得的定积分值
【例2.1-2】已知
,求
。
本例演示:
被积函数没有“封闭解析表达式”,符号计算无法解题!
(1)符号计算解法
symstx
ft=exp(-sin(t))
sx=int(ft,t,0,4)
ft=
exp(-sin(t))
Warning:
Explicitintegralcouldnotbefound.
>Insym.intat58
sx=
int(exp(-sin(t)),t=0..4)
(2)数值计算解法
dt=0.05;
t=0:
dt:
4;
Ft=exp(-sin(t));
Sx=dt*cumtrapz(Ft);
Sx(end)
plot(t,Ft,'*r','MarkerSize',4)
holdon
plot(t,Sx,'.k','MarkerSize',15)
holdoff
xlabel('x')
legend('Ft','Sx')
ans=
3.0632
图2.1-2在区间[0,4]中间的被积函数及其原函数的离散计算结果
小结:
(1)符号计算
长处——可以对包含变量字符、参数字符和数字的表达式进行推理、运算,并给出符号结果,与高等数学中的解析式比较接近;符号计算的短处——很多问题无解或求解时间过长。
(2)数值计算
在确定一组自变量采样点基础上,执行数值计算的表达式在已知的数值点上进行计算。
它适用范围比符号计算广,以有限的精度表现有限时间和范围内的函数关系。
2.2数值数组的创建和寻访
MATLAB把数组看作存储和运算的基本单元,而标量数据看作(1×1)的数组。
2.2.1一维数组的创建
1.递增/减型一维数组的创建
数组元素值的大小按递增或递减的次序排列,数组元素之间的“差”是“确定的”,即“等步长”。
(1)“冒号”生成法
x=a:
inc:
b;a—数组的第一个元素;inc—步长,默认值为1;最后一个元素小于等于b。
(2)线性(或对数)定点法
x=linspace(a,b,n);产生线性等间隔(1×n)行数组,等价于x=a:
(b-a)/(n-1):
b;
x=logspace(a,b,n);产生对数等间隔(1×n)行数组,n—一维数组的长度。
(线性等分向量)linspace=linearspacelinear线性的space间隔
2.通用型一维数组的创建
利用函数生成特殊形式数组。
【例2.2-1】一维数组的常用创建方法举例。
a1=1:
6
a2=0:
pi/4:
pi
a3=1:
-0.1:
0
a1=
123456
a2=
00.78541.57082.35623.1416
a3=
Columns1through6
1.00000.90000.80000.70000.60000.5000
Columns7through11
0.40000.30000.20000.10000
b1=linspace(0,pi,4)
b2=logspace(0,3,4)
b1=
01.04722.09443.1416
b2=
1101001000
c1=[2pi/2sqrt(3)3+5i]
c1=
Columns1through3
2.00001.57081.7321
Column4
3.0000+5.0000i
rand('state',0)
c2=rand(1,5)%均匀随机数组
c2=
0.95010.23110.60680.48600.8913
2.2.2二维数组的创建
1.小规模数组的直接输入法
【例2.2-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.00005.4716+0.4177i0.6909
0.70714.82443.5000+1.0000i
数组的三个要素:
括号[];逗号或空格;分号或回车键。
2.中规模数组的数组编辑器创建法
【例2.2-3】根据现有数据创建一个
的数组。
图2.2-1利用数组编辑器创建中规模数组
3.中规模数组的M文件创建法
【例2.2-4】创建和保存数组AM的MyMatrix.m文件。
(1)打开文件编辑调试器,并在空白填写框中输入所需数组(见图2.2-2)。
(2)在文件的首行,编写文件名和简短说明,以便查阅(见图2.2-2)。
(3)保存此文件,并且文件起名为MyMatrix.m。
(4)以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内存中。
图2.2-2利用M文件创建数组
4.利用MATLAB函数创建数组
【例2.2-5】标准数组产生的演示。
ones(2,4)%产生全1元素数组zeros—产生全0元素数组
ans=
1111
1111
randn('state',0)%产生正态分布随机数组;rand—产生均匀分布随机数组
randn(2,3)
ans=
-0.43260.1253-1.1465
-1.66560.28771.1909
D=eye(3)%产生单位数组
D=
100
010
001
diag(D)%产生对角数组
ans=
1
1
1
diag(diag(D))
ans=
100
010
001
randsrc(3,20,[-3,-1,1,3],1)%在指定字符集生成均匀随机数组;random—生成各种分布随机数组
ans=
Columns1through10
313-1-33-3-3-13
1313-111111
3-1-3-11-13-1-11
Columns11through20
-1-1-311-33-113
113-1-1-3-1-11-3
1-1-33-1-13-133
2.2.3二维数组元素的标识和寻访
【例2.2-6】本例演示:
数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。
A=zeros(2,6)
A(:
)=1:
12
A=
000000
000000
A=
1357911
24681012
A(2,4)
A(8)
ans=
8
ans=
8
A(:
[1,3])
A([1,2,5,6]')
ans=
15
26
ans=
1
2
5
6
A(:
4:
end)
ans=
7911
81012
A(2,1:
2:
5)=[-1,-3,-5]
A=
1357911
-14-38-512
B=A([1,2,2,2],[1,3,5])
B=
159
-1-3-5
-1-3-5
-1-3-5
L=A<3
A(L)=NaN
L=
100000
101010
A=
NaN357911
NaN4NaN8NaN12
格式
使用说明
全下标法
A(r,c)
A的r行c列上元素
A(r,:
)
A的r行全部列元素
A(:
c)
A的c列全部行元素
单下标法
A(:
)
“单下标全元素”,由A的各列按自左到右次序,首尾相连生成的“一维”数组
A(s)
“单下标”寻访,生成s指定的“一维”数组,s行数组(列数组),则A(s)就是长度相同的行数组(列数组)
逻辑标识法
A(L)
“逻辑1”寻访,由与A同样大小的“逻辑数组”L中的“1”元素选出A的对应元素
2.2.4数组构作技法综合
【例2.2-7】数组操作函数reshape,diag,repmat的用法;空阵[]删除子数组的用法。
a=1:
8
A=reshape(a,4,2)%在总元素不变的前提下,改变数组的行数或列数
A=reshape(A,2,4)
a=
12345678
A=
15
26
37
48
A=
1357
2468
b=diag(A)
B=diag(b)
b=
1
4
B=
10
04
D1=repmat(B,2,4)%按指定的行数2、列数4,把B作为模块铺放形成更大维数的数组
D1=
10101010
04040404
10101010
04040404
D1([1,3],:
)=[]
D1=
04040404
04040404
【例2.2-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。
A=reshape(1:
9,3,3)
A=
147
258
369
B=flipud(A)%以数组“水平中线”为对称轴,交换上下对称位置上的数组元素
B=
369
258
147
C=fliplr(A)%以数组“垂直中线”为对称轴,交换左右对称位置上的数组元素
C=
741
852
963
D=rot90(A,2)%把数组逆时针旋转90度
D=
963
852
741
2.3数组运算
2.3.1数组运算的由来和规则
1.数组运算规则
(1)同维数组运算
,
,
(2)标量和数组运算
,
,
(3)函数的数组运算
,
结论:
数组运算是对单个元素进行运算。
2.数组运算符及数组运算函数
(1)运算符
+,-,.*,./(.\),.^(乘方运算),.'(表示非共轭转置),关系、逻辑运算符。
数组运算两个数组必须同维数,矩阵还必须乘法要求的维数;矩阵左除运算是MATLAB专门设计的一种运算。
(2)运算函数
三角、反三角函数;双曲、反双曲函数;指数、对数函数(exp,sqrt,log,log10);园整、求余函数(round,fix,mod,floor);模、角、虚实部(abs,angle,real,imag,conj);符号函数(sign)。
2.3.2数组运算和向量化编程
【例2.3-1】欧姆定律:
,其中
分别是电阻(欧姆)、电压(伏特)、电流(安培)。
验证实验:
据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。
(测得的电压电流具体数据见下列程序)。
(1)非向量化程序
clear
vr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];
ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299,0.257,0.308,0.345];
%--------------------
L=length(vr);
fork=1:
L
r(k)=vr(k)/ir(k);
end
%---------------------------
sr=0;
fork=1:
L
sr=sr+r(k);
end
rm=sr/L
rm=
30.5247
(2)向量化程序
clear
vr=[0.89,1.20,3.09,4.27,3.62,7.71,8.99,7.92,9.70,10.41];
ir=[0.028,0.040,0.100,0.145,0.118,0.258,0.299,0.257,0.308,0.345];
r=vr./ir
rm=mean(r)
r=
31.785730.000030.900029.448330.678029.883730.066930.817131.493530.1739
rm=
30.5247
小结:
(1)采用“数组运算”(“向量化运算”)模式处理反复执行的标量运算,提高程序的执行性能;
(2)采用“向量或矩阵运算”模式去执行那些传统上靠多重循环标量运算完成的矩阵计算。
【例2.3-2】用间距为0.1的水平线和垂直线均匀分割
的矩形域,在所有水平线和垂直线交点上计算函数
的值,并图示。
(1)
clear
x=-5:
0.1:
5;
y=(-2.5:
0.1:
2.5)';
N=length(x);
M=length(y);
forii=1:
M
forjj=1:
N
X0(ii,jj)=x(jj);
Y0(ii,jj)=y(ii);
Z0(ii,jj)=sin(abs(x(jj)*y(ii)));
end
end
(2)
[X,Y]=meshgrid(x,y);
Z=sin(abs(X.*Y));
(3)
norm(Z-Z0)
ans=
0
(4)
surf(X,Y,Z)
xlabel('x')
ylabel('y')
shadinginterp
view([190,70])
图3.3-1指定域上的二元函数图形
2.4关系操作和逻辑操作
在程序流控制、逻辑推理中,需要“真”和“假”判断。
MATLAB约定:
非0看作“逻辑真”;数组运算结果中的1表示“真”、0表示“假”;“数值类”有关操作同样适用于关系和逻辑操作。
2.4.1关系操作
>(大于),>=(大于等于),<(小于),<=(小于等于),==(等于)~=(不等于)
【例2.4-1】关系运算示例。
A=1:
9,B=10-A
r0=(A<4)
r1=(A==B)
A=
123456789
B=
987654321
r0=
111000000
r1=
000010000
【例2.4-2】关系运算应用。
t=-3*pi:
pi/10:
3*pi;
y=sin(t)./t;
tt=t+(t==0)*eps;
yy=sin(tt)./tt;
subplot(1,2,1),plot(t,y),axis([-9,9,-0.5,1.2]),
xlabel('t'),ylabel('y'),title('残缺图形')
subplot(1,2,2),plot(tt,yy),axis([-9,9,-0.5,1.2])
xlabel('tt'),ylabel('yy'),title('正确图形')
Warning:
Dividebyzero.
图2.4-1采用近似极限处理前后的图形对照
2.4.2逻辑操作
&(与),|(或),~(非),xor(异或)
【例2.4-3】逻辑操作和关系操作。
本例演示:
逻辑、关系操作的组合;xor的作用。
(1)逻辑、关系操作的组合
A=[-2,-1,0,0,1,2,3]
L1=~(A>1)%判断A中,哪些元素不大于1
L2=(A>0)&(A<2)%判断A中,哪些元素大于0且小于3
A=
-2-100123
L1=
1111100
L2=
0000100
(2)xor的作用
A,B=[0,-1,1,0,1,-2,-3]
C=xor(A,B)%当A,B数组中,两个对应元素中仅一个为0时,给出1。
否则为0。
A=
-2-100123
B=
0-1101-2-3
C=
1010000
【例2.4-4】试绘制如图2.4-2最下那幅子图所示的“正弦波
的削顶半波整流波形”,削顶发生在每个周期的
之间。
clear,t=linspace(0,3*pi,500);y=sin(t);
z1=((t
w=(t>pi/3&t<2*pi/3)+(t>7*pi/3&t<8*pi/3);
wn=~w;
z2=w*sin(pi/3)+wn.*z1;
subplot(4,1,1),plot(t,y,':
r'),axis([0,10,-1.5,1.5])
ylabel('y'),gridon
subplot(4,1,2),plot(t,z1,':
r'),axis([0,10,-0.2,1.5]),ylabel('z1')
subplot(4,1,3),plot(t,wn,':
r'),axis([0,10,-0.2,1.5]),ylabel('wn')
subplot(4,1,4),plot(t,z2,'-b'),axis([0,10,-0.2,1.5]),ylabel('z2')
xlabel('t')
图2.4-2逐段解析函数的产生
2.4.3常用逻辑函数
含0数组判断:
all,any
生成逻辑数组:
false,true,logical
数据对象判断:
isempty,isprime,isfinite,isreal,isinf,isletter,isnan,isspace
数据类型判断:
isa,ischar,isglobal,ishandle,islogical,isnumeric
作业2
1.要求在闭区间
上产生具有10个等距采样点的一维数组。
试用两种不同的指令实现。
〖答案〗
2.由指令rand('state',0),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
〖答案〗
3.在时间区间[0,10]中,绘制
曲线。
要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
〖答案〗
(注:
本资料素材和资料部分来自网络,仅供参考。
请预览后才下载,期待您的好评与关注!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 数值 数组 量化 运算
![提示](https://static.bdocx.com/images/bang_tan.gif)