1、2011数学建模集训班-拟合与插值专题,阴小波 2011/8/10,第一讲,在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。 一种是插值法,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。 另一种方法是曲线拟合或回归。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。,本专题的主要目的是:了解插值和拟合的基本内容;掌握用Matlab求解插值与拟合问题的基本命令。,内容提纲,1.拟合问题引例及基本理论 2.Matlab求解拟合问题 3.应用实例 4.插值问题引例及基本理论 5.Maltab求解插值问题 6.应用实例
2、,拟合问题,拟 合 问 题 引 例 1,温度t(0C) 20.5 32.7 51.0 73.0 95.7 电阻R() 765 826 873 942 1032,已知热敏电阻数据:,求600C时的电阻R。,设 R=at+b a,b为待定系数,拟 合 问 题 引 例 2,求血药浓度随时间的变化规律c(t).,作半对数坐标系(semilogy)下的图形,曲 线 拟 合 问 题 的 提 法,已知一组(二维)数据,即平面上 n个点(xi,yi) i=1,n, 寻求一个函数(曲线)y=f(x), 使 f(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。,y=f(x),i 为点(xi,yi) 与曲
3、线 y=f(x) 的距离,拟合与插值的关系,说明: 函数插值与曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不同,二者的数学方法上完全不同。,实例:下面数据是某次实验所得,希望得到x和 f之间的关系?,问题:给定一批数据点,需确定满足特定要求的曲线或曲面,解决方案:,若不要求曲线(面)通过所有数据点,而是要求它反映对象整体的变化趋势,就是数据拟合,又称曲线拟合或曲面拟合。,若要求所求曲线(面)通过所给所有数据点,就是插值问题;,最临近插值、线性插值、样条插值与曲线拟合结果:,曲线拟合问题最常用的解法线性最小二乘法的基本思路,第一步:先选定一组函数 r1(x), r2(x), r
4、m(x), mn, 令f(x)=a1r1(x)+a2r2(x)+ +amrm(x) (1) 其中 a1,a2, am 为待定系数。,第二步: 确定a1,a2, am 的准则(最小二乘准则): 使n个点(xi,yi) 与曲线 y=f(x) 的距离i 的平方和最小 。,记,问题归结为,求 a1,a2, am 使 J(a1,a2, am) 最小。,线性最小二乘法的求解:预备知识,超定方程组:方程个数大于未知量个数的方程组,超定方程一般是不存在解的矛盾方程组。,如果有向量a使得 达到最小, 则称a为上述超定方程的最小二乘解。,线性最小二乘法的求解,定理:当RTR可逆时,超定方程组(3)存在最小二乘解,
5、 且即为方程组RTRa=RTy -正则(正规)方程组 的解:a=(RTR)-1RTy,所以,曲线拟合的最小二乘法要解决的问题,实际上就是求以下超定方程组的最小二乘解的问题。,线性最小二乘拟合 f(x)=a1r1(x)+ +amrm(x)中函数r1(x), rm(x)的选取,1. 通过机理分析建立数学模型来确定 f(x);,2. 将数据 (xi,yi) i=1, n 作图,通过直观判断确定 f(x):,用MATLAB解拟合问题,1、线性最小二乘拟合,2、非线性最小二乘拟合,用MATLAB作线性最小二乘拟合,1. 作多项式f(x)=a1xm+ +amx+am+1拟合,可利用已有命令:,a=poly
6、fit(x,y,m),2.对超定方程组,3.多项式在x处的值y的计算命令:y=polyval(a,x),例 对下面一组数据作二次多项式拟合,1)输入命令: x=0:0.1:1;y=-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2;R=(x.2), x, ones(11,1);A=Ry,解法1解超定方程的方法,2)计算结果: = -9.8108, 20.1293, -0.0317,2)计算结果: = -9.8108, 20.1293, -0.0317,解法2用多项式拟合的命令,1)输入命令: x=0:0.1:1;y=-0.447,
7、1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2; A=polyfit(x,y,2) z=polyval(A,x); plot(x,y,k+,x,z,r) %作出数据点和拟合曲线的图形,1. lsqcurvefit 已知数据点:xdata=(xdata1,xdata2,xdatan)ydata=(ydata1,ydata2,ydatan),用MATLAB作非线性最小二乘拟合,两个求非线性最小二乘拟合的函数: lsqcurvefit、lsqnonlin。 相同点和不同点:两个命令都要先建立M-文件fun.m,定义函数f(x),但定义f(x)的方
8、式不同,请参考例题。,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,lb, ub);(3) x =lsqcurvefit (fun,x0,xdata,ydata, lb, ub, options);(4) x, options = lsqcurvefit (fun,x0,xdata,ydata,);(5) x, o
9、ptions,funval = lsqcurvefit (fun,x0,xdata,ydata,);(6) x, options,funval, Jacob = lsqcurvefit (fun,x0,xdata,ydata,);,说明: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)-ydatai,2. lsqnonlin,已知数据点: xdata=
10、(xdata1,xdata2,xdatan)ydata=(ydata1,ydata2,ydatan),输入格式:1) x=lsqnonlin(fun,x0);2) x= lsqnonlin (fun,x0,lb,ub);3) x= lsqnonlin (fun,x0, ,lb,ub,options);4) x,options= lsqnonlin (fun,x0,);5) x,options,funval= lsqnonlin (fun,x0,);,说明:x= lsqnonlin (fun,x0,options);,例2 用下面一组数据拟合 中的参数a,b,k,该问题即解最优化问题:,1)编写
11、M-文件 curvefun1.mfunction f=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:1000 cdata=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),解法1
12、. 用命令lsqcurvefit,3)运算结果: f =0.0043 0.0051 0.0056 0.0059 0.0061 0.0062 0.0062 0.0063 0.0063 0.0063x =0.0063 -0.0034 0.2542,4)结论:a=0.0063, b=-0.0034, k=0.2542,MATLAB(fzxec2),1)编写M-文件 curvefun2.mfunction f=curvefun2(x)tdata=100:100:1000;cdata=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59;f=x(
13、1)+x(2)*exp(-0.02*x(3)*tdata)- cdata,2)输入命令:x0=0.2,0.05,0.05; x=lsqnonlin(curvefun2,x0) f= curvefun2(x),函数curvefun2的自变量是x,cdata和tdata是已知参数,故应将cdata tdata的值写在curvefun2.m中,解法 2 用命令lsqnonlin,x=(a,b,k),3)运算结果为f =1.0e-003 *(0.2322 -0.1243 -0.2495 -0.2413 -0.1668 -0.0724 0.0241 0.1159 0.2030 0.2792)x =0.0
14、063 -0.0034 0.2542,可以看出,两个命令的计算结果是相同的。,4)结论:即拟合得a=0.0063 b=-0.0034 k=0.2542,说明:拟合与统计回归,区别与联系,统计回归 线性回归 (regress命令) 非线性回归,非线性回 归,(1)确定回归系数的命令:beta,r,J=nlinfit(x,y,model, beta0),(2)非线性回归命令:nlintool(x,y,model, beta0,alpha),1、回归:,例题的求解:,2、输入数据:x=2:16;y=6.42 8.20 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.
15、60 10.80 10.60 10.90 10.76;beta0=8 2;,3、求回归系数:beta,r ,J=nlinfit(x,y,volum,beta0);beta,得结果:beta =11.6036-1.0641,即得回归模型为:,4、预测及作图: YY,delta=nlpredci(volum,x,beta,r ,J);plot(x,y,k+,x,YY,r),插值问题,拉格朗日插值,分段线性插值,三次样条插值,一 维 插 值,一、插值的定义,二、插值的方法,三、用Matlab解插值问题,返回,返回,二维插值,一、二维插值定义,二、网格节点插值法,三、用Matlab解插值问题,最邻近插
16、值,分片线性插值,双线性插值,网格节点数据的插值,散点数据的插值,一维插值的定义,节点可视为由,产生,的表达式复杂,或无封闭形式,或未知。,返回,称为拉格朗日插值基函数。,已知函数f(x)在n+1个点x0,x1,xn处的函数值为 y0,y1,yn 。求一n次多项式函数Pn(x),使其满足:Pn(xi)=yi,i=0,1,n.,解决此问题的拉格朗日插值多项式公式如下,其中li(x) 为n次多项式:,拉格朗日(Lagrange)插值,拉格朗日(Lagrange)插值,特别地:,两点一次(线性)插值多项式:,三点二次(抛物)插值多项式:,拉格朗日多项式插值的 这种振荡现象叫 Runge现象,采用拉格
17、朗日多项式插值:选取不同插值节点个数n+1,其中n为插值多项式的次数,当n分别取2,4,8,10时,绘出插值结果图形. 作业,例,返回,分段线性插值,计算量与n无关; n越大,误差越小.,返回,作业,用分段线性插值法求插值,并观察插值误差.,1.在-6,6中平均选取5个点作插值,4.在-6,6中平均选取41个点作插值,2.在-6,6中平均选取11个点作插值,3.在-6,6中平均选取21个点作插值,比分段线性插值更光滑。,在数学上,光滑程度的定量描述是:函数(曲线)的k阶导数存在且连续,则称该曲线具有k阶光滑性。光滑性的阶次越高,则越光滑。是否存在较低次的分段多项式达到较高阶光滑性的方法?三次样
18、条插值就是一个很好的例子。,三次样条插值,g(x)为被插值函数。,三次样条插值,作业,用三次样条插值选取11个基点计算插值,返回,用MATLAB作插值计算,一维插值函数:,yi=interp1(x,y,xi,method),nearest :最邻近插值linear : 线性插值; spline : 三次样条插值; cubic : 立方插值。 缺省时: 分段线性插值。,注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。,例:在1-12的11小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24。试估计每隔1/10小时的温
19、度值。,hours=1:12; temps=5 8 9 15 25 29 31 30 22 25 27 24; h=1:0.1:12; t=interp1(hours,temps,h,spline); (直接输出数据将是很多的) plot(hours,temps,+,h,t,hours,temps,r:) %作图 xlabel(Hour),ylabel(Degrees Celsius),作业 已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。,返回,二维插值的定义,第一种(网格节点):,已知 mn个节点,第二种(散乱节点):,返回,注意:最邻近插值一般不连续。具有连续性的最简单的插值是分片
20、线性插值。,最邻近插值,二维或高维情形的最邻近插值,与被插值点最邻近的 节点的函数值即为所求。,返回,将四个插值点(矩形的四个顶点)处的函数值依次简记为:,分片线性插值,f (xi, yj)=f1,f (xi+1, yj)=f2,f (xi+1, yj+1)=f3,f (xi, yj+1)=f4,插值函数为:,第二片(上三角形区域):(x, y)满足,插值函数为:,注意:(x, y)当然应该是在插值节点所形成的矩形区域内。显然,分片线性插值函数是连续的;,分两片的函数表达式如下:,第一片(下三角形区域): (x, y)满足,返回,双线性插值是一片一片的空间二次曲面构成。 双线性插值函数的形式如
21、下:,其中有四个待定系数,利用该函数在矩形的四个顶点(插值节点)的函数值,得到四个代数方程,正好确定四个系数。,双线性插值,返回,要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围。,z=interp2(x0,y0,z0,x,y,method),用MATLAB作网格节点数据的插值,nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 缺省时, 双线性插值,例:测得平板表面3*5网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86 试作出平板表面的温度分布曲面
22、z=f(x,y)的图形。,输入以下命令: x=1:5; y=1:3; temps=82 81 80 82 84;79 63 61 65 81;84 84 82 85 86; mesh(x,y,temps),1.先在三维坐标画出原始数据,画出粗糙的温度分布曲图.,2以平滑数据,在x、y方向上每隔0.2个单位的地方进行插值.,再输入以下命令: xi=1:0.2:5; yi=1:0.2:3; zi=interp2(x,y,temps,xi,yi,cubic); mesh(xi,yi,zi) 画出插值后的温度分布曲面图.,通过此例对最近邻点插值、双线性插值方法和双三次插值方法的插值效果进行比较。,返回
23、,插值函数griddata格式为:,cz =griddata(x,y,z,cx,cy,method),用MATLAB作散点数据的插值计算,要求cx取行向量,cy取为列向量。,nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 v4- Matlab提供的插值方法 缺省时, 双线性插值,作业与练习,练习1 用电压V=10伏的电池给电容器充电,电容器上t时刻的电压为 ,其中V0是电容器的初始电压, 是充电常数。试由下面一组t,V数据确定V0, 。,分别应用非线性最小二乘拟合以及非线性回归命令求解,并作比较,体会统计回归与拟合方法的区别。,练习2 在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,估计在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。,用插值方法作海底曲面图.作出水深小于5的海域范围,即z=5的等高线.,Thanks!,