2.1.11.19 ocmath_polynomial_fit
Contents
Description
Function to Perform polynomail fit on the given X and Y data points. The function will normailize X data first, and then call ocmath_multiple_linear_regression(), which is the main computational engine, and finally correct the variance-covariance matrix.
Syntax
int ocmath_polynomial_fit( int nSize, const double * pX, const double * pY, const double * pWeightIn, int nOrder, const LROptions * psLROptions, FitParameter * psFitParameter, int nSizeFitParams, RegStats * psRegStats = NULL, RegANOVA * psRegANOVA = NULL, double * pCov = NULL, double * pCorr = NULL, double * pH = NULL, int nSizeCovCorr = -1 )
Parameters
- nSize
- [Input] the number of observations, n. n>=2;
- pX
- [Input] vector containing data points of the independent variables, size of pX = nSize;
- pY
- [Input] vector containing data points of dependent variable, size of pY = nSize;
- pWeightIn
- [Input] vector containing weight of the data, all data should be bigger than zero, size of pY = nsize. Can be NULL if no weighting;
- nOrder
- [Input] the polynomial order, nOrder >= 1;
- psLROptions
- [Input] structuure for linear regression options;
- psFitParameter
- [Output] array of structs to receive information on each fitting parameter;
- nSizeFitParams
- [input] size (number of structs) of psFitParameter, must be at least (nOrder+1);
- psRegStats
- [output] Optional, pointer to struct containing Regression statistics;
- psRegANOVA
- [output] Optional, pointer to struct containing ANOVA statistics;
- pCov
- [output] Optional, coriviance matrix of estimate; The size should be (nOrder+1)*(nOrder+1).
- pCorr
- [output] Optional, correlation matrix of estimate, having the same size as pCov.
- pH
- [output] Optional output pointer to diagonal element of H, leverage Size of the pH should be nSize
- nSizeCovCorr
- [input] size of pCov and pCorr, will check this size if pCov or pCorr passed and nSizeCovCorr >= 0 and will return STATS_ERROR_ARRAY_TOO_SMALL if nSizeCovCorr < (nOrder+1)*(nOrder+1)
Return
Returns STATS_NO_ERROR or positive on successful exit and a negative STATS error code on failure.
LARGE_X_NORMALIZED(1): the independent data have large value and small range, so are normalized first.
Error Codes:
STATS_ERROR_ARRAY_TOO_SMALL(-99): nSizeCovCorr < (nOrder+1)*(nOrder+1)
STATS_INPUT_NULL_POINTER(-156): pX and pY must not be empty.
STATS_ERROR_TOO_FEW_DATA_PTS(-165): nSize must not be less than 2
STATS_ERROR_SETTING(-151): nOrder must not be less than 1
STATS_ERROR_SVD_FAIL(-179): The singular value decomposition is failed
STATS_ERROR_RANK_DEFICIENT(-180): The pX is not full rank.
STATS_ERROR_BAD_WEIGHT(-108): Some data of the weight are less than zero
Examples
EX1
void ocmath_polynomial_fit_ex1() { int nOrder; int nRet; //parameters required by stats_polynomial_fit LROptions sLROptions; //LROptionsNANUM(sLROptions); RegStats sRegStats; RegANOVA sRegANOVA; int nSize = 10; vector vX, vY; vX.SetSize(10); vY.SetSize(10); for(int i=0; i<nSize; i++) // Y = X^2 { vX[i] = i+1; vY[i] = (i+1)*(i+1); } double vW[10]; for(i=0; i<nSize; i++) { vW[i] = 1; } sLROptions.Confidence = 0.95; nOrder = 2; double pCov[9], pCorr[9] ; int nParam = (sLROptions.FixIntercept) ? nOrder : nOrder + 1; FitParameter sFitParameter[3]; nRet = ocmath_polynomial_fit(nSize,vX,vY,vW,nOrder,&sLROptions,sFitParameter,nParam,&sRegStats,&sRegANOVA,pCov,pCorr); if (nRet == LARGE_X_NORMALIZED) printf("x data are normalized!\n"); else if (nRet < STATS_NO_ERROR) printf("Error!\n"); }
Remark
See Also
Header to Include
origin.h