1、线性最小二乘拟合
最小二乘法(又称最小平方法)是一种数学优化技术,其通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法通过变量的数据来描述变量之间的相互关系。例如通过描述x、y之间的相互关系。
常见的多项式拟合曲线有:直线、多项式、双曲线、指数曲线。Matlab中的最小二乘函数:P=polyfit(x,y,n)(n=1时为),[P Smu]=polyfit(x,y,n),polyval(P,t)返回n次多项式在t处的值(plot(t, polyval(P,t))。P-返回n次拟合多项式系数从高到低依次存放于向量P中,S-包含三个值其中normr是残差平方和,mu-包含两个值mean(x)均值,std(x)标准差。
2、非线性拟合
超定方程组(方程组的个数大于未知数的个数),Matlab中提供lsqcurvefit和lsqnonlin两个非线性最小二乘拟合函数,两者的区别在于其定于的函数f(x)不一样。
非线性曲线拟合lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得:
最小
其输入格式有:
(1)x = lsqcurvefit (‘fun’,x0,xdata,ydata);
(2)x =lsqcurvefit (‘fun’,x0,xdata,ydata,options);
(3)x = lsqcurvefit (‘fun’,x0,xdata,ydata,options,’grad’);
(4)[x, options] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);
(5)[x, options,funval] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);
(6)[x, options,funval, Jacob] = lsqcurvefit (‘fun’,x0,xdata,ydata,…);
其中fun为事先建立的函数F(x,xdata)的M-文件x0为迭代初始值,xdata、ydata为已知数据点、options为无约束优化。
非线性最小二乘拟合lsqnonlin用以求含参量x(向量)的向量值函数f(x)=(f1(x),f2(x),…,fn(x))T中的参量x,使得:
最小
其中
其输入格式为:
(1)x=lsqnonlin(‘fun’,x0);
(2)x= lsqnonlin (‘fun’,x0,options);
(3)x= lsqnonlin (‘fun’,x0,options,’grad’);
(4)[x,options]=lsqnonlin(‘fun’,x0,dwx,upx,options,Y);
其中,fun为建立的M文件,x0为初始值,dwx、upx为上、下限,options为无约束优化,Y为传入fun的参数值。
无约束优化options的设定options=optimset(‘optionName’,’optionValue’),例如options = optimset('Display','iter','TolFun',1e-8)使得优化函数值的误差为1e-8,iter改为off不显示迭代过程。options = optimset('param1',value1,'param2',value2,...)