double sum_1(int *p, int m)//求和
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += *(p + i);
}
return sum;
}
double sum_2(int *p, int m)//求平方和
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += (*(p + i))*(*(p + i));
}
return sum;
}
double sum_3(int *p, int m)//求立方和
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += pow(*(p + i), );
}
return sum;
}
double sum_4(int *p, int m)//求四次方和
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += pow(*(p + i), );
}
return sum;
}
double sum_5(int *p, int*q, int m)//求乘積和xy
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += (*(p + i))*(*(q + i));
}
return sum;
}
double sum_6(int *p, int*q, int m)//求乘積和x2y
{
int i;
double sum = ;
for (i = ; i < m; i++)
{
sum += (*(p + i))*(*(p + i))*(*(q + i));
}
return sum;
}
p1[0],p1[1]一階拟合系數
p2[0],p2[1],p2[2]二階拟合系數
sum_x = sum_1(x, x_length);
sum_y = sum_1(data_r, x_length);
sum_x2 = sum_2(x, x_length);
sum_x3 = sum_3(x, x_length);
sum_x4 = sum_4(x, x_length);
sum_xy = sum_5(x, data_r, x_length);
sum_x2y = sum_6(x, data_r, x_length);
//一階拟合
p1[] = (sum_y*sum_x2 - sum_xy*sum_x) / (x_length*sum_x2 - sum_x*sum_x);
p1[] = (x_length*sum_xy - sum_x*sum_y) / (x_length*sum_x2 - sum_x*sum_x);
//二階拟合
double k1 = sum_x / x_length;
double k2 = sum_x2 / x_length;
double k3 = (sum_x3 - k2*sum_x) / (sum_x2 - k1*sum_x);
p2[] = (sum_x2y - k2*sum_y - k3*(sum_xy - k1*sum_y)) / ((sum_x4 - k2*sum_x2) - k3*(sum_x3 - k1*sum_x2));
p2[] = (sum_xy - k1*sum_y - (sum_x3 - k1*sum_x2)*p2[]) / (sum_x2 - k1*sum_x);
p2[] = (sum_y - sum_x2*p2[] - sum_x*p2[]) / x_length;