教学第8章数据插值与拟合课件_第1页
教学第8章数据插值与拟合课件_第2页
教学第8章数据插值与拟合课件_第3页
教学第8章数据插值与拟合课件_第4页
教学第8章数据插值与拟合课件_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章数据插值与拟合11/26/20221第8章数据插值与拟合11/22/202218.1数据插值一维数据的插值问题二维网格数据的插值问题二维一般分布数据的插值问题高维插值问题11/26/202228.1数据插值一维数据的插值问题11/22/202228.1.1一维数据的插值问题interp1函数spline函数lagrange插值hermite插值11/26/202238.1.1一维数据的插值问题interp1函数11/22/1、interp1函数interp1函数的调用格式:y=interp1(x0,y0,x,method)y=interp1(x0,y0,x,method,'extrap')*临近点插值:method=‘nearest’*线性插值:method=‘linear’*三次样条插值:method=‘spline’*立方插值:method=‘pchip’or‘cubic’11/26/202241、interp1函数interp1函数的调用格式:*临近点1、interp1函数选择插值方法时主要考虑因素:运算时间、占用计算机内存和插值的光滑程度。运算时间占用计算机内存光滑程度临近点插值快少差线性插值稍长较多稍好三次样条插值最长较多最好立方插值较长多较好插值方法比较11/26/202251、interp1函数选择插值方法时主要考虑因素:运算时间、例:已知的数据点来自函数

根据生成的数据进行插值处理,得出较平滑的曲线

直接生成数据。数据点:>>x=0:0.12:1;>>y=(x.^2-3*x+5).*exp(-5*x).*sin(x);>>plot(x,y,x,y,'o')11/26/20226例:已知的数据点来自函数

根据生成的数据进行插值处理,得调用interp1()函数:>>x0=0:0.02:1;y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);>>y1=interp1(x,y,x0);y2=interp1(x,y,x0,'cubic');>>y3=interp1(x,y,x0,'spline');y4=interp1(x,y,x0,'nearest');>>plot(x0,[y1',y2',y3',y4'],':',x,y,'o',x0,y0)误差分析>>[max(abs(y0(1:49)-y2(1:49))),max(abs(y0-y3)),max(abs(y0-y4))]ans=0.01770.00860.15981、interp1函数11/26/20227调用interp1()函数:1、interp1函数11/2功能三次样条数据插值格式

yy=spline(x,y,xx)

例:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算:>>x=[024581212.817.219.920];>>y=exp(x).*sin(x);>>xx=0:.25:20;>>yy=spline(x,y,xx);>>plot(x,y,'o',xx,yy)2、spline函数11/26/20228功能三次样条数据插值2、spline函数11/22/203、lagrange插值方法介绍对给定的n个插值点及对应的函数值,利用构造的n-1次lagrange插值多项式,则对插值区间内任意x的函数值y可通过下式求的:11/26/202293、lagrange插值方法介绍11/22/20229lagrange插值函数functiony=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x));fori=iiij=find(ii~=i);y1=1;forj=1:length(ij),y1=y1.*(x-x0(ij(j)));endy=y+y1*y0(i)/prod(x0(i)-x0(ij));end11/26/202210lagrange插值函数functiony=lagrangLagrange插值>>x0=-1+2*[0:10]/10;y0=1./(1+25*x0.^2);>>x=-1:0.01:1;y=lagrange(x0,y0,x);>>ya=1./(1+25*x.^2);>>plot(x,ya,x,y,':')调用interp1函数>>y1=interp1(x0,y0,x,'cubic');y2=interp1(x0,y0,x,'spline');>>plot(x,ya,x,y1,':',x,y2,'--')3、lagrange插值例:对进行Lagrange插值11/26/202211Lagrange插值3、lagrange插值例:对许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等。这类插值称作切触插值,或埃尔米特(Hermite)插值。满足这种要求的插值多项式就是埃尔米特插值多项式4、埃尔米特插值(hermite插值)11/26/202212许多实际插值问题中,为使插值函数能更好地和原4、埃尔米特插值(hermite插值)方法介绍已知n个插值点及对应的函数值和一阶导数值。则对插值区间内任意x的函数值y的Hermite插值公式:11/26/2022134、埃尔米特插值(hermite插值)方法介绍11/22/2hermite插值函数functiony=hermite(x0,y0,y1,x)n=length(x0);m=length(x);fork=1:myy=0.0;fori=1:nh=1.0;a=0.0;forj=1:nifj~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;a=1/(x0(i)-x0(j))+a;endendyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));endy(k)=yy;end11/26/202214hermite插值函数functiony=hermite(例:利用Hermite插值法求sin0.34的近似值。>>x0=[0.3,0.32,0.35];y0=[0.29552,0.31457,0.34290];>>y1=[0.95534,0.94924,0.93937];>>y=hermite(x0,y0,y1,0.34)y=0.3335>>sin(0.34)%与精确值比较ans=0.33354、hermite插值11/26/202215例:利用Hermite插值法求sin0.34的近似值。4、h8.1.2二维网格数据的插值问题二维插值函数interp2的调用格式:zi=interp2(x0,y0,z0,xi,yi)zi=interp2(x0,y0,z0,xi,yi,method)*临近点插值:method=‘nearest’*线性插值:method=‘linear’(缺省算法)*三次样条插值:method=‘spline’*立方插值:method=‘pchip’or‘cubic’11/26/2022168.1.2二维网格数据的插值问题二维插值函数interp2例由二元函数获得一些较稀疏的网格数据,对整个函数曲面进行各种插值,并比较插值结果绘制已知数据的网格图>>[x,y]=meshgrid(-3:0.6:3,-2:0.4:2);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>surf(x,y,z);axis([-3,3,-2,2,-0.7,1.5])8.1.2二维网格数据的插值问题11/26/202217例由二元函数8.1.2二维网格数据的插值问题11/22/默认线性插值算法进行插值>>[x1,y1]=meshgrid(-3:.2:3,-2:.2:2);>>z1=interp2(x,y,z,x1,y1);>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])立方和样条插值:>>z1=interp2(x,y,z,x1,y1,'cubic');>>z2=interp2(x,y,z,x1,y1,'spline');>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])>>figure;surf(x1,y1,z2),axis([-3,3,-2,2,-0.7,1.5])11/26/202218默认线性插值算法进行插值11/22/202218算法误差的比较>>z=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z-z1)),axis([-3,3,-2,2,0,0.08])>>figure;surf(x1,y1,abs(z-z2)),axis([-3,3,-2,2,0,0.025])11/26/202219算法误差的比较11/22/2022198.1.3二维一般分布数据的插值问题griddata函数的调用格式:z=griddata(x0,y0,z0,x,y,method)method=‘v4’:插值算法,公认效果较好*临近点插值:method=‘nearest’*线性插值:method=‘linear’(缺省算法)*三次样条插值:method=‘spline’*立方插值:method=‘cubic’11/26/2022208.1.3二维一般分布数据的插值问题griddata函数的例在x为[-3,3],y为[-2,2]矩形区域随机选择一组数据点,用’v4’与’cubic’插值法进行处理,并对误差进行比较。已知数据点>>x=-3+6*rand(200,1);y=-2+4*rand(200,1);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>plot(x,y,'x')%样本点的二维分布>>figure,plot3(x,y,z,'x'),axis([-3,3,-2,2,-0.7,1.5]),grid11/26/202221例cubic和v4算法>>[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);>>z1=griddata(x,y,z,x1,y1,'cubic');>>surf(x1,y1,z1);axis([-3,3,-2,2,-0.7,1.5])>>z2=griddata(x,y,z,x1,y1,'v4');>>figure;surf(x1,y1,z2);axis([-3,3,-2,2,-0.7,1.5])误差分析>>z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z0-z1)),axis([-3,3,-2,2,0,0.15])>>figure;surf(x1,y1,abs(z0-z2));axis([-3,3,-2,2,0,0.15])11/26/202222cubic和v4算法11/22/2022228.1.4高维插值问题三维插值interp3函数的调用格式:三维网格[x,y,z]=meshgrid(x1,y1,z1)griddata3()三维非网格数据插值n维插值interpn函数n维网格[x1,x2,…,xn]=ndgrid[v1,v2,…,vn]griddatan()n维非网格数据插值interp3()、interpn()调用格式同interp2()一致griddata3()、griddatan()调用格式同griddata()一致11/26/2022238.1.4高维插值问题三维插值interp3函数的调用格式例:通过函数生成一些网格型样本点,据此进行插值并给出插值误差。>>[x,y,z]=meshgrid(-1:0.2:1);[x0,y0,z0]=meshgrid(-1:0.05:1);V=exp(x.^2.*z+y.^2.*x+z.^2.*y).*cos(x.^2.*y.*z+z.^2.*y.*x);V0=exp(x0.^2.*z0+y0.^2.*x0+z0.^2.*y0).*cos(x0.^2.*y0.*z0+z0.^2.*y0.*x0);>>V1=interp3(x,y,z,V,x0,y0,z0,'spline');err=V1-V0;max(err(:))ans=0.041911/26/202224例:8.2数据拟合多项式拟合函数线性组合的曲线拟合方法最小二乘曲线拟合11/26/2022258.2数据拟合多项式拟合11/22/202225多项式标准形式:多项式拟合函数polyfit,其调用格式p=polyfit(x,y,n)其中x和y为原始样本点构成的向量n为多项式的阶次p为多项式系数按降幂排列得到的向量8.2.1多项式拟合11/26/202226多项式标准形式:8.2.1多项式拟合11/22/20222三次多项式拟合>>x0=0:.1:1;y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);>>p3=polyfit(x0,y0,3);vpa(poly2sym(p3),10)ans=2.839962923*x^3-4.789842696*x^2+1.943211631*x例:已知的数据点来自函数

用多项式拟合的方法在不同阶次下进行拟合11/26/202227三次多项式拟合例:已知的数据点来自函数

用多项式拟合的方绘制拟合曲线:>>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')11/26/202228绘制拟合曲线:11/22/202228不同次数进行拟合:>>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)11/26/202229不同次数进行拟合:11/22/202229拟合次数为8的多项式:>>vpa(poly2sym(p8),5)ans=-8.2586*x^8+43.566*x^7-101.98*x^6+140.22*x^5-125.29*x^4+74.450*x^3-27.672*x^2+4.9869*x+.42037e-6Taylor幂级数展开:>>symsx;y=(x^2-3*x+5)*exp(-5*x)*sin(x);>>vpa(taylor(y,9),5)ans=5.*x-28.*x^2+77.667*x^3-142.*x^4+192.17*x^5-204.96*x^6+179.13*x^7-131.67*x^8多项式表示数据模型是不唯一的,即是两个多项式函数完全不同。在某一区域内其曲线可能特别近似。11/26/202230拟合次数为8的多项式:11/22/202230编制程序>>x0=-1+2*[0:10]/10;y0=1./(1+25*x0.^2);>>x=-1:.01:1;ya=1./(1+25*x.^2);>>p3=polyfit(x0,y0,3);y1=polyval(p3,x);>>p5=polyfit(x0,y0,5);y2=polyval(p5,x);>>p8=polyfit(x0,y0,8);y3=polyval(p8,x);>>p10=polyfit(x0,y0,10);y4=polyval(p10,x);>>plot(x,ya,x,y1,x,y2,'-.',x,y3,'--',x,y4,':')例:对多项式拟合,多项式拟合的效果并不一定总是很精确的。11/26/202231编制程序例:对用Taylor幂级数展开效果将更差。>>symsx;y=1/(1+25*x^2);p=taylor(y,x,10)p=1-25*x^2+625*x^4-15625*x^6+390625*x^8多项式拟合效果>>x1=-1:0.01:1;ya=1./(1+25*x1.^2);>>y1=subs(p,x,x1);>>plot(x1,ya,'--‘,x1,y1)11/26/202232用Taylor幂级数展开效果将更差。11/22/2022328.2.2函数线性组合的曲线拟合方法已知某函数的线性组合为:g(x)=c1f1(x)+c2f2(x)+…+cnfn(x)其中f1(x),f2(x),…,cnfn(x)为已知函数,c1,c2,…,cn为待定系数假设已经测出数据(x1,y1),(x2,y2),…,(xm,ym),则可建立如下的线性方程:Ac=y11/26/2022338.2.2函数线性组合的曲线拟合方法已知某函数的线性组合为11/26/20223411/22/202234例假设测出一组实验数据(xi,yi),其函数原型为y(x)=c1+c2e-3x+c3cos(-2x)e-4x+c4x2,用已知数据求出待定系数ci的值x00.20.40.70.90.92y2.882.25761.96831.92582.08622.109x0.991.21.41.481.5y2.19792.54092.96273.1553.205211/26/202235例假设测出一组实验数据(xi,yi),其函数原型为y(x拟合ci参数>>x=[0,0.2,0.4,0.7,0.9,0.92,0.99,1.2,1.4,1.48,1.5]';>>y=[2.88;2.2576;1.9683;1.9258;2.0862;2.109;2.1979;2.5409;2.9627;3.155;3.2052];>>A=[ones(size(x)),exp(-3*x),cos(-2*x).*exp(-4*x),x.^2];>>c=A\y;c1=c'c1=1.22002.3397-0.67970.870011/26/202236拟合ci参数11/22/202236图形显示>>x0=[0:0.01:1.5]';>>A1=[ones(size(x0)),exp(-3*x0),cos(-2*x0).*exp(-4*x0)x0.^2];>>y1=A1*c;>>plot(x0,y1,x,y,'x')11/26/202237图形显示11/22/202237例对下列实验数据进行函数拟合已知数据点>>x=[1.1052,1.2214,1.3499,1.4918,1.6487,1.8221,2.0138,2.2255,2.4596,2.7183,3.6693];>>y=[0.6795,0.6006,0.5309,0.4693,0.4148,0.3666,0.3241,0.2864,0.2532,0.2238,0.1546];>>plot(x,y,x,y,'*')x1.10521.22141.34991.49181.64871.8221y0.67950.60060.53090.46930.41480.3666x2.01382.22552.45962.71833.6693y0.324140.28650.25320.22380.154611/26/202238例对下列实验数据进行函数拟合x1.10521.22141对x,y进行对数变换:>>x1=log(x);y1=log(y);plot(x1,y1)线性函数拟合法>>A=[x1',ones(size(x1'))];c=[A\y1']‘c=-1.2339-0.2630>>exp(c(2))ans=0.768711/26/202239对x,y进行对数变换:11/22/202239例对f(x)=(x2-3x+5)e-5xsinx进行多项式拟合,可以选择各个函数为fi(x)=xn+1-i,i=1,2,…,n,并观察多项式拟合的结果编制程序:x=[0:0.1:1]';y=(x.^2-3*x+5).*exp(-5*x).*sin(x);n=8;A=[];fori=1:n+1,A(:,i)=x.^(n+1-i);endc=A\y;vpa(poly2sym(c),5)ans=-8.2586*x^8+43.566*x^7-101.98*x^6+140.22*x^5-125.29*x^4+74.450*x^3-27.672*x^2+4.9869*x+.42037e-611/26/202240例对f(x)=(x2-3x+5)e-5xsinx进行多项式8.2.3最小二乘曲线拟合有一组数据xi,yi(i=1,2,…,N)满足某一函数原型,其中a为待定系数向量,求出一组待定系数的值使得目标函数最小:11/26/2022418.2.3最小二乘曲线拟合有一组数据xi,yi(i=1,最小二乘曲线拟合函数lsqcurvefit的调用格式:[a,Jm]=lsqcurvefit(Fun,a0,x,y)Fun为原型函数的matlab表示,可以是M-函数或inline()函数a0为最优化初值x和y为原始输入输出数据向量a为返回的待定系数向量Jm为在待定系数下目标函数的值11/26/202242最小二乘曲线拟合函数lsqcurvefit的调用格式:11/例由下面语句生成一组数据,其中ai为待定系数a=0:0.1:10;y=0.12*exp(-0.213*x)+0.54exp(-0.17*x).*sin(1.23*x);并且该数据满足采用最小二乘曲线拟合获得这些待定系数,使目标函数的值为最小。编写函数:f=inline(‘a1*exp(-a2*x)+a3exp(-a4*x).*sin(a5*x)’,’a’,’x’);11/26/202243例由下面语句生成一组数据,其中ai为待定系数11/22/求解待定系数向量[xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y);xx',resans=0.11970.21250.54040.17021.2300res=7.1637e-00711/26/202244求解待定系数向量11/22/202244修改最优化选项:ff=optimset;ff.TolFun=1e-20;ff.TolX=1e-15;[xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y,[],[],ff);xx,resans=0.12000.21300.54000.17001.2300res=9.5035e-02111/26/202245修改最优化选项:11/22/202245绘制曲线:>>x1=0:0.01:10;y1=f(xx,x1);plot(x1,y1,x,y,'o')11/26/202246绘制曲线:11/22/202246例已知数据可能满足求满足数据的最小二乘解a、b、c和d的值输入已知数据点:x=0.1:0.1:1;y=[2.3201,2.6470,2.9707,3.2885,3.6008,3.9090,4.2147,4.5191,4.8232,5.1275];x0.10.20.30.40.5y2.32012.64702.97073.28853.6008x0.60.70.80.91.0y3.90904.21474.51914.82325.127511/26/202247例已知数据可能满足x0.10.20.30.40.5y2.编写函数functiony=c8f3(a,x)y=a(1)*x+a(2)*x.^2.*exp(-a(3)*x)+a(4);待定系数求解a=lsqcurvefit('c8f3',[1;2;2;3],x,y);a'ans=2.45752.45571.44372.072011/26/202248编写函数11/22/202248绘制曲线:>>y1=c8f3(a,x);plot(x,y,x,y1,’o’)11/26/202249绘制曲线:11/22/202249第8章数据插值与拟合11/26/202250第8章数据插值与拟合11/22/202218.1数据插值一维数据的插值问题二维网格数据的插值问题二维一般分布数据的插值问题高维插值问题11/26/2022518.1数据插值一维数据的插值问题11/22/202228.1.1一维数据的插值问题interp1函数spline函数lagrange插值hermite插值11/26/2022528.1.1一维数据的插值问题interp1函数11/22/1、interp1函数interp1函数的调用格式:y=interp1(x0,y0,x,method)y=interp1(x0,y0,x,method,'extrap')*临近点插值:method=‘nearest’*线性插值:method=‘linear’*三次样条插值:method=‘spline’*立方插值:method=‘pchip’or‘cubic’11/26/2022531、interp1函数interp1函数的调用格式:*临近点1、interp1函数选择插值方法时主要考虑因素:运算时间、占用计算机内存和插值的光滑程度。运算时间占用计算机内存光滑程度临近点插值快少差线性插值稍长较多稍好三次样条插值最长较多最好立方插值较长多较好插值方法比较11/26/2022541、interp1函数选择插值方法时主要考虑因素:运算时间、例:已知的数据点来自函数

根据生成的数据进行插值处理,得出较平滑的曲线

直接生成数据。数据点:>>x=0:0.12:1;>>y=(x.^2-3*x+5).*exp(-5*x).*sin(x);>>plot(x,y,x,y,'o')11/26/202255例:已知的数据点来自函数

根据生成的数据进行插值处理,得调用interp1()函数:>>x0=0:0.02:1;y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);>>y1=interp1(x,y,x0);y2=interp1(x,y,x0,'cubic');>>y3=interp1(x,y,x0,'spline');y4=interp1(x,y,x0,'nearest');>>plot(x0,[y1',y2',y3',y4'],':',x,y,'o',x0,y0)误差分析>>[max(abs(y0(1:49)-y2(1:49))),max(abs(y0-y3)),max(abs(y0-y4))]ans=0.01770.00860.15981、interp1函数11/26/202256调用interp1()函数:1、interp1函数11/2功能三次样条数据插值格式

yy=spline(x,y,xx)

例:对离散分布在y=exp(x)sin(x)函数曲线上的数据点进行样条插值计算:>>x=[024581212.817.219.920];>>y=exp(x).*sin(x);>>xx=0:.25:20;>>yy=spline(x,y,xx);>>plot(x,y,'o',xx,yy)2、spline函数11/26/202257功能三次样条数据插值2、spline函数11/22/203、lagrange插值方法介绍对给定的n个插值点及对应的函数值,利用构造的n-1次lagrange插值多项式,则对插值区间内任意x的函数值y可通过下式求的:11/26/2022583、lagrange插值方法介绍11/22/20229lagrange插值函数functiony=lagrange(x0,y0,x)ii=1:length(x0);y=zeros(size(x));fori=iiij=find(ii~=i);y1=1;forj=1:length(ij),y1=y1.*(x-x0(ij(j)));endy=y+y1*y0(i)/prod(x0(i)-x0(ij));end11/26/202259lagrange插值函数functiony=lagrangLagrange插值>>x0=-1+2*[0:10]/10;y0=1./(1+25*x0.^2);>>x=-1:0.01:1;y=lagrange(x0,y0,x);>>ya=1./(1+25*x.^2);>>plot(x,ya,x,y,':')调用interp1函数>>y1=interp1(x0,y0,x,'cubic');y2=interp1(x0,y0,x,'spline');>>plot(x,ya,x,y1,':',x,y2,'--')3、lagrange插值例:对进行Lagrange插值11/26/202260Lagrange插值3、lagrange插值例:对许多实际插值问题中,为使插值函数能更好地和原来的函数重合,不但要求二者在节点上函数值相等,而且还要求相切,对应的导数值也相等,甚至要求高阶导数也相等。这类插值称作切触插值,或埃尔米特(Hermite)插值。满足这种要求的插值多项式就是埃尔米特插值多项式4、埃尔米特插值(hermite插值)11/26/202261许多实际插值问题中,为使插值函数能更好地和原4、埃尔米特插值(hermite插值)方法介绍已知n个插值点及对应的函数值和一阶导数值。则对插值区间内任意x的函数值y的Hermite插值公式:11/26/2022624、埃尔米特插值(hermite插值)方法介绍11/22/2hermite插值函数functiony=hermite(x0,y0,y1,x)n=length(x0);m=length(x);fork=1:myy=0.0;fori=1:nh=1.0;a=0.0;forj=1:nifj~=ih=h*((x(k)-x0(j))/(x0(i)-x0(j)))^2;a=1/(x0(i)-x0(j))+a;endendyy=yy+h*((x0(i)-x(k))*(2*a*y0(i)-y1(i))+y0(i));endy(k)=yy;end11/26/202263hermite插值函数functiony=hermite(例:利用Hermite插值法求sin0.34的近似值。>>x0=[0.3,0.32,0.35];y0=[0.29552,0.31457,0.34290];>>y1=[0.95534,0.94924,0.93937];>>y=hermite(x0,y0,y1,0.34)y=0.3335>>sin(0.34)%与精确值比较ans=0.33354、hermite插值11/26/202264例:利用Hermite插值法求sin0.34的近似值。4、h8.1.2二维网格数据的插值问题二维插值函数interp2的调用格式:zi=interp2(x0,y0,z0,xi,yi)zi=interp2(x0,y0,z0,xi,yi,method)*临近点插值:method=‘nearest’*线性插值:method=‘linear’(缺省算法)*三次样条插值:method=‘spline’*立方插值:method=‘pchip’or‘cubic’11/26/2022658.1.2二维网格数据的插值问题二维插值函数interp2例由二元函数获得一些较稀疏的网格数据,对整个函数曲面进行各种插值,并比较插值结果绘制已知数据的网格图>>[x,y]=meshgrid(-3:0.6:3,-2:0.4:2);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>surf(x,y,z);axis([-3,3,-2,2,-0.7,1.5])8.1.2二维网格数据的插值问题11/26/202266例由二元函数8.1.2二维网格数据的插值问题11/22/默认线性插值算法进行插值>>[x1,y1]=meshgrid(-3:.2:3,-2:.2:2);>>z1=interp2(x,y,z,x1,y1);>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])立方和样条插值:>>z1=interp2(x,y,z,x1,y1,'cubic');>>z2=interp2(x,y,z,x1,y1,'spline');>>surf(x1,y1,z1),axis([-3,3,-2,2,-0.7,1.5])>>figure;surf(x1,y1,z2),axis([-3,3,-2,2,-0.7,1.5])11/26/202267默认线性插值算法进行插值11/22/202218算法误差的比较>>z=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z-z1)),axis([-3,3,-2,2,0,0.08])>>figure;surf(x1,y1,abs(z-z2)),axis([-3,3,-2,2,0,0.025])11/26/202268算法误差的比较11/22/2022198.1.3二维一般分布数据的插值问题griddata函数的调用格式:z=griddata(x0,y0,z0,x,y,method)method=‘v4’:插值算法,公认效果较好*临近点插值:method=‘nearest’*线性插值:method=‘linear’(缺省算法)*三次样条插值:method=‘spline’*立方插值:method=‘cubic’11/26/2022698.1.3二维一般分布数据的插值问题griddata函数的例在x为[-3,3],y为[-2,2]矩形区域随机选择一组数据点,用’v4’与’cubic’插值法进行处理,并对误差进行比较。已知数据点>>x=-3+6*rand(200,1);y=-2+4*rand(200,1);>>z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);>>plot(x,y,'x')%样本点的二维分布>>figure,plot3(x,y,z,'x'),axis([-3,3,-2,2,-0.7,1.5]),grid11/26/202270例cubic和v4算法>>[x1,y1]=meshgrid(-3:0.2:3,-2:0.2:2);>>z1=griddata(x,y,z,x1,y1,'cubic');>>surf(x1,y1,z1);axis([-3,3,-2,2,-0.7,1.5])>>z2=griddata(x,y,z,x1,y1,'v4');>>figure;surf(x1,y1,z2);axis([-3,3,-2,2,-0.7,1.5])误差分析>>z0=(x1.^2-2*x1).*exp(-x1.^2-y1.^2-x1.*y1);>>surf(x1,y1,abs(z0-z1)),axis([-3,3,-2,2,0,0.15])>>figure;surf(x1,y1,abs(z0-z2));axis([-3,3,-2,2,0,0.15])11/26/202271cubic和v4算法11/22/2022228.1.4高维插值问题三维插值interp3函数的调用格式:三维网格[x,y,z]=meshgrid(x1,y1,z1)griddata3()三维非网格数据插值n维插值interpn函数n维网格[x1,x2,…,xn]=ndgrid[v1,v2,…,vn]griddatan()n维非网格数据插值interp3()、interpn()调用格式同interp2()一致griddata3()、griddatan()调用格式同griddata()一致11/26/2022728.1.4高维插值问题三维插值interp3函数的调用格式例:通过函数生成一些网格型样本点,据此进行插值并给出插值误差。>>[x,y,z]=meshgrid(-1:0.2:1);[x0,y0,z0]=meshgrid(-1:0.05:1);V=exp(x.^2.*z+y.^2.*x+z.^2.*y).*cos(x.^2.*y.*z+z.^2.*y.*x);V0=exp(x0.^2.*z0+y0.^2.*x0+z0.^2.*y0).*cos(x0.^2.*y0.*z0+z0.^2.*y0.*x0);>>V1=interp3(x,y,z,V,x0,y0,z0,'spline');err=V1-V0;max(err(:))ans=0.041911/26/202273例:8.2数据拟合多项式拟合函数线性组合的曲线拟合方法最小二乘曲线拟合11/26/2022748.2数据拟合多项式拟合11/22/202225多项式标准形式:多项式拟合函数polyfit,其调用格式p=polyfit(x,y,n)其中x和y为原始样本点构成的向量n为多项式的阶次p为多项式系数按降幂排列得到的向量8.2.1多项式拟合11/26/202275多项式标准形式:8.2.1多项式拟合11/22/20222三次多项式拟合>>x0=0:.1:1;y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0);>>p3=polyfit(x0,y0,3);vpa(poly2sym(p3),10)ans=2.839962923*x^3-4.789842696*x^2+1.943211631*x例:已知的数据点来自函数

用多项式拟合的方法在不同阶次下进行拟合11/26/202276三次多项式拟合例:已知的数据点来自函数

用多项式拟合的方绘制拟合曲线:>>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')11/26/202277绘制拟合曲线:11/22/202228不同次数进行拟合:>>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)11/26/202278不同次数进行拟合:11/22/202229拟合次数为8的多项式:>>vpa(poly2sym(p8),5)ans=-8.2586*x^8+43.566*x^7-101.98*x^6+140.22*x^5-125.29*x^4+74.450*x^3-27.672*x^2+4.9869*x+.42037e-6Taylor幂级数展开:>>symsx;y=(x^2-3*x+5)*exp(-5*x)*sin(x);>>vpa(taylor(y,9),5)ans=5.*x-28.*x^2+77.667*x^3-142.*x^4+192.17*x^5-204.96*x^6+179.13*x^7-131.67*x^8多项式表示数据模型是不唯一的,即是两个多项式函数完全不同。在某一区域内其曲线可能特别近似。11/26/202279拟合次数为8的多项式:11/22/202230编制程序>>x0=-1+2*[0:10]/10;y0=1./(1+25*x0.^2);>>x=-1:.01:1;ya=1./(1+25*x.^2);>>p3=polyfit(x0,y0,3);y1=polyval(p3,x);>>p5=polyfit(x0,y0,5);y2=polyval(p5,x);>>p8=polyfit(x0,y0,8);y3=polyval(p8,x);>>p10=polyfit(x0,y0,10);y4=polyval(p10,x);>>plot(x,ya,x,y1,x,y2,'-.',x,y3,'--',x,y4,':')例:对多项式拟合,多项式拟合的效果并不一定总是很精确的。11/26/202280编制程序例:对用Taylor幂级数展开效果将更差。>>symsx;y=1/(1+25*x^2);p=taylor(y,x,10)p=1-25*x^2+625*x^4-15625*x^6+390625*x^8多项式拟合效果>>x1=-1:0.01:1;ya=1./(1+25*x1.^2);>>y1=subs(p,x,x1);>>plot(x1,ya,'--‘,x1,y1)11/26/202281用Taylor幂级数展开效果将更差。11/22/2022328.2.2函数线性组合的曲线拟合方法已知某函数的线性组合为:g(x)=c1f1(x)+c2f2(x)+…+cnfn(x)其中f1(x),f2(x),…,cnfn(x)为已知函数,c1,c2,…,cn为待定系数假设已经测出数据(x1,y1),(x2,y2),…,(xm,ym),则可建立如下的线性方程:Ac=y11/26/2022828.2.2函数线性组合的曲线拟合方法已知某函数的线性组合为11/26/20228311/22/202234例假设测出一组实验数据(xi,yi),其函数原型为y(x)=c1+c2e-3x+c3cos(-2x)e-4x+c4x2,用已知数据求出待定系数ci的值x00.20.40.70.90.92y2.882.25761.96831.92582.08622.109x0.991.21.41.481.5y2.19792.54092.96273.1553.205211/26/202284例假设测出一组实验数据(xi,yi),其函数原型为y(x拟合ci参数>>x=[0,0.2,0.4,0.7,0.9,0.92,0.99,1.2,1.4,1.48,1.5]';>>y=[2.88;2.2576;1.9683;1.9258;2.0862;2.109;2.1979;2.5409;2.9627;3.155;3.2052];>>A=[ones(size(x)),exp(-3*x),cos(-2*x).*exp(-4*x),x.^2];>>c=A\y;c1=c'c1=1.22002.3397-0.67970.870011/26/202285拟合ci参数11/22/202236图形显示>>x0=[0:0.01:1.5]';>>A1=[ones(size(x0)),exp(-3*x0),cos(-2*x0).*exp(-4*x0)x0.^2];>>y1=A1*c;>>plot(x0,y1,x,y,'x')11/26/202286图形显示11/22/202237例对下列实验数据进行函数拟合已知数据点>>x=[1.1052,1.2214,1.3499,1.4918,1.6487,1.8221,2.0138,2.2255,2.4596,2.7183,3.6693];>>y=[0.6795,0.6006,0.5309,0.4693,0.4148,0.3666,0.3241,0.2864,0.2532,0.2238,0.1546];>>plot(x,y,x,y,'*')x1.10521.22141.34991.49181.64871.8221y0.67950.60060.53090.46930.41480.3666x2.01382.22552.45962.71833.6693y0.324140.28650.25320.22380.154611/26/20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论