当前位置:文档之家› 第五章数据拟合.

第五章数据拟合.

第五章 数据拟合
这就是数据拟合成曲线的思想,简称为曲线拟合(fitting a curve)。

根据一组二维数据,即平面上的若干点,要求确定一个一元函数y = f (x ),即曲线,使这些点与曲线总体来说尽量接近,
曲线拟合其目的是根据实验获得的数据去建立因变量与自变量之间有效的经验函数关系,为进一步的深入研究提供线索。

本章的目的,掌握一些曲线拟合的基本方法,弄清楚曲线拟合与插值方法之间的区别,学会使用MATLAB 软件进行曲线拟合。

§1 最小二乘法
给定平面上的点(x i, y i ),(i = 1,2,…,n ),进行曲线拟合有多种方法,其中最小二乘法是解决曲线拟合最常用的方法。

最小二乘法的原理是:
求 ∑∑==-==n i i i n i i y x f x f 1212])([),(δδ使 达到最小
如图1所示,其中δi 为点(x i ,y i )与曲线y=f (x )的距离。

曲线拟合的实际含义是寻求一个函数y=f (x ),使f (x )在某种准则下与所有数据点最为接近,即曲线拟合得最好。

最小二乘准则就是使所有散点到曲线的距离平方和最小。

拟合时选用一定的拟合函数f (x ) 形式,设拟合函数可由一些简单的“基函数”(例如幂函数,三角函数等等) )(),...,(),(10x x x m ϕϕϕ来线性表示:
)(...)()()(1100x c x c x c x f m m ϕϕϕ+++=
图1 曲线拟合示意图
现在要确定系数c 0,c 1,…,c m ,使d 达到极小。

为此,将f (x )的表达式代入d 中,d 就成为c 0,c 1,…,c m 的函数,求d 的极小,就可令d 对 c i 的偏导数等于零,于是得到m +1个方程组,从中求解出c i 。

通常取基函数为1,x ,x 2,x 3,…,x m ,这时拟合函数f (x )为多项式函数。

当m =1时,f (x ) = a + bx ,称为一元线性拟合函数,它是曲线拟合最简单的形式。

除此之外,常用的一元曲线拟合函数还有双曲线f (x ) = a + b/x ,指数曲线f (x ) = a e bx 等,对于这些曲线,拟合前须作变量代换,转化为线性函数。

已知一组数据,用什么样的曲线拟合最好呢?可以根据散点图进行直观判断,在此基础上,选择几种曲线分别作拟合,然后比较,观察哪条曲线的最小二乘指标d 最小。

§2 曲线拟合的MATLAB实现
MATLAB软件提供了基本的曲线拟合函数的命令:
多项式函数拟合: a = polyfit(xdata,ydata,n)
其中n表示多项式的最高阶数,xdata,ydata 为要拟合的数据,它是用数组的方式输入。

输出参数a为拟合多项式y = a1x n + … + a n x + a n+1的系数a = [a1, …, a n, a n+1]。

多项式在x处的值y可用下面程序计算。

y = polyval (a, x)
一般的曲线拟合: p = curvefit(‘Fun’,p0,xdata,ydata)
其中Fun表示函数Fun (p, xdata)的M-文件,p0表示函数的初值。

curvefit命令的求解问题形式是:
min{p} sum {(Fun (p, xdata)-ydata).^2}
若要求解点x处的函数值可用程序f = Fun(p, x) 计算。

例如已知函数形式y = a e - bx+ c e –dx,并且已知数据点(x i, y i), i = 1,2,…, n,要确定四个未知参数a, b, c, d。

使用curvefit命令,数据输入xdata = [x1,x2, …, x n]; ydata = [y1,y2, …, y n];初值输入p0 = [a0,b0,c0,d0]; 并且建立函数y = a e - bx+ c e –dx的M-文件(Fun.m)。

若定义p1 = a, p2 = b, p3 = c, p4 = d , 则输出p = [p1, p2, p3, p4]。

引例求解:
t=[1:16]; %数据输入
y=[4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6];
plot(t,y,'o') %画散点图
p=polyfit(t,y,2) (二次多项式拟合)
计算结果:
p = -0.0445 1.0711 4.3252 %二次多项式的系数
从而得到某化合物的浓度y与时间t的拟合函数:
y = 4.3252+1.0711t –0.0445t2
对函数的精度如何检测呢?仍然以图形来检测,将散点与拟合曲线画在一个画面上。

参见图2。

xi=linspace(0,16,160);
yi=polyval(p,xi);
plot(x,y,'o',xi,yi)
由此看出上述曲线拟合是比较吻合的。

<![endif]>
图2 浓度y的拟合曲线与实测数据(o)的比较
在MATLAB的NAG Foundation Toolbox中也有一些曲面拟合函数,如e02daf,e02cf,e02def可分别求出矩形网格点数据、散点数据的最小平方误差双三次样条曲面拟合,e02def等可求出曲面拟合的函数值。

相关主题