资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Matlab,:一维数组及其应用,一、一维数组,二、一维数组在二维绘图中的应用,三、一维数组在向量运算中的应用,四、一维数组在一元多项式运算中的应用,一、一维数组,数值数组,(,简称为数组,),是,Matlab,中最重要的一种内建数据类型,数组运算,是,Matlab,软件定义的运算规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。,无论在数组上施加什么运算,(,加减乘除或函数,),,总认定那种运算,对被运算数组中的每个元素,(Element),进行运算。,1,、一维数组的两种形式,行数组:,n,个元素排成一行,又称为行向量(,row vector,),列数组:,m,个元素排成一列,又称为列向量(,column vector,),一般情况下,向量指列向量,2,、用方括号,创建一维数组,整个数组放在方括号里,行数组元素用空格或,逗号,分隔,x=2,pi/2,sqrt(3),3+5i,列数组元素用,分号,分隔,y=2;pi;3/4;j,标点符号一定要在英文状态下输入,x=,生成空数组,3,、用冒号创建一维数组,x=,a:b,x=,a:inc:b,默认,inc=1,x=a,a+inc,a+2*inc,a,,,b,必须为实数,a,是数组,x,中的第一个元素,,b,不一定是数组,x,的最后一个元素。,4,、用,linspace,(),函数创建一维数组,x=,linspace(a,b,),x=,linspace(a,b,n,),x=linspace(0,pi,10),x=linspace(1+i,100+100*i),在,a,b,区间内生成,n,个数据,包括,a,和,b,在内,默认,n=100,若,a,,,b,为实数,等效于:,5,、用,logspace,(),函数创建一维数组,x=,logspace(a,b,),默认,n=50,x=,logspace(a,b,n,),x=,logspace(a,pi,),6,、引用一维数组中的单个元素,x=1:5,k=2,a=,x(k,),引用数组,x,中的第,k,个元素,将其赋值给变量,a,b=,x(,end,),引用数组,x,中的最后一个元素,,将其赋值给变量,b,c =x(8),会出现什么结果?,7,、一维数组中单个元素的赋值,x=1:5,a=1.5,k=3,x(k,)=0,将,0,赋值给数组,x,中的第,k,个元素,x(,end,)=a,将,a,赋值给数组,x,中的最后一个元素,x(8)=6.5,会出现什么结果,?,8,、引用一维数组中的子数组,引用一维数组,x,中的第,2,、,5,、,9,个元素,将其赋值给变量,a,x=linspace(1,5),a=x(2,5,9),b=x(end:-1:1),c=x(1:2:end),d=x(2:2:end),b=?c=?d=?,x=linspace(1,5),s=2,5,9,a=,x(s,),9,、给一维数组中的子数组赋值,将,2,、,7,分别赋值给,x,的第,1,、,4,个元素,x=linspace(1,5),x(1,4)=2,7,x=linspace(1,5),s=1,4,a=2,7,x(s,)=a,10,、,Matlab,中的函数在一维数组上的运算规则,Matlab,中的很多函数都可以直接以数组作为输入参数,函数输出也为数组。,输入为行数组,则输出也为行数组,输入为列数组,则输出也为列数组,10,、一维数组的转置运算,x.,x,x,做转置(行列,列行),x,做共轭转置,若,x,的元素均为实数,则,x.,与,x,的结果相同,x=(1:100),11,、一维数组与一维数组的运算,x+y,x-y,x.*y,x./y,x.y,x.y,加,减,乘,右除,左除,幂,两个一维数组之间进行运算,要求:,1,、两个数组都为行数组(或都为列数组),2,、数组元素个数相同,,对应位置的元素做,C,语言中,可使用循环语句完成类似的操作,y+x,y-x,y.*x,y./x,y.x,y.x,12,、一维数组与数的运算,若,x,为数组,,c,为数(实数或复数,),,x+c,x c,c.*x,x./c,x.c,x.c,加,减,乘,右除,左除,幂,数组的每个元素都与数,c,做,c+x,c-x,c*x,c./x,c.x,c.x,13,、与一维数组相关的函数,max(x,),a,b,=,max(x,),max(x,y,),返回,x,中的最大值,返回,x,的最大值,(a),及最大值在,x,中的位置,(b),返回一向量,元素为,x,y,相同位置上的较大值,min(x,),c,d,=,min(x,),min(x,y,),返回,x,中的最小值,返回,x,的最小值,(c),及最小值在,x,中的位置,返回一向量,元素为,x,y,相同位置上的较小值,mean(x,),返回,x,的平均值,median(x,),返回,x,中元素的中值,std(x,),计算,x,中的数值的标准差,sum(x,),计算,x,的所有元素的和,cumsum(x,),返回一个包含,x,的元素的累加和的向量,其大小与,x,相同,prod(x,),计算,x,的元素的积,cumprod(x,),返回一个包含,x,的元素的累乘积的向量,其大小与,x,相同,sort(x,),返回,x,中的元素按升序排序的向量,length(x,),返回数组的长度,(,行数或列数种的较大值,),numel(x,),返回数组元素的个数,一维数组相关函数的应用,以线性拟合为例,n,T(,),R(),1,19.1,76.30,2,25.0,77.80,3,30.1,79.25,4,36.0,80.80,5,40.0,82.35,6,45.1,83.90,7,50.0,85.10,测得铜导线在温度,T,i,下的电阻为,R,i,,编写一个,M,脚本文件,用,matlab,提供的数组函数对数据进行线性拟合,求出斜率、截距和相关系数,并与,origin,的拟合结果进行比较。,x=0:0.2:2*pi;,plot(x,cos(x),k,*-,);,二、一维数组在二维绘图中的应用,1,、,plot,(a,b,string,),a,b,都是一维数组,以,a,中元素为横坐标,,b,中元素为纵坐标作平面曲线。,a,b,必须具有,相同长度,。,string,是用 单引号 括起来的字符串,用来指定图形的属性(点、线的形状和颜色),黑色、实线离散点用星号,属性可以全部指定,也可以只指定其中某几个。,排列顺序任意,2,、线型、标记和颜色,线型,点标记,颜色,-,实线,:,点线,-.,点划线,-,虚线,.,点,o,小圆圈,x,叉号,+,加号,星号,s,方格,d,菱形,v,下三角,上三角,右三角,p,五角星,h,六角星,b,蓝色,g,绿色,r,红色,c,青色,m,棕色,y,黄色,k,黑色,w,白色,3,、用,plot,函数同时绘制多条曲线,plot(,x1,y1,s1,x2,y2,s2,),x1,y1,s1,第一条曲线及其属性,x2,y2,s2,第二条曲线及其属性,属性可以不写,x=,0:pi/10:2*pi,;,y1=,sin(x,),y2=,cos(x,),plot(x,y1,x,y2);,4,、在已存在的图形上添加新图形,可以使用,hold,命令在一个已经存在得图形上添加一个新的图形。,hold on,:在输入新的,plot,函数得时候,,matlab,不会将现存得坐标轴删除,而是将新得曲线添加到当前的坐标轴中。当新的数据超出了当前坐标限的范围,,matlab,就将坐标轴重新刻度。,hold off,:将当前的图形窗口中的图形释放,用以绘制新的图形。,hold,:实现,hold,设置的切换。,ishold,:查询,hold,当前是,on,还是,off,例:使用,hold,绘制多个图形,x=,0:pi/10:2*pi,;,y1=,sin(x,),y2=,cos(x,),plot(x,y1);,hold on;,plot(x,y2);,5,、在一个图形窗口中绘制多个子图,一个图形窗口可以包含多个子图,每个子图拥有自己的坐标轴,subplot(m,n,p,),将一个绘图窗口分割成,mn,个子图,并将第,p,个子图选定为当前的绘图区域。,子图从最上边一行开始,从左至右、从上至下依次编号,例:使用子图,x=,0:pi/10:2*pi,;,y1=,sin(x,),y2=,cos(x,),subplot(2,2,1);,plot(x,y1);,subplot(2,2,2);,plot(x,y2);,被激活的子图在用户输入另一个,subplot,或者,figure,命令之前会一直保持被激活状态。,当一个新的,subplot,命令改变了在图形窗口中的子图数量的时候,原来的那些子图就被擦除掉了,以便给新的子图腾出空间。,为了回到默认的模式并且在整个图形窗口中只用一套坐标轴,可以使用命令,subplot(1,1,1),6,、在多个图形窗口中绘图,激活绘图窗口,figure(n,),关闭图形窗口,close(n,),close all,擦除窗口的内容,clf,:将一个图形窗口的内容擦除而不关闭它。,clf,reset,:将当前的图形窗口擦除,然后将诸如,hold,这样的所有属性重新设置为它们的默认状态。,例:使用多个图形窗口,x=,0:pi/10:2*pi,;,y1=,sin(x,),y2=,cos(x,),figure(1);,plot(x,y1);,figure(2);,plot(x,y2);,为了在一个已有的图形窗口中绘制一个新的图形,这个窗口必须是,激活,的,或者是当前的图形窗口。,上机练习,三、一维数组在向量运算中的应用,1,、向量的模(长度),a=4,3,1,d=,sqrt(sum(a,.*a),或:,d=sqrt(sum(a.2),2,、两点之间的距离,a=4,3,1,b=5,2,3,AB=,sqrt(sum(a,-b).2),3,、向量的方向角与方向余弦,单位向量,a=4,3,1,d=sqrt(sum(a.2),e0=a./d,4,、向量的线性运算,a=4,3,1,b=5,2,3,c=1.6,直接利用,matlab,的数组运算规则即可进行运算,pab,=a+b,sab,=a b,d=c*a,5,、向量的内积(点积,点乘),dot(a,b,),=,sqrt(dot(a,a,),Matlab,中提供了,dot(),函数实现向量的内积,6,、两个向量之间的夹角,tmp,=,dot(a,b)/sqrt(dot(a,a)/sqrt(dot(b,b,),theta=,acos(tmp,),7,、向量的叉积(叉乘),cross(a,b,),=,Matlab,中提供了,cross(),函数实现向量的内积,8,、向量的混合积:,dot(cross(a,b),c,),上机练习:,3.,以,A(1,2,3),,,B(2,0,5),,,C(4,2,-1),为顶点的三角形的面积。,4.,求以,A(0,0,2),,,B(3,0,5),,,C(1,1,0),,,D(4,1,2),为顶点的四面体的体积。,四、一维数组在一元多项式运算中的应用,借助,matlab,提供的函数,处理多项式是一件非常简单的事情,很容易对多项式进行积分、微分以及求根的操作。,一元多项式在代数中占有非常重要的地位。在实际应用中如对实验数据的插值、微商和曲线拟合等,都要大量用到多项式;在矩阵分析时,也要用到一元多项式的概念。多项式函数是形式最简单的函数,也是最容易计算的函数,从理论上讲,它可以表示绝大多数复杂函数。在许多计算机的计算和编程中,很多函数值如,sin(x),cos(x,),等的计算都是先将函数进行,Tailor,展开为多项式进行逼近计算的,并且都能达到很高的精度。,1,、多项式的表示和创建,在,matlab,中,一个一元多项式用一个,行向量,来表示的,向量元素为多项式系数的,降幂,排列,其中最后一个元素代表多项式中的,0,幂项。,p=1,-12,0,25,116,2,、多项式的符号表示,poly2sym(),把系数向量表示的多项式转为符号表示,poly2sym(p),用默认字符,x,来表示多项式的变量,poly2sym(p,v),用字符,v,来表示多项式的便量,p=1,-12,0,25,116,px,=poly2sym(p),pt=poly2sym(p,t),3,、计算多项式的值,p=1,-12,0,25,116;,x1=2.3;,x2=-1,3,7;,y=,polyval(p,x,),p1=polyval(p,x1);,p2=polyval(p,x2);,计算多项式,p,在,x,处的值,,x,可以是标量,向量或矩阵,4,、求多项式的根,r=,roots(p,),此函数返回多项式,p,的根组成的向量,多项式和多项式的根都是用向量表示的,为加以区别,多项式的根表示成,列向量,。,p=1,-12,0,25,116,r=,root(p,),对于系数为实数的多项式,如果其根出现复数,则复数必是成对出现的。,5,、由根创建相应的多项式,r=1;2;-1;3;7,p=,poly(r,),p=,poly(r,),r,是一个向量,构造一个多项式,其根为,r,由于,matlab,在进行数据处理时存在截断误差,因此,,poly,函数的返回值有可能在该出现,0,的位置出现了一个非常接近,0,的数,有时还会使某些系数带有一个很小的虚部。因此建议对,poly,函数的输出结果再进行一次处理,从而消除有可能出现的数据错误。例如,可以通过比较将绝对值极小的数强制置,0,,或利用,real,函数将实部从结果中提取出来,取消错误虚部的影响。,由根构造多项式时,所得到的多项式的第一项为,1,练习,6,、多项式的加法和减法,当两个多项式的阶次不同时,其系数向量的长度也不同,这时需要先将低阶多项式的系数向量前边补上足够的,0,,以便使它和高阶多项式具有相同的长度,然后再执行加法(减法)运算。,Matlab,没有专门的函数执行多项式加法(减法),如果两个多项式的阶次相同,其系数向量的长度相等,多项式的加法就是将两个多项式向量直接相加(相减)。,7,、多项式的乘法,a=1,2,3,4,b=1,4,9,16,c=,conv(a,b,),w=,conv(u,v,),此函数返回多项式,u,和,v,的乘积,多项式的乘法就是多项式系数向量之间的卷积,如果要执行多个多项式之间的乘法运算,需要重复使用,conv,函数,数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,,2003,),P87,8,、多项式的除法,q,r,=,deconv(b,a,),q,:用来存储,b/a,的商多项式,,r,:用来存储,b/a,的余数多项式,余数通常都与除数和被除数中较长的那个向量等长,因此,r,的前面一般有若干个,0,此函数表示多项式,b,除以多项式,a,得到商多项式,q,和余数多项式,r,,如果,r,的元素全部为,0,,则表示多项式,b,可以整除多项式,a,。,多项式的除法就是多项式系数向量之间进行解卷积运算,练习,9,、多项式的微分(求导),polyder,(),多项式微分,k=,polyder(p,),求多项式,p,的微分多项式,k=,polyder(a,b,),求,a x b,的微分,q,d,=,poyder(b,a,),:求有理分式,b/a,的微分,q,:分子多项式,d,:分母多项式,10,、多项式的积分,p=1,6,20,48,69,72,44,h=,polyder(g,),q=polyint(h,44),q=,polyint(p,k,),对多项式,p,积分,,k,为积分常数,q=,polyint(p,),对多项式,p,积分,积分常数为,0,11,、部分分式展开(留数计算),找出两个多项式,b(x,),和,a(x,),之比,b(x)/a(x,),的留数、极点及直项向量。,将部分分式展开的形式还原为两个多项式,b(x,),和,a(x,),相除的形式,r,p,k,=,residue(b,a,),b,a,=,residue(r,p,k,),求函数在指定点处的留数,数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,,2003,),P130,数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,,2003,),P157,数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,,2003,),P160,数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,,2003,),P161,12,、多项式的矩阵运算,p,是多项式的系数向量,相当于用矩阵,X,代替多项式的变量来对矩阵进行计算,,X,必须为方阵。,X=pascal(4),p=1,2,3,polyval(p,X,),polyvalm(p,X,),Y=,polyvalm(p,X,),13,、多项式拟合,p=,polyfit(x,y,n,),多项式曲线拟合(最小二乘法),n=1,就是进行线性拟合,x,y,0,0.2,0.6,1,1.3,1.6,1.7,1.8,1.9,2.2,2.3,2.5,2.6,2.9,0,-2.5,-4,-5.7,-3.5,-2,-1,2,3.5,4,7,7.5,9.9,10.9,x,y,3.1,3.4,3.8,4.1,4.4,4.7,4.8,4.9,5,5.1,5.3,11.9,13.5,13,11.9,9,6.5,4,1.5,0,-2.5,-5,多项式拟合时的注意事项,在进行曲线拟合时对多项式阶次的选择是任意的。,虽然高阶的多项式可以更准确地拟合数据(仅指该曲线与给定的数据之间的均方误差最小),但在进行曲线拟合时,并不需要采用太高阶的多项式,这主要基于以下原因:,1,、越是高阶的多项式其数值特性越差,计算起来也越耗时;,2,、随着多项式阶次的升高,拟合的曲线变的越来越不平滑,通常会出现用户不愿意看到的局部波形;,3,、由于数据本身的近似性,因此在进行数据拟合时没有必要仅仅考虑使拟合的曲线无限接近数据点,而要在曲线的阶次合均方误差之间综合考虑,因为越是高阶的多项式在物理实现时越困难。,从数学原理上,,n+1,个数据点可以惟一定义一个,n,次曲线(或,n,阶多项式)。,
展开阅读全文