您好,欢迎访问三七文档
第三部分拟合引言当数据较多时,插值函数比较复杂,同时,给定的数据一般是由观察测量所得,往往带有随机误差,因而,要求曲线(面)通过所有数据点就既不现实也不必要。如果不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,可得到更简单实用的近似函数,这就是数据拟合,又称曲线拟合或曲面拟合。2.拟合的基本原理1.拟合问题引例拟合问题引例1温度t(ºC)20.532.751.073.095.7电阻R()7658268739421032已知热敏电阻数据:求60ºC时的电阻R.2040608010070080090010001100设R=at+ba,b为待定系数拟合问题引例2t(h)0.250.511.523468c(g/ml)19.2118.1515.3614.1012.899.327.455.243.01已知快速静脉注射下的血药浓度数据(t=0注射300mg)求血药浓度随时间的变化规律c(t).作半对数坐标系(semilogy)下的图形0()e,ktctcck为待定系数02468100101102曲线拟合问题的提法已知一组(二维)数据,即平面上n个点(xi,yi)i=1,…,n,寻求一个函数(曲线)y=f(x),使f(x)在某种准则下与所有数据点最为接近,即曲线拟合得最好.+++++++++xyy=f(x)(xi,yi)ii为点(xi,yi)与曲线y=f(x)的距离拟合与插值的关系函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者在数学方法上是完全不同的.实例:下面数据是某次实验所得,希望得到X和f之间的关系?x1247912131517f1.53.96.611.715.618.819.620.621.1MATLAB(cn)问题:给定一批数据点,需确定满足特定要求的曲线或曲面解决方案:•若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,这就是数据拟合,又称曲线拟合或曲面拟合.•若要求所求曲线(面)通过所给所有数据点,就是插值问题;最临近插值、线性插值、样条插值与曲线拟合结果:0246810121416180510152025已已已已已spline已已已已已已已0246810121416180510152025已已已已已linest已已已已已已已0246810121416180510152025已已已已已nearest已已已已已已已曲线拟合问题最常用的解法——线性最小二乘法的基本思路第一步:先选定一组函数r1(x),r2(x),…,rm(x),mn,令f(x)=a1r1(x)+a2r2(x)+…+amrm(x)(1)其中a1,a2,…,am为待定系数.第二步:确定a1,a2,…,am的准则(最小二乘准则):使n个点(xi,yi)与曲线y=f(x)的距离i的平方和最小.记)2(])([])([),,(211211221iiknimkkininiiimyxrayxfaaaJ问题归结为,求a1,a2,…,am使J(a1,a2,…,am)最小.+++++++++xy(xi,yi)iy=f(x)记211211221])([])([),,(iiknimkkininiiimyxrayxfaaaJ问题归结为,求a1,a2,…,am使J(a1,a2,…,am)最小.为求a1,a2,…,am使J(a1,a2,…,am)最小,只需利用极值的必要条件0kaJk=1,2,...,m得到关于a1,a2,…,am的线性方程组0011111mkiikkniimmkiikkniiyxraxryxraxr此时,线性最小二乘拟合可由解方程组RTRa=RTy来求得。其中111121112,,mnnmnmnayrxrxrxRayrxrxrxay定理:当RTR可逆时,方程组存在最小二乘解,且即为方程组RTRa=RTy的解:a=(RTR)-1RTy。在MATLAB中,此解为a=R\y线性最小二乘拟合f(x)=a1r1(x)+…+amrm(x)中函数{r1(x),…,rm(x)}的选取1.通过机理分析,得到y与x的关系来确定r(x);++++++++++++++++++++++++++++++f=a1+a2xf=a1+a2x+a3x2f=a1+a2x+a3x2f=a1+a2/xf=aebxf=ae-bx2.将数据(xi,yi)i=1,…,n作图,通过直观判断确定r(x):特别地,若令mmmmxaxaxaxaaxf112210)(即函数xrxrxrxrm,,),(),(210为一组幂函数则线性最小二乘拟合称为多项式拟合此时,对应的线性最小二乘拟合求解的方程组RTRa=RTy为211102111111121111nnniiiiiinnnnmiiiiiiiiimnnnnmmmmiiiiiiiiinxxyaxxxaxyaxxxxy正规方程组通过解正规方程组便可解出a1,a2,…,am,从而确定拟合多项式函数f(x)多项式拟合的一般方法可归纳为:(1)根据具体问题,确定拟合多项式的次数(2)写出正规方程组(3)解正规方程组,求出ka,k=0,1,2,...,m(4)写出拟合多项式mkkknxax0用MATLAB解拟合问题1.线性最小二乘拟合2.非线性最小二乘拟合用MATLAB作线性最小二乘拟合1.作多项式f(x)=a1xm+…+amx+am+1拟合,可利用已有程序:a=polyfit(x,y,m)2.对超定方程组)(11nmyaRnmmn可得最小二乘意义下的解.,用yRa\3.多项式在x处的值y可用以下命令计算:y=polyval(a,x)输出拟合多项式系数a=[a1,…,am,am+1](数组))输入同长度的数组x,y拟合多项式次数即要求出二次多项式:3221)(axaxaxf中的),,(321aaaA使得:最小])([1112iiiyxf例对下面一组数据作二次多项式拟合xi0.10.20.30.40.50.60.70.80.91.01.1yi-0.4471.9783.286.167.087.347.669.569.489.3011.21)输入以下命令:x=0:0.1:1;y=[-0.4471.9783.286.167.087.347.669.569.489.3011.2];R=[(x.^2)'x'ones(11,1)];A=R\y'2112111111xxRxx此时MATLAB(zxec1)解法1.用解超定方程的方法2)计算结果:A=-9.810820.1293-0.03170317.01293.208108.9)(2xxxf1)输入以下命令:x=0:0.1:1;y=[-0.4471.9783.286.167.087.347.669.569.489.3011.2];A=polyfit(x,y,2)z=polyval(A,x);plot(x,y,'k+',x,z,'r')%作出数据点和拟合曲线的图形2)计算结果:A=-9.810820.1293-0.0317解法2.用多项式拟合的命令MATLAB(zxec2)00.20.40.60.81-20246810120317.01293.208108.9)(2xxxf1.lsqcurvefit已知数据点:xdata=(xdata1,xdata2,…,xdatan),ydata=(ydata1,ydata2,…,ydatan)用MATLAB作非线性最小二乘拟合MATLAB提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin.两个命令都要先建立M文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.21((,))niiiFxxdataydata最小lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得输入格式为:(1)x=lsqcurvefit(‘fun’,x0,xdata,ydata);(2)x=lsqcurvefit(‘fun’,x0,xdata,ydata,options);(3)x=lsqcurvefit(‘fun’,x0,xdata,ydata,options,’grad’);(4)[x,options]=lsqcurvefit(‘fun’,x0,xdata,ydata,…);(5)[x,options,funval]=lsqcurvefit(‘fun’,x0,xdata,ydata,…);(6)[x,options,funval,Jacob]=lsqcurvefit(‘fun’,x0,xdata,ydata,…);fun是一个事先建立的定义函数F(x,xdata)的M文件,自变量为x和xdata说明:x=lsqcurvefit(‘fun’,x0,xdata,ydata,options);迭代初值已知数据点选项见无约束优化lsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x),f2(x),…,fn(x))T中的参量x,使得最小.其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai22221)()()()()(xfxfxfxfxfnT2.lsqnonlin已知数据点:xdata=(xdata1,xdata2,…,xdatan)ydata=(ydata1,ydata2,…,ydatan)输入格式为:1)x=lsqnonlin(‘fun’,x0);2)x=lsqnonlin(‘fun’,x0,options);3)x=lsqnonlin(‘fun’,x0,options‘grad’);4)[x,options]=lsqnonlin(‘fun’,x0,…);5)[x,options,funval]=lsqnonlin(‘fun’x0,…);说明:x=lsqnonlin(‘fun’,x0,options);fun是一个事先建立的定义函数f(x)的M文件,自变量为x迭代初值选项见无约束优化10020030040050060070080090010004.544.995.355.655.906.106.266.396.506.59jt310jc100.0221min(,,)[e]jktjjFabkabc例2用下面一组数据拟合中的参数a,b,k0.02()ektctab该问题即解最优化问题:MATLAB(fzxec1)1)编写M文件curvefun1.mfunctionf=curvefun1(x,tdata)f=x(1)+x(2)*exp(-0.02*x(3)*tdata)%其中x(1)=a;x(2)=b;x(3)=k;2)输入命令tdata=100:100:1000cdata=1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];x0=[0.2,0.05,0.05];x=lsqcurvefit('curvefun1',x0,tdata,cdata)f=curvefun1(x,tdata)F(x,tdata)=,x=(a,b,k)1010.020.02T(e,,e)ktktabab解法1.用命令lsqcurvefit3)运算结果为:f=0.00430.00510.00560.00590.00610.00620.00
本文标题:拟合 插值 概述
链接地址:https://www.777doc.com/doc-3269478 .html