2.1.17.5.2 ocmath_1d_spline_deriv


Description

Evaluates a cubic spline and its first three derivatives from its B-spline representation.

Syntax

int ocmath_1d_spline_deriv( OCMATH_DERIVTYPE derivs, double dX, double * pDeriv, ocmath_Spline * spline )

Parameters

derivs
[input]if derivs = DERIVTYPE_LEFTDERIVS, calculates right derivatives or right limiting values;if derivs = DERIVTYPE_RIGHTDERIVS, calculates left derivatives or left limiting values
dX
[input]the variable x, its derivatives are to be evaluated
pDeriv
[output]pointer to the derivative.
pDeriv[j] is the jth derivative of the spline at the argument dX, for j = 0,1,2,3.
spline
[input] pointer to the structure ocmath_Spline, usually returned by function ocmath_1d_spline_fit

Return

NE_NOERROR (code 0) --- success

NE_INT_ARG_LT (error code 11) --- spline->n < 8

NE_BAD_PARAM (error code 70) --- value of derivs is invalid

NE_SPLINE_RANGE_INVALID (error code 278) --- spline->lamda[3] >= spline->lamda[spline->n - 4]

NE_ABSCI_OUTSIDE_KNOT_INTVL (error code 247) --- dX not satisfy spline->lamda[3] <= dX <= spline->lamda[spline->n - 4]

Examples

EX1

//Compute, at the 7 arguments x = 0, 1, 2, 3, 4, 5, 6, the left- and right-hand values
//and first 3 derivatives of the cubic spline defined over the interval 0 ?? x ?? 6 having
//the 6 interior knots x = 1, 3, 3, 3, 4, 4, the 8 additional knots 0, 0, 0, 0, 6, 6, 6, 6, 
//and the 10 B-spline coefficients 10, 12, 13, 15, 22, 26, 24, 18, 14, 12.

//The example program is written in a general form that will enable the values and derivatives of a
//cubic spline having an arbitrary number of knots to be evaluated at a set of arbitrary points. Any
//number of data sets may be supplied.
void    ocmath_1d_spline_deriv_ex1()
{
    int i, j, l, m, ncap, ncap7;
    double s[4];
    double lamd[14] = {0.0, 0.0, 0.0, 0.0, 1.0, 3.0, 3.0, 3.0, 4.0, 4.0, 6.0, 6.0, 6.0, 6.0};
    double c1[14] = {10.0, 12.0, 13.0, 15.0, 22.0, 26.0, 24.0, 18.0, 14.0, 12.0};
    double x[7] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
    ocmath_Spline spline;
    OCMATH_DERIVTYPE derivs;

    printf("Example Program Results\n");
    ncap = 7;
    m = 7;
    ncap7 = ncap+7;
       spline.n = ncap7;
    spline.lamda = lamd;
    spline.c = c1;

    for( i = 0; i < 11; i++)
        printf("%f    ",spline.lamda[i]);

    printf(" x Spline 1st deriv 2nd deriv 3rd deriv");
    for (i= 0; i< m; i++)
    {
        derivs = DERIVTYPE_LEFTDERIVS;
        for (j=1; j<=2; j++)
        {
             ocmath_1d_spline_deriv(derivs, x[i], s, &spline);

             if(derivs ==DERIVTYPE_LEFTDERIVS)
            {
                printf("\n\n%11.4f Left",x[i]);
                for (l=0; l<4; l++)
                    printf("%11.4f",s[l]);
            }
            else
            {
                printf("\n%11.4f Right",x[i]);
                for (l=0; l<4; l++)
                    printf("%11.4f",s[l]);
            }
            derivs = DERIVTYPE_RIGHTDERIVS;
        }
    }
}

Remark

See Also

Header to Include

origin.h

Reference

nag_1d_spline_deriv (e02bcc)nag_1d_spline_deriv (e02bcc), NAG Manual