之前没写对,尴尬,于是重新研究了一遍,啊,确实没写对·····大佬帮改了一下·····
首先来看看如何求线性回归方程公式http://www.gaosan.com/gaokao/263926.html
第一:用所给样本求出两个相关变量的(算术)平均值
第二:分别计算分子和分母:(两个公式任选其一)分子
第三:计算b:b=分子/分母
用最小二乘法估计参数b,设服从正态分布,分别求对a、b的偏导数并令它们等于零。
先求x,y的平均值X,Y
再用公式代入求解:
后把x,y的平均数X,Y代入a=Y-bX
求出a并代入总的公式y=bx+a得到线性回归方程
(X为xi的平均数,Y为yi的平均数)
#include <stdio.h>
#include <stdlib.h>
void main() {float x[8] = {300.0 , 400.0 , 400.0 , 550.0 , 720.0 , 850.0 , 900.0 , 950.0};float y[8] = {300.0 , 350.0 , 490.0 , 500.0 , 600.0 , 610.0 , 700.0 , 660.0};int n; n = sizeof(x) / sizeof(x[0]);float a, b, b1, mxy, sum_x, sum_y, lxy, xiSubSqr;a = b = mxy = sum_x = sum_y = lxy = xiSubSqr = 0.0;for (int i = 0; i < n; i++) {sum_x += x[i]; sum_y += y[i];}float x_ave = sum_x / n;float y_ave = sum_y / n;for (int i = 0; i != n; i++){lxy += (x[i] - x_ave) * (y[i] - y_ave);xiSubSqr += (x[i] - x_ave) * (x[i] - x_ave);}b = lxy / xiSubSqr;a = y_ave - b * x_ave;printf("y=%0.2fx+%0.2f\n", b, a);system("pause");
}