最小二乘法直线拟合

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

//最小二乘法直线拟合

BOOL CalculateLineKB(CFoldPointList *m_FoldList,double &k,double &b)

{

//最小二乘法直线拟合

//m_FoldList为关键点(x,y)的链表

//拟合直线方程(Y=kX+b)

if(m_FoldList==NULL)return FALSE;

long lCount=m_FoldList->GetCount();

if(lCount<2)return FALSE;

CFoldPoint *pFold;

double mX,mY,mXX,mXY,n;

mX=mY=mXX=mXY=0;

n=lCount;

POSITION pos=m_FoldList->GetHeadPosition();

while(pos != NULL)

{

pFold=m_FoldList->GetNext(pos);

mX+=pFold->X;

mY+=pFold->Y;

mXX+=pFold->X*pFold->X;

mXY+=pFold->X*pFold->Y;

}

if(mX*mX-mXX*n==0)return FALSE;

k=(mY*mX-mXY*n)/(mX*mX-mXX*n);

b=(mY-mX*k)/n;

return TRUE;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航