c++ 曲线拟合的最小二乘法 公式 二次多项式和三次多项式

struct Hisnum//直方图结构体 进行多项式拟合{ int gray; int num;};struct Hisnum//直方图结构体 进行多项式拟合{ int gray; int num;};struct xishu{ double A1; double A2; double A3; double A4;};xishu pol...
摘要由CSDN通过智能技术生成

struct Hisnum//直方图结构体 进行多项式拟合
{
    int gray;
    int num;
};

struct Hisnum//直方图结构体 进行多项式拟合
{
	int gray;
	int num;
};
struct xishu
{
	double A1;
	double A2;
	double A3;
	double A4;
};

xishu polfit2(Hisnum his[], int n)//最小二乘 二次多项式拟合 y=A1+A2*x+A3*x*x  x为灰度 y为灰度数量
{

	//-----------------公式---------------------------
	//n A1     + sumX A2   + sumXX A3 = sumY
	//sumX A1  + sumXX A2  + sumXXX A3 = sumXY
	//sumXX A1 + sumXXX A2 + sumXXXX A3 = sumXXY
	//--------------------------------------------目的:求系数A1 A2 A3  
	int jiange = 10;//相隔十个点选一个点进行计算
	n = n / jiange + 1;
	long long int sumX = 0, sumY = 0, sumXX = 0, sumXXX = 0, sumXXXX = 0, sumXY = 0, sumXXY = 0;//建立方程组
	for (int i = 0; i < 256; i = i + jiange)
	{
		cout << "number:" << his[i].num << endl;
		cout << "gray:" << his[i].gray << endl;
		sumX = sumX + his[i].gray;
		sumY = sumY + his[i].num;
		sumXX = sumXX + his[i].gray*his[i].gray;
		sumXXX = sumXXX + his[i].gray*his[i].gray*his[i].gray;
		sumXXXX = sumXXXX + his[i].gray*his[i].gray*his[i].gray*his[i].gray;
		sumXY = sumXY + his[i].gray*his[i].num;
		sumXXY = sumXXY + his[i].gray*his[i].num*his[i].gray;
	}
	cout << "n:" << n << " sumX: " << sumX << " sumXX: " << sumXX &l
  • 20
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值