ocmath_polynomial_fit

 

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

Reference