资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,5,讲,MATLAB,数据分析与多项式计算,5.1,数据统计处理,5.2,多项式计算,5.3,插值运算,5.4,多项式拟合,5.1,数据统计处理,5.1.1,最大值和最小值,MATLAB,提供的求数据序列的最大值和最小值的函数分别为,max,和,min,,两个函数的调用格式和操作过程类似。,1,求向量的最大值和最小值,求一个向量,X,的最大值的函数有两种调用格式,分别是:,(1)y=max(X),:返回向量,X,的最大值存入,y,,如果,X,中包含复数元素,则按模取最大值。,(2)y,I=max(X),:返回向量,X,的最大值存入,y,,最大值的序号存入,I,,如果,X,中包含复数元素,则按模取最大值。,求向量,X,的最小值的函数是,min(X),,用法和,max(X),完全相同。,例,5-1,求向量,x,的最大值。,命令如下:,x=-43,72,9,16,23,47;,y=max(x)%,求向量,x,中的最大值,y,l=max(x)%,求向量,x,中的最大值及其该元素的位置,2,求矩阵的最大值和最小值,求矩阵,A,的最大值的函数有,3,种调用格式,分别是:,(1)max(A),:返回一个行向量,向量的第,i,个元素是矩阵,A,的第,i,列上的最大值。,(2)Y,U=max(A),:返回行向量,Y,和,U,,,Y,向量记录,A,的每列的最大值,,U,向量记录每列最大值的行号。,(3)max(A,dim),:,dim,取,1,或,2,。,dim,取,1,时,该函数和,max(A),完全相同;,dim,取,2,时,该函数返回一个列向量,其第,i,个元素是,A,矩阵的第,i,行上的最大值。,求最小值的函数是,min,,其用法和,max,完全相同。,例,5-2,分别求,34,矩阵,x,中各列和各行元素中的最大值,并求整个矩阵的最大值和最小值。,3,两个向量或矩阵对应元素的比较,函数,max,和,min,还能对两个同型的向量或矩阵进行比较,调用格式为:,(1)U=max(A,B),:,A,B,是两个同型的向量或矩阵,结果,U,是与,A,B,同型的向量或矩阵,,U,的每个元素等于,A,B,对应元素的较大者。,(2)U=max(A,n),:,n,是一个标量,结果,U,是与,A,同型的向量或矩阵,,U,的每个元素等于,A,对应元素和,n,中的较大者。,min,函数的用法和,max,完全相同。,例,5-3,求两个,23,矩阵,x,y,所有同一位置上的较大元素构成的新矩阵,p,。,5.1.2,求和与求积,数据序列求和与求积的函数是,sum,和,prod,,其使用方法类似。设,X,是一个向量,,A,是一个矩阵,函数的调用格式为:,sum(X),:返回向量,X,各元素的和。,prod(X),:返回向量,X,各元素的乘积。,sum(A),:返回一个行向量,其第,i,个元素是,A,的第,i,列的元素和。,prod(A),:返回一个行向量,其第,i,个元素是,A,的第,i,列的元素乘积。,sum(A,dim),:当,dim,为,1,时,该函数等同于,sum(A),;当,dim,为,2,时,返回一个列向量,其第,i,个元素是,A,的第,i,行的各元素之和。,prod(A,dim),:当,dim,为,1,时,该函数等同于,prod(A),;当,dim,为,2,时,返回一个列向量,其第,i,个元素是,A,的第,i,行的各元素乘积。,例,5-4,求矩阵,A,的每行元素,每列元素的乘积和全部元素的乘积。,5.1.3,平均值和中值,求数据序列平均值的函数是,mean,,求数据序列中值的函数是,median,。两个函数的调用格式为:,mean(X),:返回向量,X,的算术平均值。,median(X),:返回向量,X,的中值。,mean(A),:返回一个行向量,其第,i,个元素是,A,的第,i,列的算术平均值。,median(A),:返回一个行向量,其第,i,个元素是,A,的第,i,列的中值。,mean(A,dim),:当,dim,为,1,时,该函数等同于,mean(A),;当,dim,为,2,时,返回一个列向量,其第,i,个元素是,A,的第,i,行的算术平均值。,median(A,dim),:当,dim,为,1,时,该函数等同于,median(A),;当,dim,为,2,时,返回一个列向量,其第,i,个元素是,A,的第,i,行的中值。,例,5-5,别求,4,元素向量,x,的平均值和中值。,5.1.4,排序,MATLAB,中对向量,X,是排序函数是,sort(X),,函数返回一个对,X,中的元素按升序排列的新向量。,sort,函数也可以对矩阵,A,的各列或各行重新排序,其调用格式为:,Y,I=sort(A,dim),其中,dim,指明对,A,的列还是行进行排序。若,dim=1,,则按列排;若,dim=2,,则按行排。,Y,是排序后的矩阵,而,I,记录,Y,中的元素在,A,中位置。,一个多项式的幂级数形式可表示为:,同时也可表为嵌套形式,或因子形式,N,阶多项式,n,个根,其中包含重根和复根。若多项式所有系数均为实数,则全部复根都将以共轭对的形式出现,5.2,多项式运算,1,、多项式表示,2,、相关函数,幂系数,:,在,MATLAB,里,多项式用行向量表示,其元素为多项式的系数,并从左至右按降幂排列。,例:被表示为,p=2 1 4 5,poly2sym(p),ans=,2*x3+x2+4*x+5,Roots:,多项式的零点可用命令,roots,求的。,例:,r=roots(p),得到,r=,0.2500+1.5612i,0.2500-1.5612i,-1.0000,所有零点由一个列向量给出。,Poly:,由零点可得原始多项式的各系数,但可能相差一个常数倍。,例:根据上例:,poly(r),ans=,1.0000 0.5000 2.0000 2.5000,注意:若存在重根,这种转换可能会降低精度。,例:,舍入误差的影响,与计算精度有关。,polyval:,可用命令,polyval,计算多项式的值。,例:计算,y(2.5),c=3,-7,2,1,1,;,xi=2.5;yi=polyval(c,xi),yi=,23.8125,如果,xi,是含有多个横坐标值的数组,则,yi,也为与,xi,长度相同的向量。,c=3,-7,2,1,1;xi=2.5,3;,yi=polyval(c,xi),yi=,23.8125 76.0000,5.3,插值运算,1,、,Lagrange,插值,方法介绍,对给定的,n,个插值点 及对应的函数值 ,利用,n,次,Lagrange,插值多项式,则对插值区间内任意,x,的函数值,y,可通过下式求的:,MATLAB,中没有直接实现拉格朗日算法的函数,我们已经介绍过该函数的书写:,function y=lagrange(a,b,x),y=0;,for i=1:length(a),l=1;,for j=1:length(b),if j=i,l=l;,else,l=l.*(x-a(j)/(a(i)-a(j);,end,end,y=y+l*b(i);,end,算例:给出,f(x)=ln(x),的数值表,用,Lagrange,计算,ln(0.54),的近似值。,x=0.4:0.1:0.8,;,y=-0.916291,-0.693147,-0.510826,-0.356675,-0.223144;,lagrange(x,y,0.54),ans=,-0.6161,(精确解,-0.616143),2,、,Runge,现象和分段插值,问题的提出:根据区间,a,b,上给出的节点做插值多项式,p(x),的近似值,一般总认为,p(x),的次数越高则逼近,f(x),的精度就越好,但事实并非如此。,反例:,在区间,-5,5,上的各阶导数存在,但在此区间上取,n,个节点所构成的,Lagrange,插值多项式在全区间内并非都收敛。,取,n=10,用,Lagrange,插值法进行插值计算。,x=-5:1:5;y=1./(1+x.2);x0=-5:0.1:5;,y0=lagrange(x,y,x0);,y1=1./(1+x0.2);,绘制图形,plot(x0,y0,-r),插值曲线,hold on,plot(x0,y1,-b),原曲线,为解决,Rung,问题,引入分段插值。,算法分析:所谓分段插值就是通过插值点用折线或低次曲线连接起来逼近原曲线。,MATLAB,实现 可调用内部函数。,命令,interp1,功能:一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数,f(x),在中间点的数 值。其中函数,f(x),由所给数据决定。,格式:,yi=interp1(x,Y,xi,method)%,用指定的算法计算插值:,nearest,:最近邻点插值,直接完成计算;,linear,:线性插值(缺省方式),直接完成计算;,spline,:三次样条函数插值。,cubic,:分段三次,Hermite,插值。,t=1900:10:1990;,p=75.995 91.972 105.711 123.203 131.669.,150.697 179.323 203.212 226.505 249.633;,对应于美国从,1900,年到,1990,年的每,10,年的人口数,求,1975,年的人口。由此推断美国,1900,年到,2000,年每一年的人口数,并画出图形。,与,1,阶拉格朗日算法比较:,lagrand(1970 1980,203.212 226.505,1975),ans=,214.8585,推广到多个点计算:,t=1900:10:1990;,p=75.995 91.972 105.711 123.203 131.669.,150.697 179.323 203.212 226.505 249.633;,x=1965 1975,x=,1965 1975,y=interp1(t,p,x),y=,191.2675 214.8585,lagrand(1960 1970,179.323 203.212,1965),ans=,191.2675,lagrand(1970 1980,203.212 226.505,1975),ans=,214.8585,例,x0=-1+2*0:10/10;,y0=1./(1+25*x0.2);,x=-1:.01:1;,y=lagrange(x0,y0,x);,%Lagrange,插值,ya=1./(1+25*x.2);,plot(x,ya,x,y,:),y1=interp1(x0,y0,x);,plot(x,ya,x,y1);,用插值的方法对一函数进行近似,要求所得到的插值多项式经过已知插值节点,;,在,n,比较大的情况下,插值多项式往往是高次多项式,这也就容易出现振荡现象(龙格现象),即虽然在插值节点上没有误差,但在插值节点之外插值误差变得很大,从,“,整体,”,上看,插值逼近效果将变得,“,很差,”,。,所谓数据拟合是求一个简单的函数,例如是一个低次多项式,不要求通过已知的这些点,而是要求在整体上“尽量好”的逼近原函数。这时,在每个已知点上就会有误差,数据拟合就是从整体上使误差,尽量的小一些。,5.4,数据最小二乘拟合,多项式最小二乘拟合,n,次多项式:,下面我们练习一个具体例题,某种铝合金的含铝量为,x%,,其溶解温度为,y,摄氏度,由试验测得的,x,与,y,的数据表如下,试用最小二乘算法建立,x,y,的经验公式。,i,x,i,y,i,1,36.9,181,2,46.7,197,3,63.7,235,4,77.8,270,5,84,283,6,87,292,(,1,)根据所给出数据,画出图形,观察数据关系,(,2,)通过图形,我们可以确定该曲线可以通过一次方程,y=ax+b,的形式来进行拟合。可以确定,,n=1,,,L=6,。,(,3,)建立法方程组。,带入具体数据,A=6 396.9;396.9 28365.28;,B=1458;101176.3;,X=inv(A)*B,X=,94.7479,2.2412,则,a=,94.7479,,,b=,2.2414,拟合方程为,y=,94.7479+,2.2414x,画出比较图形:,x=36.9 46.7 63.7 77.8 84 87.5;,y=181 197 235 270 283 292;,plot(x,y,x,y,o),hold on,x1=35:5:90;,y1=2.2412*x1+94.7479;,plot(x1,y1,r),而该拟合公式在,matlab,中有内部函数:多项式拟合,MATLAB,命令:,polyfit,格式:,p=polyfit(x,y,n),其中,,xy,为原始样本点构成的向量,n,为选定的多项式阶数,P,为多项式系数,(降幂排列),则上例采用命令求解:,x=36.9 46.7 63.7 77.8 84 87.5;,y=181 197 235 270 283 292;,a=polyfit(x,y,1),a=,2.2337 95.3524,x0=0:.1:1;,y0=(x0.2-3*x0+5).*exp(-5*x0).*sin(x0);,p3=polyfit(x0,y0,3);%,先进行三次拟合,p3=,2.8400 -4.7898 1.9432 0.0598,多项式如下:,2.8400*x3-4.7898*x2+1.9432*x+0.0598,已知数据点来自 用多项式拟合方法在不同阶次下进行拟合。,拟合该数据的程序,绘制拟合曲线:,x=0:.01:1;,ya=(x.2-3*x+5).*exp(-5*x).*sin(x);%,原函数数据,y1=polyval(p3,x);%,获得新拟合曲线数据,plot(x,y1,x,ya,x0,y0,o),就不同的次数进行拟合:,p4=polyfit(x0,y0,4);y2=polyval(p4,x);,p5=polyfit(x0,y0,5);y3=polyval(p5,x);,p8=polyfit(x0,y0,8);y4=polyval(p8,x);,plot(x,ya,x0,y0,o,x,y2,x,y3,x,y4),
展开阅读全文