ocmath_parametric_interpolate_eval

 

Description

Get interpolated data using parametric interpolation. For every dimension of pData call the function ocmath_interpolate to interpolate.

Syntax

int ocmath_parametric_interpolate_eval( const double * pEvalT, double * pEvalData, UINT nEvalSize, const double * pT, const double * pData, UINT nDataSize, UINT nDimension = 2, int nMode = INTERP_TYPE_SPLINE, double dSmoothingFactor = 0, const double * pWeights = NULL, int iOption = OPTION_EXTRAPOLATE )

Parameters

pEvalT
[input]parameter points to be evaluated, if one element is outside of valid range, relative interpolated data will be NANUM
pEvalData
[output]interpolated data, with size nDimension by nEvalSize
nEvalSize
[input] point number to be evaluated, size of pEvalT
pT
[input]parameter data, size of nDataSize
pData
[input]source data, with size nDimension by nDataSize
nDataSize
[input] size of each dimension
nDimension
[input] dimension of source data, nDimension >= 2
nMode
interpolation method. Must be one of the three modes:
INTERP_TYPE_LINEAR(linear interpolation),
INTERP_TYPE_SPLINE(cubic spline interpolation with natural boundary condition),
INTERP_TYPE_BSPLINE(B-Spline curve fitting using method by Dierckx.P)
dSmoothingFactor
[input] This argument specifies the closeness to the original data. It is only useful when nMode = INTERP_TYPE_BSPLINE. dSmoothingFactor >= 0.
By means of this parameter, the user can control the tradeoff between closeness of fit and smoothness of fit of the approximation.
If dSmoothingFactor is too large, the spline will be too smooth and signal will be lost ; if it is too small the spline will pick up too much noise.
In the extreme cases the program will return an interpolating spline if dSmoothingFactor=0 and the weighted least-squares polynomial of degree 3 if s is very large.
pWeights
[input]pointer to weights, which is only used in method INTERP_TYPE_BSPLINE, by default(pWeights = NULL) all weights are 1. size is nDataSize
iOption
[input] specify how to extrapolate Y values in extrapolated range. Must be one of the three values:
OPTION_EXTRAPOLATE(extrapolate Y using the last two points),
OPTION_SET_MISSING(set all Y values in the extrapolated range to be missing values),
OPTION_REPEAT_LAST(use the Y value of the closest input X value for all values in the extrapolated range)

Return

Returns 0 on success, otherwise returns error code in enum Err_Spline.

Examples

EX1

void    ocmath_parametric_interpolate_eval_ex1()
{
    const int nDataSize = 5;
    vector vT(nDataSize);
    matrix mData = {{0, 1, -1, 0, 3},{0, 2, 3, 1, 0}};
    if(OE_NOERROR != ocmath_parametric_interpolate_range(vT, mData, nDataSize))
    {
        out_str("error in calculating range");
        return;
    }
    vector vEvalT;
    vEvalT.Data(vT[0], vT[nDataSize - 1], (vT[nDataSize - 1] - vT[0])/20);
    int nEvalPoints = vEvalT.GetSize();
    matrix mEvalData(2, nEvalPoints);
    if(0 != ocmath_parametric_interpolate_eval(vEvalT, mEvalData, nEvalPoints, vT, mData, nDataSize))
    {
        out_str("error in evaluation");
        return;
    }
    for(int ii = 0; ii < nEvalPoints; ii++)
    {
        printf("%f\t%f\t%f\n", vEvalT[ii], mEvalData[0][ii], mEvalData[1][ii]);
    }
}

Remark

See Also

ocmath_parametric_interpolate_range

header to Include

origin.h

Reference