void LinearFitting(void* pIn_Fifo,unsigned StartP,unsigned EndP,float* K,float* B)
{
//========================最小二乘法=============================
//y = ax + b
//
//a = (m * S(xi*yi) - S(xi) * S(yi)) /(m * S(xi)^2 - S(xi) * S(xi))
//
//--- 2为次方,i = 1 ~ m
//
//=======================================================================
unsigned char* puch;
unsigned short int* pu16;
int i;
int j;
float Zxi;
float Zyi;
float Zxiyi;
float Zxi2;
float xi;
float yi;
__GENERAL_FIFO* pFifo;
pFifo =(__GENERAL_FIFO*)pIn_Fifo;
Zxi = 0;
Zyi = 0;
Zxiyi = 0;
Zxi2 = 0;
for(i = StartP,j = 0;i <= EndP;i++,j++)
{
puch = G_Fifo_At(pFifo,i);
pu16 = (unsigned short int*)puch;
xi = j;
yi = *pu16;
Zxi += xi;
Zyi += yi;
Zxiyi += (xi * yi);
Zxi2 += (xi * xi);
}
*K = (j * Zxiyi - Zxi * Zyi)/(j * Zxi2 - Zxi * Zxi);
*B = (Zyi - *K * Zxi)/j;
}
最小二乘法
最新推荐文章于 2024-07-28 08:40:13 发布