博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法精解:最小二乘法C实现
阅读量:7066 次
发布时间:2019-06-28

本文共 1276 字,大约阅读时间需要 4 分钟。

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

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

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

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 求出相应的值。

接下来写一个例子:

#include 
#include
#include
#include
#define NR(x) sizeof(x)/sizeof(x[0])//最小二乘法实现 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,%lf\n",b0,b1); return 0 ;}
运行结果:

1.000000 ,  3.00000

转载地址:http://feill.baihongyu.com/

你可能感兴趣的文章
CAFFE安装(10):Mnist测试(可不做)
查看>>
7.2.7、数组指针的操作
查看>>
SetProp()、GetProp()、RemoveProp() API接口
查看>>
ES6 module模块
查看>>
content management system
查看>>
缓存穿透 缓存雪崩
查看>>
System.gc
查看>>
最小二乘法多项式曲线拟合原理与实现(转)
查看>>
Java NIO 系列教程(转)
查看>>
socketio
查看>>
Oracle的常见错误及解决办法
查看>>
一花一世界(转)
查看>>
winform 控件部分
查看>>
BZOJ1066 蜥蜴
查看>>
(三)控制浏览器操作
查看>>
进程控制编程
查看>>
Postgresql 数据库,如何进行数据备份以及导入到另外的数据库
查看>>
python之闭包、装饰器
查看>>
实现单例模式的9个方法
查看>>
Java的接口总结
查看>>