【C++】代码实现:最小二乘法

// *input: 存储数据的数组
//   size: 数组中实际保存了多少数据
int LSQ_adjust(double *input, long size) {
	double a11(0.0), a12(0.0), a21(0.0), a22(0.0), b1(0.0), b2(0.0);
	double a(0.0), b(0.0);
	long i(0);

	for (i = 0; i < size; i++)
	{
		a11 = a11 + i * i;
		a12 = a12 + i;
		a21 = a21 + i;
		a22 = size;
		b1 = b1 + i * input[i];
		b2 = b2 + input[i];
	}

	//计算直线系数
	b = (b1 / a11 - b2 / a21) / (a12 / a11 - a22 / a21);
	a = b1 / a11 - a12 / a11 * b;
	for (i = 0; i < size; i++)
	{
		input[i] = input[i] - (a * i + b);
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/kingkee/article/details/94391656