最小二乗法とそのc++実現

983 ワード

経験方程式を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)=0de/db=-2∑(yi-axi-b)=0
そこでa,bに関する線形方程式群を得た.
(∑xi2)a+(∑xi)b=∑yixi
      (∑xi)a+nb=∑yi
A=Σxi 2,B=Σxi,C=Σyixi,D=Σyiとすると、方程式は次のようになる.
Aa+Bb=CBa+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