加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

算法精解:最小二乘法C实现

发布时间:2020-12-13 21:13:25 所属栏目:PHP教程 来源:网络整理
导读:计量经济学研究的直接目的是肯定 整体回归函数 Yi=B1+B2Xi+ui,但是能够得到的只是来自整体的若干样本的观测值,要用样本信息建立的 样本回归函数 尽量“接近”地去估计整体回归函数。为此,可以以从不同的角度去肯定建立样本回归函数的准则,也就有了估计 回

计量经济学研究的直接目的是肯定整体回归函数Yi=B1+B2Xi+ui,但是能够得到的只是来自整体的若干样本的观测值,要用样本信息建立的样本回归函数尽量“接近”地去估计整体回归函数。为此,可以以从不同的角度去肯定建立样本回归函数的准则,也就有了估计回归模型参数的多种方法。

最小2乘估计法用来肯定函数y(x) = b1x + b0 中b1和b0的估计值。

y(x)是n个点(x0,y0),... (Xn⑴,Yn⑴)的最好拟合线。

b1 = (n * sigma(Xi * Yi) - singma(Xi)*singma(Yi) ) / (n*singma(pow(Xi)) - pow((singma(Xi))) ;

b0 = (sigma(Yi) - b1 * singma(Xi)) / n ; 

将值b0和b1求出后可代入y(x) = b1 + b0 求出相应的值。

接下来写1个例子:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define NR(x) sizeof(x)/sizeof(x[0]) //最小2乘法实现 void lsqe(const double *x,const double *y,int n,double *b1,double *b0) { int i; double sumx,sumy,sumx2,sumxy; sumx = 0.0; sumy = 0.0; sumx2 = 0.0; sumxy = 0.0; //计算N次 for (i = 0; i < n; i++) { //将横坐标方向的x值进行累加 sumx = sumx + x[i]; //将纵坐标方向的y值进行累加 sumy = sumy + y[i]; sumx2 = sumx2 + pow(x[i],2.0); sumxy = sumxy + (x[i] * y[i]); } //根据公式求解b1和b0的值 *b1 = (sumxy - ((sumx * sumy)/(double)n)) / (sumx2-(pow(sumx,2.0)/(double)n)); *b0 = (sumy - ((*b1) * sumx)) / (double)n; return; } int main(void) { double x[] = {1.1,1.2,1.3,1.4,1.5,1.6} ; double y[] = {4.1,4.2,4.3,4.4,4.5,4.6} ; double b0,b1 ; lsqe(x,y,NR(x),&b0,&b1); printf("%lf,%lfn",b0,b1); return 0 ; }
运行结果:

1.000000, 3.00000

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读