《插值拟合与MATLAB编程》由会员分享,可在线阅读,更多相关《插值拟合与MATLAB编程(11页珍藏版)》请在金锄头文库上搜索。
1、插值、拟合与 MATLAB 编程相关知识在生产和科学实验中,自变量x与因变量y间的函数关系y = /(x)有时不 能写出解析表达式,而只能得到函数在若干点的函数值或导数值,或者表 达式过于复杂而需要较大的计算量。当要求知道其它点的函数值时,需要 估计函数值在该点的值。为了完成这样的任务,需要构造一个比较简单的函数y = 9(x),使函数在 观测点的值等于已知的值,或使函数在该点的导数值等于已知的值,寻找 这样的函数 y =9(x) 有很多方法。根据测量数据的类型有以下两类处理观测 数据的方法。(1) 测量值是准确的,没有误差,一般用插值。(2) 测量值与真实值有误差,一般用曲线拟合。在MATL
2、AB中,无论是插值还是拟合,都有相应的函数来处理。一、插 值1、一维插值:已知离散点上的数据集(珥,yi),(x2,y2)-,(xn,yn),即已知在点集X= x x,x上的函数值Y= y,y2,y ,构造一个解析函数(其图形为 12n12n一曲线)通过这些点,并能够求出这些点之间的值,这一过程称为一维 插值。MATLAB 命令:yi=interp1(X, Y, xi, met hod)该命令用指定的算法找出一个一元函数y = f(x),然后以f (x)给出x处的 值。xi可以是一个标量,也可以是一个向量,是向量时,必须单调,met hod可以下列方法之一:neares t:最近邻点插值,直接
3、完成计算;spline:三次样条函数插值;linear:线性插值(缺省方式),直接完成计算;cubic:三次函数插值;对于minxi,maxxi外的值,MATLAB使用外推的方法计算数值。例1:已知某产品从1900年到2019年每隔10年的产量为:75.995, 91.972,105.711,123.203,131.699,150.697,179.323,203.212,一图上。226.505, 249.633, 256.344, 267.893,计算出 1995 年的产量,用三次样 条插值的方法,画出每隔一年的插值曲线图形,同时将原始的数据画在同解:程序如下year=1900:10:2019
4、;produc t二75.995, 91.972, 105.711,123.203, 131.699, 150.697, 179.323,203.212, 226.505, 249.633, 256.344, 267.893p1995=interp1(year,product, 1995)x=1900:2019;y二int erp1(year,produc t,x,cubic);plot(year,product, o,x,y);计算结果为:p1995=252.9885。2、二维插值已知离散点上的数据集(現,儿,Z1),(x y2,z2),.,(x,y ,z ),即已知在点集111222n n
5、 n(x,y),(x ,y ),(x ,y )上的函数值z,z,,z,构造一个解析函数(其图形 1122n n12n为一曲面)通过这些点,并能够求出这些已知点以外的点的函数值,这一 过程称为二维插值。MATLAB 函数:Zi=interp2(X,Y,Z,Xi,Yi,method)该命令用指定的算法找出一个二元函数 z f (x, y) ,然后以 f (x, y) 给出 (x, y) 处的值。返回数据矩阵 ZI ,Xi,Yi 是向量,且必须单调, ZI 和 meshgrid(Xi,Yi)是同类型的。met hod可以下列方法之一:neares t:最近邻点插值,直接完成计算;spline:三次样
6、条函数插值;linear:线性插值(缺省方式),直接完成计算;cubic:三次函数插值;例2 :已知1950年到1990年间每隔10年,服务年限从10年到30年 每隔10年的劳动报酬表如下:表:某企业工作人员的月平均工资(元)|服务年 限、年份1020301950150.697169.592187.652I960179.323195.072250.2871970203.212239.092322.7671980226.505273.706426.7301990249.633370.281598.243试计算1975年时,15年工龄的工作人员平均工资。 解:程序如下:years=1950:10:
7、1990;service=10:10:30;wage=150.697 169.592 187.652179.323 195.072 250.287203.212 239.092 322.767226.505 273.706 426.730249.633 370.281 598.243;mesh(service,years,wage) %绘原始数据图 w=interp2(service,years,wage,15,1975); %求点(15,1975)处的值 计算结果为:235.6288例3:设有数据x=l,2,3,4,5,6, y=l,2,3,4,在由x,y构成的网格上,数 据为:12,10,
8、11,11,13,1516.22.28.35.27.2018,21,26,32,28,2520.25.30.33.32.20求通过这些点的插值曲面。解:程序为:x=l:6;y=1:4;t=12,10,11,11,13,1516,22,28,35,27,2018,21,26,32,28,25;20,25,30,33,32,20 subplot(1,2,1) mesh(x,y,t) x1=1:0.1:6;y1=1:0.1:4; x2,y2=meshgrid(x1,y1); t1=interp2(x,y,t,x2,y2,cubic); subplot(1,2,2) mesh(x1,y1,t1);结果
9、如右图。作业:已知某处山区地形选点测量坐标数据为 x=0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5y=0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 海拔高度数据为:z=89 90 87 85 92 91 96 93 90 87 8292 96 98 99 95 91 89 86 84 82 8496 98 95 92 90 88 85 84 83 81 8580 81 82 89 95 96 93 92 89 86 868285879899969788858283828589949593929186848888929394958987868381
10、929296979896939584828184858581828080818590939584868198999897969584878081858283848790958688808281848586838281808287888998999796989492871、画出原始数据图;2、画出加密后的地貌图,并在图中标出原始数据。二、拟合曲线拟合已知离散点上的数据集(xl,yl),(x2,)(x,y),即已知在点集現,x2,,x 1122n n12n上的函数值儿,y2,,y ,构造一个解析函数(其图形为一曲线)使f(x)在原12n离散点 xi 上尽可能接近给定的 yi 值,这一过程称为曲线拟
11、合。最常用的曲线 ii拟合方法是最小二乘法,该方法是寻找函数f(X)使得M (/(xi)- yi最小。I=1MATLAB 函数:p=polyfit(x,y,n)p,s= polyfit(x,y,n)说明:x,y为数据点,n为多项式阶数,返回p为幕次从高到低的多项式系 数向量p。x必须是单调的。矩阵s用于生成预测值的误差估计。(见下一 函数 polyval)多项式曲线求值函数:polyval()调用格式: y=polyval(p,x)y,DELTA=polyval(p,x,s)说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。y,DELTA二polyval(p,x,s
12、)使用polyfit函数的选项输出s得出误差估计 Y DELTA。它假设polyfit函数数据输入的误差是独立正态的,并且方差为 常数。则Y DELTA将至少包含50%的预测值。例5:求如下给定数据的拟合曲线,x=0.5,1.0,1.5,2.0,2.5,3.0,y=1.75,2.45,3.81,4.80,7.00,8.60。解:MATLAB程序如下:x=0.5,1.0,1.5,2.0,2.5,3.0; y=1.75,2.45,3.81,4.80,7.00,8.60;p=polyfit(x,y,2)x1=0.5:0.05:3.0; y1=polyval(p,x1);plot(x,y,*r,x1,
13、y1,-b)计算结果为:p =0.5614 0.82871.1560此结果表示拟合函数为:f(x) 0.5614x2+0.8287x+1.1560,用此函数拟合数据的效果如图所示。例2:由离散数据x0.1.2.3.4.5.6.7.8.91y.3.511.41.61.9.6.4.81.52拟合出多项式。程序:x=0: .1:1;y二3 .5 1 1.4 1.6 1.9 6 4 .8 1.5 2n=3;p=polyfit(x,y,n)xi=linspace(0,1,100);z=polyval(p,xi); %多项式求值plot(x,y,o,xi,z,k:,x,y,b)legend(原始数据,3阶
14、曲线)结果:p =16.7832 -25.7459 10.9802 -0.0035多项式为:16.7832x3-25.7459x2+10.9802x-0.0035曲线拟合图形:也可由函数给出数据。例 3: x=l:20,y=x+3*sin(x)程序: x=1:20;y=x+3*sin(x);p=polyfit(x,y,6) xi=linspace(1,20,100);z二polyval(p,xi); %aI!EQ60 Ey plot(x,y,o,xi,z,k:,x,y,b)结果:p 二0.0000 -0.0021 0.0505 -0.5971 3.6472 -9.7295 11.3304再用10阶多项式拟合程序:x=1:20;y=x+3*sin(x);p=polyfit(x,y,10)xi=linspace(1,20,100);z