//
//a0x^2+a1x+a2 = y
//r:相关系数^2
bool Parabola(double* x, double* y, int n, double* a, double* r)
{
const int CURVE_INDEX = 3;
double B[CURVE_INDEX];
double **A =new double*[CURVE_INDEX];
for (int i=0; i<CURVE_INDEX; i++)
{
A[i] = new double[CURVE_INDEX];
}
double sumX=0, sumXX=0, sumXXX=0, sumXXXX=0, sumY=0, sumXY=0, sumXXY=0;
for (int i=0; i<n; i++)
{
sumX += x[i];
sumXX += x[i]*x[i];
sumXXX += x[i]*x[i]*x[i];
sumXXXX += x[i]*x[i]*x[i]*x[i];
sumY += y[i];
sumXY+= x[i]*y[i];
sumXXY += x[i]*x[i]*y[i];
}
A[0][0] = sumXXXX;A[0][1]=sumXXX;A[0][2]=sumXX;
A[1][0] = sumXXX;A[1][1]=sumXX;A[1][2]=sumX;
A[2][0] = sumXX;A[2][1]=sumX;A[2][2]=n;
//
B[0] = sumXXY; B[1] = sumXY; B[2] = sumY;
bool solved = Solve(A, B, a,
基于最小二乘法的C++二次抛物线拟合
最新推荐文章于 2024-07-18 21:01:07 发布
这段代码展示了如何使用C++基于最小二乘法进行二次抛物线拟合。通过计算矩阵A和向量B,解决线性方程组求得参数a,然后计算相关系数r,实现数据点的拟合。
摘要由CSDN通过智能技术生成