最小二乘法拟合一条直线(C语言代码)(3页).doc
-最小二乘法拟合一条直线(C语言代码)-第 3 页最小二乘法拟合一条直线(C语言代码)#include<stdio.h>#define N 9 /N为要拟合的数据的个数 float X9 = 1,1.477,1.778,2,2.176,2.301,2.398,2.477,2.638;float Y9 = 7.55,8.02,8.41,8.64,8.75,8.79,8.81,8.83,8.87;float K=0; /拟合直线的斜率float R=0; /拟合直线的截距float x_sum_average=0; /数组 XN 个元素求和 并求平均值float y_sum_average=0; /数组 YN 个元素求和 并求平均值float x_square_sum=0; /数组 XN 个个元素的平均值float x_multiply_y=0; /数组 XN和YN对应元素的乘机float Squre_sum(float cN) ;float Sum_Average(float dN);float X_Y_By(float mN,float nN);float Squre_sum(float cN);void Line_Fit(void);void Line_Fit(void) x_sum_average= Sum_Average(X); y_sum_average= Sum_Average(Y); x_square_sum = Squre_sum(X); x_multiply_y = X_Y_By(X,Y); K = ( x_multiply_y - N * x_sum_average * y_sum_average)/( x_square_sum - N * x_sum_average*x_sum_average ); R = y_sum_average - K * x_sum_average; printf("K = %fn",K); printf("R = %fn",R);float Sum_Average(float dN)unsigned int i=0;float z=0;for(i=0;i<N;i+) z = z + di;z = z/N;return z;float X_Y_By(float mN,float nN)unsigned int i=0;float z=0;for(i=0;i<N;i+) z = z + mi*ni;return z;float Squre_sum(float cN)unsigned int i=0;float z=0;for(i=0;i<N;i+) z = z + ci*ci;return z;void main(void) Line_Fit();