您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 2013-第三章matlab
1第3章数值数组及向量化运算数值数组(NumericArray)和数组运算(ArrayOperations)始终是MATLAB的核心内容。本书从第3章起,全部注意力将集中于数值数组及其运算。本章系统阐述:数组浮点算法的特点;一、二维数值数组的创建和寻访;数组运算和向量化编程;实现数组运算的基本函数;常用标准数组生成函数和数组构作技法;非数NaN、“空”数组概念和应用;关系和逻辑操作。3.1数值计算的特点和地位【例3.1-1】已知tttfcos)(2,求dttfxsx0)()(。(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)(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'),gridonans=4.80004.85004.90004.95005.0000ans=-20.1144-19.9833-19.7907-19.5345-19.2131图3.1-1在区间[0,5]采样点上算得的定积分值【例3.1-2】已知)sin()(tetf,求40)()(dttfxs。(1)符号计算解法symstxft=exp(-sin(t))2sx=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)holdonplot(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.1416a3=Columns1through631.00000.90000.80000.70000.60000.5000Columns7through110.40000.30000.20000.10000b1=linspace(0,pi,4)b2=logspace(0,3,4)b1=01.04722.09443.1416b2=1101001000c1=[2pi/2sqrt(3)3+5i]c1=Columns1through32.00001.57081.7321Column43.0000+5.0000irand('state',0)c2=rand(1,5)c2=0.95010.23110.60680.48600.89133.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】根据现有数据创建一个)83(的数组。图3.2-1利用数组编辑器创建中规模数组三中规模数组的M文件创建法【例3.2-4】创建和保存数组AM的MyMatrix.m文件。(1)打开文件编辑调试器,并在空白填写框中输入所需数组(见图3.2-2)。(2)最好,在文件的首行,编写文件名和简短说明,以便查阅(见图3.2-2)。(3)保存此文件,并且文件起名为MyMatrix.m。4(4)以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM就会自动生成于MATLAB内存中。图3.2-2利用M文件创建数组四利用MATLAB函数创建数组【例3.2-5】标准数组产生的演示。ones(2,4)ans=11111111randn('state',0)randn(2,3)ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)D=100010001diag(D)ans=111diag(diag(D))ans=100010001randsrc(3,20,[-3,-1,1,3],1)ans=Columns1through10313-1-33-3-3-131313-1111113-1-3-11-13-1-11Columns11through20-1-1-311-33-113113-1-1-3-1-11-31-1-33-1-13-1333.2.3二维数组元素的标识和寻访【例3.2-6】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。A=zeros(2,6)5A(:)=1:12A=000000000000A=135791124681012A(2,4)A(8)ans=8ans=8A(:,[1,3])A([1,2,5,6]')ans=1526ans=1256A(:,4:end)ans=791181012A(2,1:2:5)=[-1,-3,-5]A=1357911-14-38-512B=A([1,2,2,2],[1,3,5])B=159-1-3-5-1-3-5-1-3-5L=A3A(L)=NaNL=100000101010A=NaN357911NaN4NaN8NaN123.2.4数组构作技法综合【例3.2-7】数组操作函数reshape,diag,repmat的用法;空阵[]删除子数组的用法。a=1:8A=reshape(a,4,2)A=reshape(A,2,4)a=12345678A=156263748A=13572468b=diag(A)B=diag(b)b=14B=1004D1=repmat(B,2,4)D1=10101010040404041010101004040404D1([1,3],:)=[]D1=0404040404040404【例3.2-8】函数flipud,fliplr,rot90对数组的操作体现着“矩阵变换”。A=reshape(1:9,3,3)A=147258369B=flipud(A)B=369258147C=fliplr(A)C=741852963D=rot90(A,2)D=9638527413.3数组运算73.3.1数组运算的由来和规则一函数关系数值计算模型的分类二提高程序执行性能的三大措施三数组运算规则四数组运算符及数组运算函数3.3.2数组运算和向量化编程【例3.3-1】欧姆定律:iur,其中iur,,分别是电阻(欧姆)、电压(伏特)、电流(安培)。验证实验:据电阻两端施加的电压,测量电阻中流过的电流,然后据测得的电压、电流计算平均电阻值。(测得的电压电流具体数据见下列程序)。(1)非向量化程序clearvr=[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);endrm=sr/Lrm=30.5247(2)向量化程序clearvr=[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=31.785730.000030.900029.448330.678029.883730.066930.817131.493530.1739rm=30.5247【例3.3-2】用间距为0.1的水平线和垂直线均匀分割]5.2,5.2[],5,5[yx的矩形域,在所有水平线和垂直线交点上计算函数||sinxyz的值,并图示。(1)clearx=-5:0.1:5;y=(-2.5:0.1:2.5)';N=length(x);M=length(y);8forii=1:Mforjj=1:NX0(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')shadinginterpview([190,70])图3.3-1指定域上的二元函数图形3.4“非数”和“空”数组3.4.1非数NaN【例3.4-1】非数的产生和性质演示。(1)非数的产生a=0/0,b=0*log(0),c=inf-infWarning:Dividebyzero.a=NaNWarning:Logofzero.b=NaNc=9NaN(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.4447LR=isnan(R)LR=0000100100si=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)10a=[]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=1whichandims(a)size(a)aisavariable.ans=2ans=00(3)“空”数组用于子数组的删除和大数组的大小收缩A=reshape(-4:5,2,5)A=-4-2024-3-1135A(:,[2,4])=[]A=-404-3153.5关系操作和逻辑操作3.5.1关系操作【例3.5-1】关系运算示例。A=1:9,B=10-Ar0=(A4)r1=(A==B)A=123456789B=
本文标题:2013-第三章matlab
链接地址:https://www.777doc.com/doc-3039570 .html