公式
![在这里插入图片描述](https://img-blog.csdnimg.cn/99fe19ffb2fd4ff99fa3f362a9259a51.png)
代码实现
#define ARRAY_NUM 10
typedef struct {
float yValue[ARRAY_NUM ];
float xValue[ARRAY_NUM ];
float a;
float b;
float c;
int num;
} Linear_Func_Data;
void linearSquareMethod(Linear_Func_Data *linearArray)
{
int i = 0;
float xSum = 0.0;
float ySum = 0.0;
float x2Sum = 0.0;
float xySum = 0.0;
float dividendTmp = 0.0;
float divisorTmpA = 0.0;
float divisorTmpB = 0.0;
float *x = &linearArray->xValue[0];
float *y = &linearArray->yValue[0];
int n = linearArray->num;
for (i = 0; i < n; i++){
xSum += x[i];
ySum += y[i];
x2Sum += x[i] * x[i];
xySum += x[i] * y[i];
}
dividendTmp = n * x2Sum - xSum * xSum;
divisorTmpA = n * xySum - xSum * ySum;
divisorTmpB = x2Sum * ySum - xSum * xySum;
linearArray->a = divisorTmpA / dividendTmp;
linearArray->b = divisorTmpB / dividendTmp;
}
void quardEquationMethod(Linear_Func_Data *linearArray)
{
int i = 0;
float xSum = 0.0;
float ySum = 0.0;
float x2Sum = 0.0;
float x3Sum = 0.0;
float x4Sum = 0.0;
float xySum = 0.0;
float x2ySum = 0.0;
float dividendTmp = 0.0;
float divisorTmpA = 0.0;
float divisorTmpB = 0.0;
float divisorTmpC = 0.0;
float *x = &linearArray->xValue[0];
float *y = &linearArray->yValue[0];
int n = linearArray->num;
for (i = 0; i < n; i++){
xSum += x[i];
ySum += y[i];
x2Sum += x[i] * x[i];
x3Sum += x[i] * x[i] * x[i];
x4Sum += x[i] * x[i] * x[i] * x[i];
xySum += x[i] * y[i];
}
dividendTmp = n * (x2Sum * x4Sum - s3Sum * s3Sum) - xSum * (xSum * s4Sum -s2Sum * s3Sum);
divisorTmpA = n * (x2Sum * s2ySum - xySum * s3Sum) - xSum * (xSum *s2ySum -ySum * s3Sum) + s2Sum * (xSum *xySum -ySum *s2Sum);
divisorTmpB = n * (xySum * s4Sum -s2ySum * s3Sum) - xSum *(ySum * s4Sum -s2Sum *s2ySum) + s2Sum * (ySum *s3Sum - xySum * s2Sum);
divisorTmpC = ySum * (s2Sum * s4Sum - s3Sum * s3Sum) - xySum * (xSum * s4Sum - s2Sum * s3Sum)
+ x2ySum * (xSum * s3Sum - s2Sum * s2Sum);
linearArray->a = divisorTmpA / dividendTmp;
linearArray->b = divisorTmpB / dividendTmp;
linearArray->c = divisorTmpC / dividendTmp;
}