最小二乘法及其c++实现
2014-05-06 19:18
162 查看
设经验方程是y=F(x),方程中含有一些待定系数an,给出真实值{(xi,yi)|i=1,2,...n},将这些x,y值代入方程然后作差,可以描述误差:yi-F(xi),为了考虑整体的误差,可以取平方和,之所以要平方是考虑到误差可正可负直接相加可以相互抵消,所以记误差为:
e=∑(yi-F(xi))2
如果经验方程是线性的,形如y=ax+b,就是线性回归。按上面的分析,误差函数为:
e=∑(yi-axi-b)2
各偏导为:
de/da=2∑((yi-axi-b)(-xi)=0
de/db=-2∑(yi-axi-b)=0
于是得到关于a,b的线性方程组:
(∑xi2)a+(∑xi)b=∑yixi
(∑xi)a+nb=∑yi
设A=∑xi2,B=∑xi,C=∑yixi,D=∑yi,则方程化为:
Aa+Bb=C
Ba+nb=D
解出a,b得:
a=(Cn-BD)/(An-BB)b=(AD-CB)/(An-BB)
这就是我们要进行的算法。
void Min2Method(float &b_interrupt,float &k_slope,int X[],int Y[],int nCount)
{
//b_interrupt截距,k_slope斜率,nCount点数
int i;
float SumX, SumY, SumXY, SumX2;
SumX=0;
SumX2=0;
for(i=0;i<nCount;i++)
{
SumX+=X[i];
SumX2+=(X[i]*X[i]);
}
SumY=0;
for(i=0;i<nCount;i++)
{
SumY+=Y[i];
}
SumXY=0;
for(i=0;i<nCount;i++)
{
SumXY+=(X[i]*Y[i]);
}
b_interrupt=((SumX2*SumY-SumX*SumXY)/(nCount*SumX2-SumX*SumX));
k_slope=((nCount*SumXY-SumX*SumY)/(nCount*SumX2-SumX*SumX));
}
e=∑(yi-F(xi))2
如果经验方程是线性的,形如y=ax+b,就是线性回归。按上面的分析,误差函数为:
e=∑(yi-axi-b)2
各偏导为:
de/da=2∑((yi-axi-b)(-xi)=0
de/db=-2∑(yi-axi-b)=0
于是得到关于a,b的线性方程组:
(∑xi2)a+(∑xi)b=∑yixi
(∑xi)a+nb=∑yi
设A=∑xi2,B=∑xi,C=∑yixi,D=∑yi,则方程化为:
Aa+Bb=C
Ba+nb=D
解出a,b得:
a=(Cn-BD)/(An-BB)b=(AD-CB)/(An-BB)
这就是我们要进行的算法。
void Min2Method(float &b_interrupt,float &k_slope,int X[],int Y[],int nCount)
{
//b_interrupt截距,k_slope斜率,nCount点数
int i;
float SumX, SumY, SumXY, SumX2;
SumX=0;
SumX2=0;
for(i=0;i<nCount;i++)
{
SumX+=X[i];
SumX2+=(X[i]*X[i]);
}
SumY=0;
for(i=0;i<nCount;i++)
{
SumY+=Y[i];
}
SumXY=0;
for(i=0;i<nCount;i++)
{
SumXY+=(X[i]*Y[i]);
}
b_interrupt=((SumX2*SumY-SumX*SumXY)/(nCount*SumX2-SumX*SumX));
k_slope=((nCount*SumXY-SumX*SumY)/(nCount*SumX2-SumX*SumX));
}
相关文章推荐
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 最小二乘法及其c++的实现
- 一元线性回归模型与最小二乘法及其C++实现
- 一元线性回归模型与最小二乘法及其C++实现
- 【代码】C++实现广义表及其测试用例
- 全排列算法及其C++实现
- 数据结构——栈——C++实现栈及其操作
- C++跨平台GUI库及其实现
- 卡尔曼滤波简介及其算法实现代码(C++/C/MATLAB)
- 内存管理:算法及其c/c++实现 翻译一
- Windows平台下C++插件系统实现的几个关键技术问题及其解决思路
- 单例模式(Singleton)及其C++实现
- 栈的C++实现及其应用
- C++智能指针及其简单实现
- 数据结构——队列——C++实现队列及其操作