radial_evaluate

Evaluates a radial-basis fit.

Synopsis

#include <imsl.h>

float *imsl_f_radial_evaluate (int n, float x[], Imsl_f_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