基于Matlab的曲线拟合
最小二乘法
在许多科学研究实验中,往往要根据一组得到的确定实验数据(xi,yi)(i=0,1,2,…,m),求自变量x与因变量y的函数关系式y = S(x;a0,a1, a2,…,an)(n<m),这时ai为待定参数,由于观测数据存在误差,且待定参数ai的数量比给定数据点的数量少(即n<m),这类问题不要求y =S(x)= S(x;a0,a1, a2,…,an)通过点(xi,yi)(i=0,1,2,…,m),只要求在给定点xi上的误差 i=f(xi)- yi
m
的平方和 i2最小。
设 0(x), 1(x),…, n(x)是区间C[a,b]上线性无关函数族,在 =span{ 0(x),
i 0
[4]
1(x),…, n(x)}中找到一函数S(x),使误差平方和
m
m
2i
i
m
|| ||=
22
= [s(x
i 0
i 0
) yi]
2
=min
S(x)
[s(x
i 0
i
) yi]
2
其中s(x)= a0 0(x) + a1 1(x) + … + an n(x) (n<m)。这就是最一般的小二乘逼近,得到的拟合曲线为s(x),用几何语言说,就称为曲线拟合的最小二乘法[5]。
曲线拟合的Matlab实现
例:已知数据如下表1
表1 待拟合数据
试确定拟合函数f(x) a bx c sinx d ex的系数,并画出拟合曲线。 用Matlab求解曲线拟合问题的方法有很多种,可以直接调用Matlab函数,也可以按照算法进行编程,最简单的方法便是使用Matlab为用户提供的工具箱。下面只介绍用Matlab函数与工具箱求解上例。 方法一:用lsqcurvefit函数实现曲线拟合
Matlab为用户提供了lsqcurvefit函数实现最小二乘拟合,调用格式如下: x=lsqcurvefit(fun,x0,xdata,ydata);
fun为拟合函数,(xdata,ydata)为一组实验观测数据,满足ydata = fun(xdata,x),以x0为初始点求解改数据拟合问题。