《最小二乘法直线拟合》由会员分享,可在线阅读,更多相关《最小二乘法直线拟合(3页珍藏版)》请在金锄头文库上搜索。
1、设经验方程是y=F(x),方程中含有一些待定系数an,给出真实值(xi,yi)|i=1,2,n,将这些x,y值代入方程然后作差,可以描述误差:yi-F(xi),为了考虑整体的误差,可以取平方和,之所以要平方是考虑到误差可正可负直接相加可以相互抵消,所以记误差为:e=(yi-F(Xi)2如果经验方程是线性的,形如y=ax+b,就是线性回归。按上面的分析,误差函数为:e=(y-aXj-b)2各偏导为:de/da=2(yy-axi-b)(-xi)=0de/db=-2(y-axb)=O于是得到关于a,b的线性方程组:(2)a+(x)b=yyxi(x)a+nb=y设a=x2,B=x,C=yyxi,D=y
2、,则方程化为:Aa+Bb=CBa+nb=D解出a,b得:a=(Cn-BD)/(An-BB)b=(AD-CB)/(An-BB)这就是我们要进行的算法。C+代码如下:1. #includeiostream2.3.voidMin2Method(double&xyTopX,double&xyTopY,intX,intY,intnCount)4. /5. /功能描述:利用最小二乘法求斜/6./xyTopX-截/7./xyTopY-斜率8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.3
3、7.38.39.40.41.42.43.44.45.46./nCount-点数/inti;doubleSumX,SumY,SumXY,SumX2;SumX=0;SumX2=0;for(i=0;inCount;i+)SumX+=Xi;SumX2+=(Xi*Xi);SumY=0;for(i=0;inCount;i+)SumY+=Yi;SumXY=0;for(i=0;inCount;i+)SumXY+=(Xi*Yi);xyTopX=(SumX2*SumY-SumX*SumXY)/(nCount*SumX2-SumX*SumX);xyTopY=(nCount*SumXY-SumX*SumY)/(nCount*SumX2-SumX*SumX);intmain()doublexyTopX=0;doublexyTopY=0;intnCount=10;intx=1,2,3,4,5,6,7,8,9,10;inty=1,2,3,4,5,6,7,8,9,10;Min2Method(xyTopX,xyTopY,x,y,nCount);std:coutxyTopXxyTopXstd:endl;std:coutxyTopYxyTopYstd:endl;system(pause);