Chapter 3: Interpolation and Approximation > radial_evaluate

radial_evaluate

Evaluates a radial-basis fit.

Synopsis

#include <imsl.h>

float *imsl_f_radial_evaluate (int n, float x[], Imsl_d_radial_basis_fit *radial_fit,, 0)

The type double function is imsl_d_evaluate.

Required Arguments

int n   (Input)
The number of points at which the fit will be evaluated.

float x[]   (Input)
Array of size (radial_fit − > dimension) × n containing the abscissae of the data points at which the fit will be evaluated. The argument x[i][j] is the abscissa value of the (i+1)-th data point in the (j+1)-th dimension.

Imsl_f_radial_basis_fit *radial_fit   (Input)
A pointer to radial-basis structure to be used for the evaluation.   (Input).

Return Value

A pointer to an array of length n containing the values of the radial-basis fit at the desired values. If no value can be computed, then NULL is returned. To release this space, use imsl_free.

Synopsis with Optional Arguments

#include <imsl.h>

float *imsl_f_radial_evaluate (int n, float x[], Imsl_f_radial_basis_fit *radial_fit

IMSL_RETURN_USER, float value[],

0)

Optional Arguments

IMSL_RETURN_USER, float value[]   (Input)
A user-allocated array of length n containing the returned values.

Description

The function imsl_f_radial_evaluate evaluates a radial-basis fit from data generated by imsl_f_radial_scattered_fit.

Example

#include <imsl.h>

#include <math.h>

 

#define NDATA          10

#define NUM_CENTERS    5

#define NOISE_SIZE     0.25

#define F(x)           ((float)(sin(2*pi*x)))

 

int main ()

{

    int        i;

    int        dim = 1;

    float      fdata[NDATA];

    float      *fdata2;

    float      xdata[NDATA];

    float      xdata2[2*NDATA];

    float      pi;

    float      *noise;

    Imsl_f_radial_basis_fit   *radial_fit;

 

    pi = imsl_f_constant ("pi", 0);

 

    imsl_random_seed_set (234579);

    noise = imsl_f_random_uniform(NDATA, 0);

 

/* Set up the sampled data points with noise */

 

    for (i = 0; i <  NDATA; ++i) {

       xdata[i] = (float)(i)/(float)(NDATA-1);

       fdata[i] = F(xdata[i]) + NOISE_SIZE*(1.0 - 2.0*noise[i]);

    }

/* Compute the radial fit */

 

    radial_fit = imsl_f_radial_scattered_fit (dim, NDATA, xdata,

                 fdata, NUM_CENTERS, 0);

   

/* Compare result to the original function at twice as many values as there

   were original data points */

 

    for (i = 0; i < 2*NDATA; ++i)

        xdata2[i] = (float)(i/(float)(2*(NDATA-1)));

 

/* Evaluate the fit at these new points */

   

    fdata2 = imsl_f_radial_evaluate(2*NDATA, xdata2, radial_fit, 0);

 

    printf("    I     TRUE       APPROX     ERROR\n");

    for (i = 0; i < 2*NDATA; ++i)

    printf("%5d %10.5f %10.5f %10.5f\n",i+1,F(xdata2[i]), fdata2[i],

            F(xdata2[i])-fdata2[i]);

  }

Output

 I     TRUE       APPROX     ERROR

 1    0.00000   -0.08980    0.08980

 2    0.34202    0.38795   -0.04593

 3    0.64279    0.75470   -0.11191

 4    0.86603    0.99915   -0.13312

 5    0.98481    1.11597   -0.13116

 6    0.98481    1.10692   -0.12211

 7    0.86603    0.98183   -0.11580

 8    0.64279    0.75826   -0.11547

 9    0.34202    0.46078   -0.11876

10   -0.00000    0.11996   -0.11996

11   -0.34202   -0.23007   -0.11195

12   -0.64279   -0.55348   -0.08931

13   -0.86603   -0.81624   -0.04979

14   -0.98481   -0.98752    0.00271

15   -0.98481   -1.04276    0.05795

16   -0.86603   -0.96471    0.09868

17   -0.64279   -0.74472    0.10193

18   -0.34202   -0.38203    0.04001

19    0.00000    0.11600   -0.11600

20    0.34202    0.73553   -0.39351

 


RW_logo.jpg
Contact Support