拟合与插值北京科技大学数学实验北京科技大学数学实验曲线拟合插值已知平面上若干个点(xi,yi)i=1,…n,求一个较简单的函数(曲线)y=f(x),使f(x)尽可能的靠近数据点,在某种意义下达到最优。f(x)称为拟合函数。+++++++++xyy=f(x)(xi,yi)i------最小二乘法最小nii12曲线拟合p=polyfit(x,y,n)多项式数据拟合功能:将给定向量x,y对应的(x[i],y[i])作为数据点,拟合成n次多项式;向量x,y具有相同的维数;p为多项式的系数向量。多项式的拟合y=a1xn+a2xn-1+……...+anx+an+1p=[a1,a2,...,an,an+1]poly2str(p,‘x’)将多项式表示成习惯的形式p是多项式系数,字符‘x’为自变量polyval(p,X)按数组规则计算X处多项式的值功能:计算多项式p的变量在点阵x处的值;X可以为向量或矩阵,计算结果是与X同维的向量或矩阵。x=1:.1:2;y=[2.1,3.2,2.1,2.5,3.2,3.5,3.4,4.1,4.7,5.0,4.8];p2=polyfit(x,y,2)%多项式拟合,次数是2,p2为拟合多项式的系数p3=polyfit(x,y,3);p7=polyfit(x,y,7);disp(‘二次拟合函数'),f2=poly2str(p2,'x')disp(‘三次拟合函数'),f3=poly2str(p3,'x');disp(‘七次拟合函数'),f7=poly2str(p7,'x');p2=1.3869-1.26082.141二次拟合函数f2=1.3869x^2-1.2608x+2.1417x1=1:.01:2;y2=polyval(p2,x1);%多项式p2在x1处的值y3=polyval(p3,x1);y7=polyval(p7,x1);plot(x,y,'rp',x1,y2,'--',x1,y3,'k-.',x1,y7);811.11.21.31.41.51.61.71.81.9222.533.544.555.5拟合点二次拟合三次拟合七次拟合练习:用多项式拟合余弦函数y=cosx。插值对函数f(x),其函数形式可能很复杂,假如可以获得f(x)在区间[a,b]上的一组n+1个不同的点上的函数值求一个简单函数p(x),使得:012naxxxxb(),0,1,2,,iiyfxin()0,1,2,,iipxyin并且用p(x)近似代替f(x),这就是插值问题。函数p(x)为函数f(x)的插值函数。(1)式称为插值条件。xi为插值结点,点x称为插值点。点x在插值区间内叫内插,否则叫外插。………..(1)p(x)f(x)x0x1x2x0y1y0y2对于被插函数f(x)和插值函数p(x)在节点xi处得函数值必然相等但在节点外p(x)的值可能就会偏离f(x)因此p(x)近似代替f(x)必然存在着误差整体误差的大小反映了插值函数的好坏为了使插值函数方便在计算机上运算,一般插值函数都使用多项式和有理函数。一维多项式插值yi=interp1(x,y,xi,method)功能:x,y是已知数据点;yi是插值点xi处的值;当输入的x是等间距时,可在插值方法method前加*,以提高处理速度。method表示不同的插值方法的字符串,有下面四种插值方法可选:‘nearest’:最近点插值,插值点处的值取与该插值点距离最近的数据点函数值;‘linear’:分段线性插值,用直线连接数据点,插值点的值取对应直线上的值;‘spline’:三次样条函数插值,该方法用三次样条曲线通过数据点,插值点处的值取对应曲线上的值;‘cubic’:分段三次Hermite插值,确定三次Hermite函数,根据该函数确定插值点的函数值。缺省时表示分段线性插值。x=0:6;y=cos(x);xi=0:.25:6;yi1=interp1(x,y,xi,'*nearest');yi2=interp1(x,y,xi,'*linear');yi3=interp1(x,y,xi,'*spline');yi4=interp1(x,y,xi,'*cubic');plot(x,y,'ro',xi,yi1,'--',xi,yi2,'-',xi,yi3,'k.-',xi,yi4,'m:')legend(‘原始数据’,‘最近点插值’,‘线性插值’,’样条插值‘,’立方插值’)例6-19:用以上4种方法对y=cosx在[0,6]上的一维插值效果进行比较。0123456-1-0.8-0.6-0.4-0.200.20.40.60.81原始数据最近点插值线性插值样条插值立方插值二维多项式插值zi=interp2(x,y,z,xi,yi,method)功能:已知数据点(x,y,z),运用method指定的方法,计算插值点(xi,yi)处得函数值zi。method指定的方法同一维多项式插值。[x,y]=meshgrid(-2:.5:2);z=x.*exp(-x.^2-y.^2);[x1,y1]=meshgrid(-2:.1:2);z1=x1.*exp(-x1.^2-y1.^2);figure(1)subplot(1,2,1),mesh(x,y,z),title(‘数据点')subplot(1,2,2),mesh(x1,y1,z1),title(‘函数图象')例6-21:用以上4种方法对在[-2,2]上的二维多项式插值效果进行比较。22()xyzxe[xi,yi]=meshgrid(-2:.125:2);zi1=interp2(x,y,z,xi,yi,'*nearest');zi2=interp2(x,y,z,xi,yi,'*linear');zi3=interp2(x,y,z,xi,yi,'*spline');zi4=interp2(x,y,z,xi,yi,'*cubic');figure(2)subplot(221),mesh(xi,yi,zi1),title(‘最近点插值')subplot(222),mesh(xi,yi,zi2),title(‘线性插值')subplot(223),mesh(xi,yi,zi3),title(‘样条插值')subplot(224),mesh(xi,yi,zi4),title(‘立方插值')定义:对于结点012naxxxxb,若函数s(x)满足1)都在区间[a,b]上连续(),(),()sxsxsx2)在每个小区间()sx1[,]iixx上是三次多项式3),i=0,1,2,…n()iisxy则称s(x)为三次样条插值函数。定义:若不仅已知函数f(x)在结点012naxxxxb上的函数值,还已知一阶导数值yi’.若函数Ih(x)满足1)都在区间[a,b]上连续(),()hhIxIx2)Ih(x)在每个小区间1[,]iixx上是次数不大于3的多项式3)(i=0,1,2,…n)(),()hiihiiIxyIxy则称Ih(x)为分段三次Hermite插值多项式。北京科技大学数学实验下表是1971年到1990年我国总人口的统计数字,试根据1971年到1985年这15年人口的统计数字用多种方法预测未来10年的人口数字,并比较1986年到1990年间预测人口数字与实际统计数字的差异,在你所使用的几种预测方法中找出一种较为合理的预测方法。年份人口统计数字年份人口统计数字19718.5229198110.007219728.7177198210.165419738.9211198310.300819749.0859198410.435719759.2420198510.585119769.3717198610.750719779.4974198710.930019789.6259198811.102619799.7542198911.270419809.8705199011.4333