对一系列输入点(x,y)进行线性拟合出的直线方程为: y = Ax + B,根据最小二乘法求出A,B的公式为:
代码实现:
// ******************************************************
// * Line fitting with least square error method
// * Input:
// * x, input x values
// * y, input y values
// * size, size of x and y
// * A, coefficient in y = Ax + B
// * B, coefficient in y = Ax + B
// *
// * By Li Chengyu, 2013-01-13
// ******************************************************
void LineFitting(float x[], float y[], int size, float& A, float& B)
{
float xmean = 0.0f;
float ymean = 0.0f;
for(int i = 0; i < size; i++)
{
xmean += x[i];
ymean += y[i];
}
xmean /= size;
ymean /= size;
float sumx2 = 0.0f;
float sumxy = 0.0f;
for(int i = 0; i < size; i++)
{
sumx2 += (x[i] - xmean) * (x[i] - xmean);
sumxy += (y[i] - ymean) * (x[i] - xmean);
}
A = sumxy / sumx2;
B = ymean - A*xmean;
}