1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,MATLAB,语言及应用,PART2,数值数组及向量化运算,曾然,zengran,杭州电子科技大学 通信工程学院,数值数组及向量化运算,数值数组(,Numeric Array,)和数组运算(,Array Operations,)始终是,MATLAB,的核心内容,数组浮点算法的特点,一、二维数值数组,的创建和寻访;,数组运算和向量化编程;,实现数组运算的基本函
2、数;,常用标准数组生成函数和数组构作技法;,非数,NaN,、“空”数组概念和应用;,关系和逻辑操作,1,数值计算的特点,符号计算:有很多问题无法解,或求解时间过长。在实际的科学计算、工程设计中,其适用范围远不及数值计算。,数值计算:计算速度快,容量大,能处理各种复杂函数关系。,但只能用有限长度的数据,以有限精度表现有限时间和范围内的函数关系。,1,数值计算的特点,例,已知,,求,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,Marker
3、Size,12),xlabel(x),ylabel(Sx),grid,on,说明,1,数值计算的特点,例,已知,,求,dt,=0.05;,t=0:dt:4;,Ft=exp(-,sin(t,);,Sx,=,dt,*,cumtrapz(Ft,);,Sx(end,),plot(t,Ft,*r,MarkerSize,4),hold on,plot(t,Sx,.k,MarkerSize,15),hold off,xlabel(x,),legend(Ft,Sx,),2,数值数组的创建和寻访,一维数组的创建,创建递增,/,减型一维数组,冒号生成法,:,array=a:inc:b,a-,数组的第一个元素,in
4、c-,采样点之间的间隔,即步长,.,最后一个元素不一定等于,b,其大小为,b=a+inc*(b-a)/inc;,步长可以省略,默认为,1;,inc,可以取正数或负数,但要注意当取正时,要保证,ba,数组最后一个元素不超过,b,取负时,b0,a,b,inc0,2,数值数组的创建和寻访,一维数组的创建,创建递增,/,减型一维数组,定数线性采样法,:,在设定的总点数下,均匀采样生成一维行数组格式为:,x=,linspace,(a,b,n),a-,数组初始,值,b-,数组最后值,n-,数组总个数,增量的计算,-inc=(b-a)/(n-1),特点:方便对数组的元素的总个数进行控制,最后一个元素肯定是设
5、定之值三个参数之间不必满足一定条件,等效于,:x=a:(b-a)/(n-1):b,2,数值数组的创建和寻访,一维数组的创建,通用型一维数组的创建,逐个元素输入法,:,使用场合,:,数据元素比较少并都已知,.,如对少量实验数据的处理可用此种方法,MATLAB,函数生成法:见后,如:,array=2,pi/2,sqrt(3),3+5i,x=1,2,3,4,5,列向量,行向量,2,数值数组的创建和寻访,一维数组的创建,例,一维数组的常用创建方法举例,a1=1:6,a2=0:pi/4:pi,a3=1:-0.1:0,b1=linspace(0,pi,4),b2=logspace(0,3,4),2,数值数
6、组的创建和寻访,一维数组的创建,例,一维数组的常用创建方法举例,c1=2 pi/2 sqrt(3)3+5i,rand(twister,0),c2=rand(1,5),2,数值数组的创建和寻访,二维数组的创建,小规模数组:直接输入(同前),注意方括号“,”,分号“;”以及逗号“,”的使用,中规模数组的数组编辑器创建法,例,根据现有数据创建一个(,3*8,)的数组,:,2,数值数组的创建和寻访,二维数组的创建,中规模数组的,M,文件创建法,例,创建和保存数组,AM,的,MyMatrix.m,文件,:,打开文件编辑调试器,并在空白填写框中输入所需数组。,最好在文件的首行,编写文件名和简短说明,以便查
7、阅。,保存此文件,并且文件起名为,MyMatrix.m,。,以后只要在,MATLAB,指令窗中,运行,MyMatrix.m,文件,数组,AM,就会自动生成于,MATLAB,内存中。,(run,MyMatrix,),2,数值数组的创建和寻访,二维数组的创建,利用,MATLAB,函数创建数组,实际应用中用户往往需要产生一些特殊形式的数组,/,矩阵,因此,MATLAB,提供许多生成特殊数组的函数。,例,标准数组产生的演示,:,ones(2,4),randn(state,0),randn(2,3),D=eye(3),diag(D,),diag(diag(D,),randsrc(3,20,-3,-1,1
8、3,1),2,数值数组的创建和寻访,二维数组元素的标识和寻访,例,演示,:,数组元素及子数组的各种标识和寻访格式;冒号的使用;,end,的作用,A=zeros(2,6),%,首先创建全零数组。下面开始标识和寻访,A(:)=1:12,%,将等式右边赋值给左边,A(2,4),%,双下标,A(8),%,单下标,A(:,1,3),%,双下标,A(1,2,5,6),%,单下标,,把所标识元素排成列向量,2,数值数组的创建和寻访,二维数组元素的标识和寻访,例,演示,:,数组元素及子数组的各种标识和寻访格式;冒号的使用;,end,的作用,A(:,4:end),%end,的作用,A(2,1:2:5)=-1,
9、3,-5,B=A(1,2,2,2,1,3,5),L=A 5),4,标准数组生成函数和操作函数,矩阵分析,例,解多元一次方程,1),将方程化为矩阵与矢量相乘的形式:,AX=b,写出,解题步骤:,2),判断方程组是否有解计算矩阵和其增广矩阵的,3),如果有解,则解为:,X,=A(-1)*b=inv(A)*b,或,X=Ab,A,b,秩,r(A),r(A|b),A=1,3,1;2,1,3;1,1,0;,b=15,20,4,;,rank(A,),rank(A,b,),x +3y+z =15,已知:,2x+y +3z=20,求,x,y,z,之值,x +y =4,5,非数和空数组,非数,按,IEEE,规定
10、0/0,/,0*,等运算都会产生非数,在,matlab,中记为,nan,.,它具有以下性质:,1),nan,参与运算所得结果也是,nan,,即具有传递性,2),非数没有大小概念,因此不能比较两个非数的大小,功能,:,真实记述,0/0,/,0*,运算的后果,;,避免可能因以上运算而造成的程序执行的中断(其他正常运算还可继续运行),;,在数据可视化中,用来裁减图形,(,因非数点不会画出,),5,非数和空数组,非数,【,例,】,非数的产生和性质演示,(1),非数的产生,a=0/0,b=0*log(0),c=inf-inf,(2),非数的传递性,0*a,sin(a),(3),非数的属性判断,clas
11、s(a),isnan(a),isnan-,唯一能正确判断非数的指令,5,非数和空数组,空数组,只要数组某维长度为零,或若干维长度为零,则该数组就是空数组,空数组的功能,在没有空数组参与运算时,计算结果中的空可以合理地解释所得结果的含义,(,如在某数组中寻找满足一定条件的数据,结果没有,得到空数组,表示没有满足条件的元素。见下例,array4),;,空数组的创建,array1=,array2=zeros(2,0),array3=1:-5,a=1,2,3,array4=find(a0),空数组的判断,isempty(array1),6,关系操作和逻辑操作,matlab,的约定,1),在所有关系表达
12、式和逻辑表达式中,作为,输入,的任何非,0,数,(,并非只有,1),都被看作逻辑真,只有,0,才被认为是逻辑假,.,2),所有关系表达式和逻辑表达式的计算结果,即,输出,是一个由,0,和作成的逻辑数组,.,其中表示真,0,表示假,3),逻辑数组是一种,数值类数组,,与“数值类”有关的操作和函数对它依然使用;但它又是,特殊的,数值数组,它表示着对事物的判断结论,“,真,”,与,“,假,”,,有其特殊用途,如数组寻访等。,6,关系操作和逻辑操作,关系操作,指令,含义,指令,含义,=,大于等于,大于,=,不等于,说明:,1),标量,可以与,任何维数的数组,进行比较,比较在此标量和数组 每个元素之间进
13、行,因此比较结果为与被比数组同维的数组,.,2),数组之间,进行比较时,两数组必须是同维的,结果也得到一个同维的数组,6,关系操作和逻辑操作,关系操作,【,例,】,A=2 4 6,3 5 7,1 8 9,B=1 3 5,4 6 8,2 7 9,AB=1 1 1,0 0 0,0 1 0,A5=0 0 1,0 0 1,0 1 1,find(A5),=6,7,8,9,%,得到数组下标,单下标(按列),A(find(A5),=8,6,7,9,%,得到满足条件元素,排成列向量,A(find(A5)=5,或,(A(A5)=5),%,改变所有满足条件元素的值,比较操作:,寻访操作:,6,关系操作和逻辑操作,
14、关系操作,【,例,】,求近似极限,修补图形缺口,sin(,t)/t,t-2,2,t=-2*pi:pi/10:2*pi;,y=sin(t)./t;,%,注意点除,tt=t+(t=0)*eps;,%,处理分母为的点:被“机器零”的小数代替,yy=sin(tt)./tt;,subplot(1,2,1),plot(t,y);,axis(-7,7,-0.5,1.2);,xlabel(t),ylabel(y),title(,残缺图形,);,subplot(1,2,2),plot(tt,yy);,axis(-7,7,-0.5,1.2);,xlabel(t),ylabel(yy),title(,完整图形,),
15、tt=t;tt(find(tt=0)=eps;,或,tt(tt,=0)=eps;,6,关系操作和逻辑操作,逻辑操作,说明:,1),标量可以与任何维的数组运算,.,逻辑运算在标量与数组每个元素间进行,因此运算结果是与参与运算的数组维数相同的数组,.,2),数组之间也可以进行逻辑运算,参与运算的必须维数相同,.,此时运算在两数组同位置上的元素之间进行,.,因此运算结果是与参与运算的数组维数相同的数组,指令,含义,&,与,和,|,或,否,非,6,关系操作和逻辑操作,关系、,逻辑函数,【1】,特殊数据判断指令,指令,含 义,指 令,含 义,all(A),A,中元素,全为非,0,是为,1,否则,0,is
16、equal(A,B),A,B,对应元素相等时,相应元素位置取,1,否则取,0,any(A),A,中有非,0,则为,1,xor(A,B),对应位置元素异或,isempty(x),X,为空,则为,1,isnan(x),判断数组中元素是否为,NaN,isfinite(x),X,中有限大小元素的位置取,1,,其余取,0,isprime(x),质数元素位置处取,1,,其余取,0,isinf(x),x,中无穷大处位置取,1,其余取,0,isreal(x),实数元素位置处取,1,,其余取,0,isletter(x),X,中英文字母处取,1,其余为,0,isspace(x),空格元素处取,1,其余取,0,6,
17、关系操作和逻辑操作,关系、,逻辑函数,【2】,数据类型判断指令,指令,含义,指令,含义,isa(x,name),判断,x,类型,是否指定类型,ishandle(x),判断是否图柄代号,iscell(x),判断,x,是否元胞,islogical(x),判断是否逻辑数据,iscellstr(x),判断,x,是否字符串,元胞数组,isnumeric(x),判断是否数值,ischar(x),判断,x,是否字符串,isobject(x),判断是否对象,isfield(x,name),判断,name,是否架构,x,的域名,issparse(x),判断矩阵是否稀疏,isglobal(x),判断是否全局变量,
18、isstruct(x),判断是否是架构,6,关系操作和逻辑操作,关系、,逻辑函数,【,例,】,正弦函数,y=,sint,(t0,3,),的半波整流,0,pi,2pi,3pi,t2pi,z=sin(t)*1,否则,z=sin(t)*0,6,关系操作和逻辑操作,关系、,逻辑函数,【,例,】,正弦函数,y=,sint,(t0,3,),的半波整流,t=linspace(0,3*pi,500);,y=sin(t);,z=(t2*pi),.*,y;,subplot(1,2,1),plot(t,y),ylabel(y);,subplot(1,2,2),plot(t,z),axis(0 10-1 1);,x=,1,2,3,4,5,6,7,8,9,y=x6y=1,1,1,0,0,0,1,1,1,z=x.*y=1,2,3,0,0,0,7,8,9,z=y,.*,(y0);,






