/******************** (C) COPYRIGHT 2020 VIVO************************************
* File Name          : pdr_linearFit.h
* Department         : Sensor Algorithm Team
* Current Version    : V2.0(compare QCOM SAP 5.0)
* Author             : yuanlin_rjyb@vivo.com & zhanli@vivo.com
* Date of Issued     : 2020.7.4
* Comments           : PDR 线性拟合相关函数支持
********************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif

#ifndef _PDR_LINEAR_FIT_H_
#define _PDR_LINEAR_FIT_H_

/**----------------------------------------------------------------------
* Function    : pdr_linearLeastSquaresFitting
* Description : 线性最小二乘拟合 Y = c0 + c1 x
				目标函数为sum| nDataY - (a*nDataX+b)|^2最小
* Date        : 2020/7/4 zhanli@vivo.com
*---------------------------------------------------------------------**/
int linearLeastSquaresFit(const double *nDataX, const double *nDataY, 
	const int nLength, double *a, double *b);

/**************************************************************************
* Description : 二维坐标系点的线性拟合，ax+by+c=0, 目标函数为点到拟合直线的距离
                平方和最小
* Input       : x， y，二维坐标X和Y
				num, 二维点个数
* Output      : para， 拟合直线参数, para[0]:a, para[0]:b, para[0]:c
**************************************************************************/
int leastDistanceLinearFit(double x[], double y[], int num, double para[]);


/**----------------------------------------------------------------------
* Function    : gsl_fit_linear
* Description : Fit the data (x_i, y_i) to the linear relationship
				Y = c0 + c1 x
				returning,
				c0, c1  --  coefficients
				cov00, cov01, cov11  --  variance-covariance matrix of
				c0 and c1,
				sumsq   --   sum of squares of residuals
				This fit can be used in the case where the errors for
				the data are uknown, but assumed equal for all points.
				The resulting variance-covariance matrix estimates the
				error in the coefficientsfrom the observed variance of
				the points around the best fit line.
* Date        :
*---------------------------------------------------------------------**/
static int gslFitLinear(const double* x, const size_t xstride,
	const double* y, const size_t ystride,
	const size_t n,
	double* c0, double* c1,
	double* cov_00, double* cov_01, double* cov_11, double* sumsq);


#endif // !_LINEAR_FITTING_H_

#ifdef __cplusplus
}
#endif