数据拟合
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据拟合
数据拟合成曲线的思想,简称为曲线拟合(fitting a curve)。根据一组二维数据,即平面上的若干点,要求确定一个一元函数()y f x =,即曲线,使这些点与曲线总体来说尽量接近,曲线拟合其目的是根据实验获得的数据去建立因变量与自变量之间有效的经验函数关系,为进一步的深入研究提供线索。本章的目的,掌握一些曲线拟合的基本方法,弄清楚曲线拟合与插值方法之间的区别,学会使用Matlab 软件进行曲线拟合。
最小二乘法
给定平面上的点(,)i i x y ,(1,2,)i n =……,进行曲线拟合有多种方法,其中最小二乘法是解决曲线拟合最常用的方法。最小二乘法的原理是: 求()f x ,使2
211[()]n n
i
i i i i f x y δδ====-∑∑达到最小。 如图1所示,其中i δ为点(,)i i x y 与曲线()y f x =的距离。曲线拟合的实际含义是寻求一个函数()y f x =,使()f x 在某种准则下与所有数据点最为接近,即曲线拟合得最好。最小二乘准则就是使所有散点到曲线的距离平方和最小。拟合时选用一定的拟合函数()f x 形式,设拟合函数可由一些简单的“基函数”(例如幂函数,三角函数等等)01(),(),()m x x x ϕϕϕ…… 来线性表示:
0011()()()()m m f x c x c x x ϕϕϕ=++……+c
图1 曲线拟合示意图
现在要确定系数01,,m c c c ……,,使δ达到极小。为此,将()f x 的表达式代入δ中,δ就成为01,,m c c c ……,的函数,求δ的极小,就可令δ对i c 的偏导数等于零,于是得到1m +个方程组,从中求解出i c 。通常取基函数为231,,,,,m x x x x ……,这时
拟合函数()f x 为多项式函数。当=1m 时,()f x a bx =+,称为一元线性拟合函数,它是曲线拟合最简单的形式。除此之外,常用的一元曲线拟合函数还有双曲线()/f x a b x =+,指数曲线()bx f x ae =等,对于这些曲线,拟合前须作变量代换,转化为线性函数。
已知一组数据,用什么样的曲线拟合最好呢?可以根据散点图进行直观判断,在此基础上,选择几种曲线分别作拟合,然后比较,观察哪条曲线的最小二乘指标δ最小。
曲线拟合的MATLAB 实现
MATLAB 软件提供了基本的曲线拟合函数的命令:
多项式函数拟合:a = polyfit (xdata ,ydata ,n )
其中n 表示多项式的最高阶数,xdata ,ydata 为要拟合的数据,它是用数组的方式输入。输出参数a 为拟合多项式y = a 1x n + … + a n x + a n+1的系数a = [a 1, …, 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 = [x 1,x 2, …, x n ]; ydata = [y 1,y 2, …, y n ];初值输入p0 = [a 0,b 0,c 0,d 0]; 并且建立函数y = a e - bx + c e – dx 的M-文件(Fun.m )。若定义p 1 = a , p 2 = b , p 3 = c , p 4 = d , 则输出p = [p 1, p 2, p 3, p 4]。
引例求解:
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(t,y,'o',xi,yi)
由此看出上述曲线拟合是比较吻合的。
图2 浓度y的拟合曲线与实测数据(o)的比较
在MATLAB的NAG Foundation Toolbox中也有一些曲面拟合函数,如
e02daf,e02cf,e02def可分别求出矩形网格点数据、散点数据的最小平方误差双三次样条曲面拟合,e02def等可求出曲面拟合的函数值。