Example 4

This example integrates a two-dimensional, tensor-product spline over the rectangle [0, x] by [0, y].

import java.text.*;
import com.imsl.math.*;

public class Spline2DInterpolateEx4 {

    // Define function
    private static double F(double x, double y) {
        return (x * x * x + y * y);
    }

    // The integral of F from 0 to x and 0 to y
    private static double FI(double x, double y) {
        return (y * x * x * x * x / 4.0 + x * y * y * y / 3.0);
    }

    public static void main(String args[]) {
        int nData = 11, outData = 2;
        double[][] fData = new double[nData][nData];
        double[] xData = new double[nData];
        double[] yData = new double[nData];
        double x, y, z;

        // Set up grid
        for (int i = 0; i < nData; i++) {
            xData[i] = yData[i] = (double) i / ((double) (nData - 1));
        }

        for (int i = 0; i < nData; i++) {
            for (int j = 0; j < nData; j++) {
                fData[i][j] = F(xData[i], yData[j]);
            }
        }

        // Compute tensor-product interpolant
        Spline2DInterpolate spline
                = new Spline2DInterpolate(xData, yData, fData);

        // Print results
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMaximumFractionDigits(4);
        nf.setMinimumFractionDigits(4);

        System.out.println("   x       y     FI(x, y)  Integral   Error");
        for (int i = 0; i < outData; i++) {
            x = (double) (1 + i) / (double) (outData + 1);
            for (int j = 0; j < outData; j++) {
                y = (double) (1 + j) / (double) (outData + 1);
                z = spline.integral(0.0, x, 0.0, y);
                System.out.println(nf.format(x) + "  " + nf.format(y)
                        + "    " + nf.format(FI(x, y)) + "    "
                        + nf.format(z) + "    "
                        + nf.format(Math.abs(FI(x, y) - z)));
            }
        }
    }
}

Output

   x       y     FI(x, y)  Integral   Error
0.3333  0.3333    0.0051    0.0051    0.0000
0.3333  0.6667    0.0350    0.0350    0.0000
0.6667  0.3333    0.0247    0.0247    0.0000
0.6667  0.6667    0.0988    0.0988    0.0000
Link to Java source.