您好,欢迎访问三七文档
插值与拟合一、插值的基本原理二、拟合的基本原理三、插值与拟合的关系四、插值的MATLAB实现五、拟合的Matlab实现我们经常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,例如数据拟合、参数估计、插值等数据处理算法。此类问题在MATLAB中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。一、概述数据拟合在很多赛题中有应用,与图形处理有关的问题很多与插值和拟合有关系,例如98年美国赛A题,生物组织切片的三维插值处理,94年A题逢山开路,山体海拔高度的插值计算,2003年吵的沸沸扬扬的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理,2005年的雨量预报的评价的插值计算。2001年的公交车调度拟合问题,2003年的饮酒驾车拟合问题。喝两瓶酒的拟合曲线喝1-5瓶酒的拟合曲线在实际中,常常要处理由实验或测量所得到的一些离散数据。插值与拟合方法就是要通过这些数据去确定某一类已知函数的参数或寻求某个近似函数,使所得到的近似函数与已知数据有较高的拟合精度。如果要求这个近似函数(曲线或曲面)经过所已知的所有数据点,则称此类问题为插值问题。(不需要函数表达式)二、基本概念如果不要求近似函数通过所有数据点,而是要求它能较好地反映数据变化规律的近似函数的方法称为数据拟合。(必须有函数表达式)近似函数不一定(曲线或曲面)通过所有的数据点。1、联系都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数的方法。2、区别插值问题不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。数据拟合要求得到一个具体的近似函数的表达式。三、插值与拟合的区别和联系四、插值的使用及求解当数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法。实际问题当中碰到的函数f(x)是各种各样的,有的表达式很复杂,有的甚至给不出数学的式子,只提供了一些离散数据,警如,某些点上的函数值和导数值。4.1引言选用不同类型的插值函数,逼近的效果就不同,一般有:(1)拉格朗日插值(lagrange插值)(2)分段线性插值(3)Hermite(4)三次样条插值。4.2插值方法一维插值的定义已知n+1个节点,,1,0(),(njyxjj其中jx互不相同,不妨设),10bxxxan求任一插值点)(*jxx处的插值.*y0x1xnx0y1y节点可视为由)(xgy产生,,g表达式复杂,,或无显式形式,,或未知.。*x*y构造一个(相对简单的)函数),(xfy通过全部节点,即),1,0()(njyxfjj再用)(xf计算插值,即).(**xfy0x1xnx0y1y*x*y返回称为拉格朗日插值基函数。n0iiiny)x(L)x(P已知函数f(x)在n+1个点x0,x1,…,xn处的函数值为y0,y1,…,yn。求一n次多项式函数Pn(x),使其满足:Pn(xi)=yi,i=0,1,…,n.解决此问题的拉格朗日插值多项式公式如下其中Li(x)为n次多项式:)xx()xx)(xx()xx)(xx()xx()xx)(xx()xx)(xx()x(Lni1ii1ii1i0in1i1i10i拉格朗日(Lagrange)插值拉格朗日(Lagrange)插值特别地:两点一次(线性)插值多项式:101001011yxxxxyxxxxxL三点二次(抛物)插值多项式:2120210121012002010212yxxxxxxxxyxxxxxxxxyxxxxxxxxxL.,满足插值条件直接验证可知xLn拉格朗日多项式插值的这种振荡现象叫Runge现象55,11)(2xxxg采用拉格朗日多项式插值:选取不同插值节点个数n+1,其中n为插值多项式的次数,当n分别取2,4,6,8,10时,绘出插值结果图形.例ToMatlablch(larg1)分段线性插值其它,0,,)()()(1111110jjjjjjjjjjjnjjjnxxxxxxxxxxxxxxxlxlyxL计算量与n无关;n越大,误差越小.nnnxxxxgxL0),()(limxjxj-1xj+1x0xnxoyToMATLABxch11,xch12,xch13,xch1466,11)(2xxxg例用分段线性插值法求插值,并观察插值误差.1.在[-6,6]中平均选取5个点作插值(xch11)4.在[-6,6]中平均选取41个点作插值(xch14)2.在[-6,6]中平均选取11个点作插值(xch12)3.在[-6,6]中平均选取21个点作插值(xch13)比分段线性插值更光滑。xyxi-1xiab在数学上,光滑程度的定量描述是:函数(曲线)的k阶导数存在且连续,则称该曲线具有k阶光滑性。光滑性的阶次越高,则越光滑。是否存在较低次的分段多项式达到较高阶光滑性的方法?三次样条插值就是一个很好的例子。三次样条插值三次样条插值},1],,[),({)(1nixxxxsxSiii],[)()3),1,0()()2),1()()10223niiiiiiixxCxSniyxSnidxcxbxaxs)1,,1()()(),()(),()(111nixsxsxsxsxsxsiiiiiiiiiiii自然边界条件)(0)()()40nxSxS)(,,,)4)3)2xSdcbaiiiig(x)为被插值函数。lim()()nSxgx例66,11)(2xxxg用三次样条插值选取11个基点计算插值(ych)ToMATLABych(larg1)Matlab实现:实现分段线性插值不需要编制函数程序,它自身提供了内部的功能函数interp1(一维插值)intep2(二维)interp3(三维)intern(n维)4.3MATLAB实现插值用MATLAB作插值计算一维插值函数:yi=interp1(x,y,xi,'method')插值方法被插值点插值节点xi处的插值结果‘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小时的温度值.ToMATLAB(temp)hours=1:12;temps=[589152529313022252724];h=1:0.1:12;t=interp1(hours,temps,h,'spline');plot(hours,temps,'+',h,t,hours,temps,'r:')%作图xlabel('Hour'),ylabel('DegreesCelsius’)xy机翼下轮廓线X035791112131415Y01.21.72.02.12.01.81.21.01.6例已知飞机下轮廓线上数据如下,求x每改变0.1时的y值.ToMATLAB(plane)返回要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围.z=interp2(x0,y0,z0,x,y,’method’)被插值点插值方法用MATLAB作网格节点数据的插值插值节点被插值点的函数值‘nearest’最邻近插值;‘linear’双线性插值;‘cubic’双三次插值;缺省时双线性插值.例:测得平板表面3×5网格点处的温度分别为:828180828479636165818484828586试作出平板表面的温度分布曲面z=f(x,y)的图形.输入以下命令:x=1:5;y=1:3;temps=[8281808284;7963616581;8484828586];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)画出插值后的温度分布曲面图.ToMATLAB(wendu)例山区地貌:在某山区测得一些地点的高程如下表。平面区域为1200=x=4000,1200=y=3600)试作出该山区的地貌图和等高线图,并对几种插值方法进行比较。XY12001600200024002800320036004000120011301250128012301040900500700160013201450142014001300700900850200013901500150014009001100106095024001500120011001350145012001150101028001500120011001550160015501380107032001500155016001550160016001600155036001480150015501510143013001200980通过此例对最近邻点插值、双线性插值方法和双三次插值方法的插值效果进行比较.ToMATLAB(moutain)返回插值函数griddata格式为:cz=griddata(x,y,z,cx,cy,‘method’)用MATLAB作散点数据的插值计算要求cx取行向量,cy取为列向量.被插值点插值方法插值节点被插值点的函数值‘nearest’最邻近插值‘linear’双线性插值‘cubic’双三次插值'v4'-MATLAB提供的插值方法缺省时,双线性插值例在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)×(-50,150)里的哪些地方船要避免进入.xyz129140103.588185.51951057.5141.52314722.5137.585.54868688xyz157.5107.57781162162117.5-6.5-81356.5-66.584-33.59988949ToMATLABhd1返回4.作出水深小于5的海域范围,即z=5的等高线.2.在矩形区域(75,200)×(-50,150)进行插值。1.输入插值基点数据3.作海底曲面图%程序一:插值并作海底曲面图x=[129.0140.0103.588.0185.5195.0105.5157.5107.577.081.0162.0162.0117.5];y=[7.5141.523.0147.022.5137.585.5-6.5-813.056.5-66.584.0-33.5];z=[48686889988949];x1=75:1:200;y1=-50:1:150;[x1,y1]=meshgrid(x1,y1);z1=griddata(x,y,z,x1,y1,'v4');meshc(x1,y1,z1)海底曲面图%程序二:插值并作出水深小于5的海域范围。x1=75:1:200;y1=-50:1:150;[x1,y1]=meshgrid(x1,y1);z1=griddata(x,y,z,x1,y1,'v4');%插值z1(z1=5)=nan;%将水深大于5的置为nan,这样绘图就不会显示出来meshc(x1,y1,z1)水深小于5的海域范围实验作业1山区地貌:在某山区测得一些地点的高程如下表:(平面区域1200≤x≤4000,1200≤y≤3600),试作出该山区的地貌图和等高线图,并对几种插值方法进行比较.360032002
本文标题:第六讲插值与拟合
链接地址:https://www.777doc.com/doc-3167378 .html