【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;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值