⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp1.cpp

📁 该程序实现了最小二乘法的算法。基本思想是多元函数求极值所用的方法
💻 CPP
字号:
#include "stdio.h"


//返回3*3行列式的值
double Determinant(double a11,double a12,double a13,
				   double a21,double a22,double a23,
				   double a31,double a32,double a33)
{
	return a11*(a22*a33-a23*a32)-a12*(a21*a33-a23*a31)+a13*(a21*a32-a31*a22);
}

//函数将data[]数组中的n个数用最小二乘法拟合成y = a*x*x+b*x+c
//a,b,c分别为二次项,一次项,常数项的系数
//函数调用成功返回 1
int Fitting(double* DataX,double* DataY,int Num,double* a,double* b,double* c)
{
	double x1,x2,x3,x4,right1,right2,right3;
	double Denominator,aMolecular,bMolecular,cMolecular;
	x1 = x2 = x3 = x4 = right1 = right2 = right3 = 0;
	int loop;
	for(loop = 0 ; loop < Num ; loop++)
	{
		x1 += DataX[loop];
		x2 += DataX[loop]*DataX[loop];
		x3 += DataX[loop]*DataX[loop]*DataX[loop];
		x4 += DataX[loop]*DataX[loop]*DataX[loop]*DataX[loop];
		
		right1 += DataX[loop]*DataX[loop]*DataY[loop];
		right2 += DataX[loop]*DataY[loop];
		right3 += DataY[loop];
	}
	
	Denominator = Determinant(x4,x3,x2,x3,x2,x1,x2,x1,Num);
	if(Denominator==0)
		return 0;
	aMolecular = Determinant(right1,x3,x2,right2,x2,x1,right3,x1,Num);
	bMolecular = Determinant(x4,right1,x2,x3,right2,x1,x2,right3,Num);
	cMolecular = Determinant(x4,x3,right1,x3,x2,right2,x2,x1,right3);

	*a = aMolecular / Denominator;
	*b = bMolecular / Denominator;
	*c = cMolecular / Denominator;



	
	return 1;

}
//测试
int main()
{
	double x[4] = {3,4,6,9};
	double y[4] = {10,20,33,44};
	double a,b,c;
	Fitting(x,y,4,&a,&b,&c);

	printf("%lf %lf %lf",a,b,c);


	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -