第三章数值数组及向量化运算matlab基础教程.docx
- 文档编号:24932599
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:13
- 大小:20.69KB
第三章数值数组及向量化运算matlab基础教程.docx
《第三章数值数组及向量化运算matlab基础教程.docx》由会员分享,可在线阅读,更多相关《第三章数值数组及向量化运算matlab基础教程.docx(13页珍藏版)》请在冰豆网上搜索。
第三章数值数组及向量化运算matlab基础教程
第三章数值数组及向量化运算(matlab基础教程)
第3章数值数组及向量化运算
数值数组(NumericArray)和数组运算(ArrayOperations)始终是MATLAB的核心内容。
本书从第3章起,全部注意力将集中于数值数组及其运算。
本章系统阐述:
数组浮点算法的特点;一、二维数值数组的创建和寻访;数组运算和向量化编程;实现数组运算的基本函数;常用标准数组生成函数和数组构作技法;非数NaN、“空”数组概念和应用;关系和逻辑操作。
3.1数值计算的特点和地位
【例3.1-1】已知f(t)t2cost,求s(x)
(1)符号计算解法
symstxft=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)
x
f(t)dt。
(2)数值计算解法
dt=0.05;t=0:
dt:
5;Ft=t.^2.*cos(t);Sx=dt*cumtrapz(Ft);t(end-4:
end)Sx(end-4:
end)
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
图3.1-1在区间[0,5]采样点上算得的定积分值
【例3.1-2】已知
f(t)esin(t),求s(x)0f(t)dt。
4
(1)符号计算解法
symstx
ft=exp(-sin(t))sx=int(ft,t,0,4)ft=
exp(-sin(t))
Warning:
Explicitintegralcouldnotbefound.Insym.intat58sx=
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)holdoffxlabel('x')
legend('Ft','Sx')ans=
3.0632
图3.1-2在区间[0,4]中间的被积函数及其原函数的离散计算结果
3.2
3.2.1一二
数值数组的创建和寻访
一维数组的创建递增/减型一维数组的创建通用型一维数组的创建
【例3.2-1】一维数组的常用创建方法举例。
a1=1:
6a2=0:
pi/4:
pia3=1:
-0.1:
0a1=
123456a2=
00.78541.57082.35623.1416
a3=
Columns1through6
1.00000.90000.80000.70000.60000.5000Columns7through11
0.40000.30000.20XX年0.10000
b1=linspace(0,pi,4)b2=logspace(0,3,4)b1=
01.04722.09443.1416b2=
1101001000
c1=[2pi/2sqrt(3)3+5i]c1=
Columns1through3
2.00001.57081.7321Column4
3.0000+5.0000i
rand('state',0)c2=rand(1,5)c2=
0.95010.23110.60680.48600.8913
3.2.2一
二维数组的创建小规模数组的直接输入法
【例3.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.69090.70714.82443.5000+1.0000i
二中规模数组的数组编辑器创建法
【例3.2-3】根据现有数据创建一个(38)的数组。
图3.2-1利用数组编辑器创建中规模数组
三中规模数组的M文件创建法
【例3.2-4】创建和保存数组AM的MyMatrix.m文件。
(1)打开文件编辑调试器,并在空白填写框中输入所需数组(见图3.2-2)。
(2)最好,在文件的首行,编写文件名和简短说明,以便查阅(见图3.2-2)。
(3)保存此文件,并且文件起名为MyMatrix.m。
(4)以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成
于MATLAB内存中。
图3.2-2利用M文件创建数组
四利用MATLAB函数创建数组
【例3.2-5】标准数组产生的演示。
ones(2,4)ans=
11111111
randn('state',0)randn(2,3)ans=
-0.43260.1253-1.1465-1.66560.28771.1909
D=eye(3)D=
100010001
diag(D)ans=111
diag(diag(D))ans=
100010001
randsrc(3,20,[-3,-1,1,3],1)ans=
Columns1through13
313-1-33-3-3-13-1-1-31313-1111111133-1-3-11-13-1-111-1-3Columns14through20
11-33-113-1-1-3-1-11-33-1-13-133
3.2.3二维数组元素的标识和寻访
【例3.2-6】本例演示:
数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。
A=zeros(2,6)A(:
)=1:
12A=
000000000000A=
135791124681012
A(2,4)A(8)ans=8ans=8
A(:
[1,3])A([1,2,5,6]')ans=
1526ans=1256
A(:
4:
end)ans=
791181012
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=A3A(L)=NaNL=
100000101010A=
NaN357911NaN4NaN8NaN12
3.2.4
a=1:
8
数组构作技法综合
【例3.2-7】数组操作函数reshape,diag,repmat的用法;空阵[]删除子数组的用法。
A=reshape(a,4,2)A=reshape(A,2,4)a=
12345678A=
15263748A=
13572468
b=diag(A)B=diag(b)b=14B=
1004
D1=repmat(B,2,4)D1=
10101010040404041010101004040404
D1([1,3],:
)=[]D1=
0404040404040404
【例3.2-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。
A=reshape(1:
9,3,3)A=
147258369
B=flipud(A)B=
369258147
C=fliplr(A)C=
741852963
D=rot90(A,2)D=
963852741
3.3数组运算
3.3.1一二三四3.3.2
数组运算的由来和规则函数关系数值计算模型的分类提高程序执行性能的三大措施数组运算规则
数组运算符及数组运算函数
数组运算和向量化编程
u
,其中r,u,i分别是电阻(欧姆)、电压(伏特)、电流(安i
【例3.3-1】欧姆定律:
r
培)。
验证实验:
据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。
(测得的电压电流具体数据见下列程序)。
(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:
Lr(k)=vr(k)/ir(k);end
%---------------------------sr=0;
fork=1:
Lsr=sr+r(k);end
rm=sr/Lrm=
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./irrm=mean(r)r=
Columns1through7
31.785730.000030.900029.448330.678029.883730.0669Columns8through10
30.817131.493530.1739rm=
30.5247
【例3.3-2】用间距为0.1的水平线和垂直线均匀分割x[5,5],y[2.5,2.5]的矩形域,在所有水平线和垂直线交点上计算函数zsin|xy|的值,并图示。
(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)));endend
(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指定域上的二元函数图形
3.4
3.4.1
“非数”和“空”数组
非数NaN
【例3.4-1】非数的产生和性质演示。
(1)非数的产生
a=0/0,b=0*log(0),c=inf-inf
a=NaNb=NaNc=
NaN
(2)非数的传递性
0*a,sin(a)
ans=NaNans=NaN
(3)非数的属性判断
class(a)isnan(a)ans=doubleans=1
【例3.4-2】非数元素的寻访。
rand('state',0)
R=rand(2,5);R(1,5)=NaN;R(2,3)=NaNR=
0.95010.60680.89130.4565NaN0.23110.4860NaN0.01850.4447
LR=isnan(R)LR=
0000100100
si=find(LR)[ri,ci]=ind2sub(size(R),si)[rj,cj]=find(LR)
disp('非数在二维数组R中的位置')
disp(['单下标时的第',int2str(si
(1)),'和第',int2str(si
(2)),'个元素'])si=69ri=21ci=35rj=21cj=35
非数在二维数组R中的位置
单下标时的第6和第9个元素
3.4.2“空”数组
【例3.4-3】关于“空”数组的算例。
(1)创建“空”数组的几种方法
a=[]
b=ones(2,0),c=zeros(2,0),d=eye(2,0)f=rand(2,3,0,4)a=
[]b=
Emptymatrix:
2-by-0c=
Emptymatrix:
2-by-0d=
Emptymatrix:
2-by-0f=
Emptyarray:
2-by-3-by-0-by-4
(2)“空”数组的属性
class(a)isnumeric(a)isempty(a)ans=doubleans=1ans=1
whichandims(a)size(a)aisavariable.ans=2ans=
00
(3)“空”数组用于子数组的删除和大数组的大小收缩A=reshape(-4:
5,2,5)
A=
-4-2024-3-1135
A(:
[2,4])=[]A=
-404-315
3.5
关系操作和逻辑操作
3.5.1
关系操作
【例3.5-1】关系运算示例。
A=1:
9,B=10-A
r0=(A4)r1=(A==B)A=
123456789B=
987654321r0=
111000000r1=
000010000
【例3.5-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('正确图形')
图3.5-1采用近似极限处理前后的图形对照
3.5.2逻辑操作
【例3.5-3】逻辑操作和关系操作。
本例演示:
逻辑、关系操作的组合;xor的作用。
(1)逻辑、关系操作的组合
A=[-2,-1,0,0,1,2,3]
L1=~(A1)%判断A中,哪些元素不大于1
L2=(A0)(A2)%判断A中,哪些元素大于0且小于3A=
-2-100123L1=
1111100L2=
0000100
(2)xor的作用
A,B=[0,-1,1,0,1,-2,-3]
C=xor(A,B)%当A,B数组中,两个对应元素中仅一个为0时,给出1。
否则为0。
【例3.5-4】试绘制如图3.5-2最下那幅子图所示的“正弦波sint的削顶半波整流波形”,削顶发生在每个周期的[60,120]之间。
clear,t=linspace(0,3*pi,500);y=sin(t);z1=((tpi)|(t2*pi)).*y;w=(tpi/3t2*pi/3)+(t7*pi/3t8*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')
3.5.3常用逻辑函数
习题3
1.要求在闭区间[0,2]上产生具有10个等距采样点的一维数组。
试用两种不同的指令实
现。
2.由指令rand('state',0),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的
位置,分别求出它们的“全下标”和“单下标”。
〖答案〗
大于0.5的元素的全下标
行号132332312列号112234455
大于0.5的元素的单下标
1356911121314
3.在使用123作为rand随机数发生器的初始化状态的情况下,写出产生长度为1000的“等
概率双位(即取-1,+1)取值的随机码”程序指令,并给出-1码的数目。
〖答案〗Na=
490
4.已知矩阵A
12
,运行指令B1=A.^(0.5),B2=A^(0.5),可以观察到不同运算方法所34
得结果不同。
(1)请分别写出根据B1,B2恢复原矩阵A的程序。
(2)用指令检验所得的两个恢复矩阵是否相等。
5.在时间区间[0,10]中,绘制y1e0.5tcos2t曲线。
要求分别采取“标量循环运算法”
和“数组运算法”编写两段程序绘图。
6.先运行clear,formatlong,rand('state',1),A=rand(3,3),然后根据A写出两个矩阵:
一个对
角阵B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。
7.先运行指令x=-3*pi:
pi/15:
3*pi;y=x;[X,Y]=meshgrid(x,y);warningoff;
Z=sin(X).*sin(Y)./X./Y;产生矩阵Z。
(1)请问矩阵Z中有多少个“非数”数据?
(2)用指令surf(X,Y,Z);shadinginterp观察所绘的图形。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
〖答案〗
NumOfNaN=181
1k19k12k29k2
,8.下面有一段程序,企图用来解决如下计算任务:
有矩阵Ak
k2k10k
当k依次取10,9,8,7,6,5,4,3,2,1时,计算矩阵Ak“各列元素的和”,并把此求和
1428结果存放为矩阵Sa的第k行。
例如k3时,A阵为2529,此时它各列元3630
素的和是一个(110)行数组61587,并把它保存为Sa的第3行。
问题:
该
段程序的计算结果对吗?
假如计算结果不正确,请指出错误发生的根源,并改正之。
fork=10:
-1:
1
A=reshape(1:
10*k,k,10);Sa(k,:
)=sum(A);endSa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 数值 数组 量化 运算 matlab 基础教程