1、数学建模方法插值与拟合,插值与拟合的关系,在工程中,常有这样的问题:给定一批数据点(它可以是设计师给定,也可能是从测量与采样中得到),需确定满足特定要求的曲线或曲面。对这个问题有两种方法。 一种是插值法。要求所求曲线(面)通过所给的所有数据点。 另一种方法是数据拟合(曲线拟合与曲面拟合)。人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过所有数据点。,内容提纲,1、插值问题 2、数据拟合,1、插值问题,1.1、一维插值插值问题的一般提法:已知y = f(x)(该函数未知) 在互异的n+1个点x0,x1,x2,xn处的函数值y0, y1,y2, yn,构造一个过n+1个点(xk,yk) k
2、=0,1,2,n的次数 不超过n的多项式 y = Ln(x),(称为插值多项式) 使其满足Ln(xk) = yk ,(称为插值条件) 然后用y = Ln(x)作为准确函数y = f(x)的近似值。此方 法称为插值法。Theorem:满足插值条件的次数不超过n的多项式 是唯一存在的。,两点一次(线性)插值多项式:,三点二次(抛物)插值多项式:,1.1.1 Lagrange插值法,就是满足插值条件的n次多项式Lagrange插值多项式,上式称为Lagrange插值基函数,例1、已知数据表,解:,基函数为,写出 f(x) 的线性插值函数 , 并求 f(1.5) 的近似值。,线性插值函数为,且 f(1
3、.5) L1(1.5) = 0.885。,Lagrange插值法的缺点,多数情况下,Lagrange插值法效果是不错的,但随着节点数n的增大,Lagrange多项式的次数也会升高,可能造成插值函数的收敛性和稳定性变差。如龙格(Runge)现象。 例:在-5,5上用n+1个等距节点作插值多项式Ln(x),使得它在节点处的值与函数y = 1/(1+25x2)在对应节点的值相等,当n增大时,插值多项式在区间的中间部分趋于y(x),但对于满足条件0.728|x|1的x, Ln(x)并不趋于y(x)在对应点的值,而是发生突变,产生剧烈震荡,即Runge现象。,1.1.2 分段插值法,图中看到,随着节点的
4、增加,Lagrange插值函数次数越高,插值函数在两端容易产生龙格现象,为了改进高次插值的缺陷,就产生了分段插值。 分段插值基本思想:将被插函数逐段多项式化。 处理过程:将区间a,b 划分: 在每个子段 上构造低次多项式,然后将其拼接在一起作为整个区间a,b 上的插值函数,这样构造出的插值函数称为分段多项式,改进了多项式插值整体性太强的缺点,可以进行局部调整而不会影响整体。,分段线性插值,设插值节点 若 :,分段线性插值,1.1.3 三次样条插值,分段线性插值函数在结点的一阶导数一般不存在,光滑性不高,这就导致了样条插值的提出。 在机械制造、航海、航空工业中,经常要解决下列问题:已知一些数据点
5、,如何通过这些数据点做一条比较光滑(如二阶导数连续)的曲线呢?,绘图员解决这一问题是首先把数据点描绘在平面上,再把一根富有弹性的细直条(称为样条)弯曲,使其一边通过这些数据点,用压铁固定细直条的形状,沿样条边沿绘出一条光滑的曲线,往往要用几根样条,分段完成上述工作,这时,应当让连接点也保持光滑。对绘图员用样条画出的曲线,进行数学模拟,这样就导出了样条函数的概念。,三次样条插值问题提出,设在区间a,b上,已给n+1个互不相同的节点a=x0x1xn=b以及函数y = f(x)在这些节点的值f(xi)=yi,i=0,1,n.如果分段函数S(x)满足下列条件: (1) S(x)在子区间xi,xi+1的
6、表达式Si(x)都是次数为3的多项式; (2)S(xi) = yi; (3) S(x)在区间a,b上有连续的二阶导数。 就称S(x)为f(x)在点x0,x1,xn的三次样条插值函数.,即 Si(x)=aix3+bix2+cix+di i=0,1,n xix xi+1 (4n个变量) 需要4n个方程 S(xi) = yi i=0,1,n (n+1个方程) S(xi-0)= S(xi+0) i=1,n-1 在xi连续 (n-1个方程) S/(xi-0)= S/(xi+0) i=1,n-1 在xi连续(n-1个方程) S/(xi-0)= S/(xi+0) i=1,n-1 在xi连续(n-1个方程)
7、再加两个条件:可在边界点x0与xn处给出导数的约束条件,称为边界条件。(1)S/(x0)= f0/ ,S /(xn)= fn/ (2) S/(x0)= f0/ ,S /(xn)= fn/ (3) S/(x0)= S /(xn)= 0 自然边界条件 (2个方程) 可以证明:满足上述4n个线性方程组有唯一解。,三次样条插值问题分析,总结,拉格朗日插值:其插值函数在整个区间上是一个解析表达式;曲线光滑;收敛性不能保证,用于理论分析,实际意义不大。 分段线性插值和三次样条插值:曲线不光滑(三次样条已有很大改进);收敛性有保证;简单实用,应用广泛。,1.2 二维插值,二维插值是基于一维插值同样的思想,但
8、是它是对两个变量的函数Z=f(x,y)进行插值。 求解二维插值的基本思路:构造一个二元函数Z=f(x,y),通过全部已知结点,即f(xi,yi)=zi,(i=0,1,n),再利用f(x,y)插值,即Z*=f(x*,y*)。,二维插值常见可分为两种:网格结点插值和散乱数据插值。 网格结点插值适用于数据点比较规范,即在所给数据点范围内,数据点要落在由一些平行的直线组成的矩形网格的每个顶点上,散乱数据插值适用于一般的数据点,多用于数据点不太规范的情况。,第一种(网格节点):,已知 mn个节点,注意:最邻近插值一般不连续。具有连续性的最简单的插值是分片线性插值。,二维或高维情形的最邻近插值,与被插值点
9、最邻近的 节点的函数值即为所求。,1.2.1网格节点插值法最邻近插值,将四个插值点(矩形的四个顶点)处的函数值依次简记为:,f (xi, yj)=f1,f (xi+1, yj)=f2,f (xi+1, yj+1)=f3,f (xi, yj+1)=f4,1.2.1网格节点插值法分片线性插值,插值函数为:,第二片(上三角形区域):(x, y)满足,插值函数为:,注意:(x, y)当然应该是在插值节点所形成的矩形区域内。显然,分片线性插值函数是连续的;,分两片的函数表达式如下:,第一片(下三角形区域): (x, y)满足,双线性插值是一片一片的空间二次曲面构成。 双线性插值函数的形式如下:,其中有四
10、个待定系数,利用该函数在矩形的四个顶点(插值节点)的函数值,得到四个代数方程,正好确定四个系数。,1.2.1网格节点插值法双线性插值,第二种(散乱节点):,1.2.2 散乱数据插值法,在T=a,b c,d上散乱分布n个点。一般采用反距离加权平均法。 基本思想:在非给定数据的点处,定义其函数值由已知数据按与该点距离的远近作加权平均决定,记 则二元函数(曲面)定义为:,如此定义的曲面是全局相关的,对曲面的任一点作数据计算都要涉及到全体数据,这在大量数据中是很慢的,但因为这种做法思想简单,人们对它进行了种种改进。,2.1 一维插值函数,yi=interp1(x,y,xi,method),neares
11、t :最邻近插值linear : 线性插值; spline : 三次样条插值; cubic : 立方插值。 缺省时: 分段线性插值。,注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。,2、用MATLAB解插值计算,解 在命令窗口输入:,例 1 在一天24h内, 从零点开始每间隔2h测得的环境温度为,12, 9, 9, 10, 18, 24, 28, 27, 25, 20, 18, 15, 13,(单位: ),推测在每1s时的温度. 并描绘温度曲线.,t=0:2:24 T=12 9 9 10 18 24 28 27 25 20 18 15 13 plot(t,T,*),ti=0
12、:1/3600:24 T1i=interp1(t,T,ti) plot(t,T,*,ti,T1i,r-),T2i=interp1(t,T,ti,spline) plot(t,T,*,ti,T1i,r-,ti,T2i,g-),例 2 在飞机的机翼加工时, 由于机翼尺寸很大, 通常在图纸上只能标出部分关键点的数据. 某型号飞机的机翼上缘轮廓线的部分数据如下:,x 0 4.74 9.05 19 38 57 76 95 114 133,y 0 5.23 8.1 11.97 16.15 17.1 16.34 14.63 12.16 6.69,x 152 171 190,y 7.03 3.99 0,x=0
13、 4.74 9.05 19 38 57 76 95 114 133 152 171 190 y=0 5.23 8.1 11.97 16.15 17.1 16.34 14.63 12.16 9.69 7.03 3.99 0 xi=0:0.001:190 yi=interp1(x,y,xi,spline) plot(xi,yi),要求x0,y0单调;x,y可取为矩阵,或x取行向量,y取为列向量,x,y的值分别不能超出x0,y0的范围。,z=interp2(x0,y0,z0,x,y,method),nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 缺省时, 双线性插值,2
14、.2 用MATLAB作网格节点数据的插值,插值函数griddata格式为:,cz =griddata(x,y,z,cx,cy,method),要求cx取行向量,cy取为列向量。,nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 缺省时, 双线性插值,2.3 用MATLAB作散点数据的插值计算,例 海底曲面图,例:在某海域测得一些点(x,y)处的水深z由下表给出,在矩形区域(75,200) (-50,150)内画出海底曲面的图形.,海底曲面图 程序,x=129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 1
15、17.5; y=7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5; z= 4 8 6 8 6 8 8 9 9 8 8 9 4 9; plot3(x,y,z,o), hold on %原始数据点 % 插值 cx=75:0.5:200; cy=-70:0.5:150; cz=griddata(x,y,z,cx,cy,cubic);% 三次插值 meshz(cx,cy,cz),海底曲面图 结果,曲线拟合的一般提法:已知一组(二维)数据,即平面上 n个点(xi,yi) i=1,n, 寻求一个函数(曲线)y=f(x), 使 f
16、(x) 在某种准则下与所有数据点最为接近,即曲线拟合得最好。常采用的方法是最小二乘拟合法。,y=f(x),i 为点(xi,yi) 与曲线 y=f(x) 的距离,3、数据拟合,用Matlab解最小二乘拟合(多项式拟合)方法,在线性最小二乘拟合中,用的较多的是多项式拟合。则Matlab中有现成的函数a=polyfit(x0,y0,m)其中输入参数x0,y0为要拟合的数据,m为拟合多项式的次数,输出参数a为拟合多项式系数多项式在x处的值y可用下面的函数计算y=polyval(a,x),例 某乡镇企业1990-1996年的生产利润如下表:年份 1990 1991 1992 1993 1994 1995
17、 1996 利润(万元) 70 122 144 152 174 196 202 试预测1997年和1998年的利润。解 作已知数据的的散点图, x0=1990 1991 1992 1993 1994 1995 1996; y0=70 122 144 152 174 196 202; plot(x0,y0,*),发现该乡镇企业的年生产利润几乎直线上升。 因此,我们可以用 作为拟合函数来预测 该乡镇企业未来的年利润。编写程序如下:x0=1990 1991 1992 1993 1994 1995 1996; y0=70 122 144 152 174 196 202; a=polyfit(x0,y0,1) y97=polyval(a,1997) y98=polyval(a,1998)求得 1997年的生产利润y97=233.4286,1998年的生产利 润y98=253.9286。,