1、第十一讲 插值,数学软件,一、一 维插值,二、用MATLAB作插值计算,三、二维插值,四、小结与作业,一、一 维插值 1. 一维插值的定义,节点可视为由 y=g(x)产生, g(x)表达式可能十分复杂,或不存在封闭形式或未知.,插值问题求解的基本思路:,构造一个(相对简单的)函数 y=f (x),使f (x)通过全部节点, 即,再用 y=f (x)计算插值,即,2.拉格朗日(Lagrange)插值,称为拉格朗日插值基函数.,已知函数g(x)在n+1个点x0,x1,xn处的函数值为 y0,y1,yn . 求一n次多项式Ln(x), 使其满足:Ln(xj)=yj , j=0,1,n.,解决此问题的
2、拉格朗日插值多项式公式如下,其中li(x) 为n次多项式:,拉格朗日(Lagrange)插值,特别地:,两点一次(线性)插值多项式:,三点二次(抛物)插值多项式:,拉格朗日多项式插值的 这种振荡现象叫 Runge现象.,采用拉格朗日多项式插值:选取不同插值节点个数n+1,其中n为插值多项式的次数,当n分别取2,4,6,8,10时,绘出插值结果图形.,例1,3.分段线性插值,简单地说,分段线性插值就是将每两个相邻的节点用直线连接起来,如此形成的一条折线就是分段线性插值函数,记作Ln(x),它满足Ln(xj)=yj ,且Ln(x)在每个小区间xj,xj+1上是线性函数。,分段线性插值,例2,用分段
3、线性插值法求插值,并观察插值误差.,1.在-6,6中平均选取5个点作插值,4.在-6,6中平均选取41个点作插值,2.在-6,6中平均选取11个点作插值,3.在-6,6中平均选取21个点作插值,4.三次样条插值,比分段线性插值更光滑。,在数学上,光滑程度的定量描述是:函数(曲线)的k阶导数存在且连续,则称该曲线具有k阶光滑性。光滑性的阶次越高,则越光滑。是否存在较低次的分段多项式达到较高阶光滑性的方法?三次样条插值就是一个很好的例子。,三次样条插值,三次样条插值,插值条件,连接条件,三次样条插值,附加两个条件,通常称为边界条件, 常用的有如下4类:,(1) m边界条件:,(2) M边界条件:,
4、特别地,称为自然边界条件,(3) 周期性边界条件:,(4) 非结点边界条件:前二段多项式三次项系数相同, 最后二段多项式三次项系数相同.,利用插值条件、连接条件、边界条件可以唯一确定S(x) .,例3,用三次样条插值选取11个节点计算插值 .,二、用MATLAB作插值计算 1.拉格朗日插值:,yy=lagrange(x,y,xx),编写一个函数M文件 设n个节点以数组x,y输入,m个插值点以数组xx输入,输出数组yy为m个插值. 作拉格朗日插值计算时只需在输入x,y,xx后运行命令yy=lagrange(x,y,xx)即可。,拉格朗日插值:,function yy=lagrange(x,y,x
5、x) n=length(x); m=length(xx); for i=1:mz=xx(i);s=0;for k=1:np=1;for j=1:nif j=kp=p*(z-x(j)/(x(k)-x(j);endends=p*y(k)+s;endyy(i)=s; end,2.分段线性插值,MATLAB的插值函数为interp1,其调用格式为,yy=interp1(x , y ,xx , method),nearest :最邻近插值linear : 线性插值 spline : 三次样条插值 cubic : 三次插值 缺省时: 分段线性插值,2.分段线性插值,MATLAB的插值函数为interp1,
6、其调用格式为,注意:xx不能够超过x的范围。,yy=interp1(x,y,xx,method),分段线性插值在Matlab中有现成的命令:,yy=interp1(x,y,xx),其中x,y为节点数组(同长度), xx为插值点数组, yy为输出的插值数组.,3.三次样条插值 :,其中x,y为节点数组(同长度), xx为插值点数组, yy为输出的插值数组,端点为非结点边界条件. Spline命令还可处理第一类边界(端点)条件,只需将原来的输入数组y改为yy=a y b,其中a , b分别为,yy=interp1(x,y,xx,spline) 或yy=spline(x,y,xx),例4,将区间-5
7、,5 n(=10)等分,用g(x)产生n+1个节点,用Matlab作以上三种方法的插值计算,进行比较。,从下表中可看出,与精确值比较,显然它们在节点处相等,而在插值点处三次样条插值的结果最好.,例5 在12小时内,每隔1小时测量一次温度,测得的温度依次为:5,8,9,15,25,29,31,30,22,25,27,24. 试估计每隔1/10小时的温度值.,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
8、,temps,+,h,t,hours,temps,r:) %作图 xlabel(Hour),ylabel(Degrees Celsius),例6 已知飞机下轮廓线上数据如下,求x每改变0.1时的y值。,三、二维插值 1.二维插值的定义,第一种(网格节点):,已知 mn个节点,构造一个二元函数,通过全部已知节点, 即,再用,计算插值,即,第二种(散乱节点):,已知 n个节点,构造一个二元函数,通过全部已知节点, 即,再用,计算插值,即,最邻近插值,注意:最邻近插值一般不连续。具有连续性的最简单的插值是分片线性插值。,最邻近插值,二维或高维情形的最邻近插值,与被插值点最邻近的节点的函数值即为所求。
9、,将四个插值点(矩形的四个顶点)处的函数值依次简记为:,分片线性插值,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)满足,双线性插值,双线性插值是一片一片的空间二次曲面构成.双线性插值函数的形式如下:,其中有四个待定系数,利用该函数在矩形的四个顶点(插值节点)的函数值,得到四个代数方程,正
10、好确定四个系数。,双线性插值,2、用MATLAB作网格节点数据的插值,要求x,y单调;xx,yy可取为矩阵,或xx取行向量,yy取为列向量,xx,yy的值分别不能超出x,y的范围。,zz=interp2(x,y,z, xx,yy,method),nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 缺省时, 双线性插值,例7 测得平板表面3*5网格点处的温度分别为: 82 81 80 82 84 79 63 61 65 81 84 84 82 85 86 试作出平板表面的温度分布曲面z=f(x,y)的图形.,1.先在三维坐标系里画出原始数据,画出粗糙的温度分布曲面图.,
11、输入以下命令: 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.先在三维坐标系里画出原始数据,画出粗糙的温度分布曲面图.,再输入以下命令: xi=1:0.2:5; yi=1:0.2:3; zi=interp2(x,y,temps,xi,yi,cubic); mesh(xi,yi,zi),2.平滑数据,在x、y方向上每隔0.2个单位的地方进行插值,并画出插值后的温度分布曲面图.,3、用MATLAB作散点数据的插值计算,插值函数griddata格式为:,cz =griddata
12、(x,y,z,cx,cy,method),要求cx取行向量,cy取为列向量。,nearest 最邻近插值 linear 双线性插值 cubic 双三次插值 v4- Matlab提供的插值方法 缺省时, 双线性插值,例8 在某海域测得一些点(x,y)处的水深z由下表给出,船的吃水深度为5英尺,在矩形区域(75,200)*(-50,150)里的哪些地方船要避免进入。,1作出测量点的分布图,2. 作出海底地貌图,作出海底地貌图并作出截取水深小于5的部分区域图以及求出水深小于5的海域范围 .,3.作出水深小于5的海域范围,即z=5的等高线.,船应避免进人危险区域(110,200) (-5,105),四、小结与作业,四、小结与作业,2. 山区地貌:在某山区测得一些地点的高程如下表:(平面区域1200=x=4000,1200=y=3600),试作出该山区的地貌图和等高线图,并对几种插值方法进行比较。,