Example: The cubic spline interpolant to noisy data with supplied weights

A cubic spline interpolant to noisy data is computed using supplied weights and smoothing parameter. The value of the spline at point 0.3010 is printed.

import com.imsl.math.*;
import com.imsl.stat.*;

public class CsSmoothC2Ex1 {

    public static void main(String args[]) {
        //	Set up a grid
        int n = 300;
        double x[] = new double[n];
        double y[] = new double[n];
        for (int k = 0; k < n; k++) {
            x[k] = 3. * ((double) (k) / (double) (n - 1));
            y[k] = 1. / (.1 + Math.pow(3. * (x[k] - 1.), 4));
        }

        //	Seed the random number generator
        Random rn = new Random();
        rn.setSeed(1234579);
        rn.setMultiplier(16807);

        //	Contaminate the data
        for (int i = 0; i < n; i++) {
            y[i] = y[i] + 2. * rn.nextFloat() - 1.;
        }

        //	Set the weights
        double sdev = 1. / Math.sqrt(3.);
        double weights[] = new double[n];
        for (int i = 0; i < n; i++) {
            weights[i] = sdev;
        }

        //	Set the smoothing parameter
        double smpar = (double) n;

        //	Smooth the data
        CsSmoothC2 cs = new CsSmoothC2(x, y, weights, smpar);
        double csv = cs.value(0.3010);
        System.out.println("The computed cubic spline value at point .3010 is "
                + csv);
    }
}

Output

The computed cubic spline value at point .3010 is 0.06458434076780883
Link to Java source.