最小二乘法拟合直线
在科学实验和生产实践中,经常需要从一组实验数据出发寻求函数y=f(x)的一个近似表达式,也称为经验公式。从几何上看,就是希望根据给定的m个点,求曲线y=f(x)的一条近似曲线。因此这是个曲线拟合问题。
当我们要求近似曲线严格通过给定的每个点时,这是插值算法。对于本文所述的直线拟合来说,如果用插值算法,则只需要两个点就够了。实际直线拟合数据可能满足不了这个条件,为了便于计算,分析与应用,我们较多地根据“使测量点到直线距离的平方和最小”的原则来拟合。按最小二乘原则选择拟合曲线的方法,称为最小二乘法(Method of Least Squares)。
利用最小二乘法拟合曲线的一般步骤是:
-
将实验数据显示出来,分析曲线的形式;
-
确定拟合曲线的形式。对于本文来说,曲线形式是直线,y=a+bx;
-
建立法方程组并对其进行求解;
因为OpenCASCADE中数据结构及算法丰富,所以用OpenCASCADE可以快速实现直线的最小二乘法拟合算法。下面给出具体实现代码:
#include <iostream> #include <gp_Lin2d.hxx> #include <gp_Pnt2d.hxx> #include <TColgp_Array1OfPnt2d.hxx> #include <math_Vector.hxx> #include <math_SVD.hxx> #include <math_Gauss.hxx> #include <math_GaussLeastSquare.hxx> #include <OSD_Chronometer.hxx>