Example 3

A spline interpolant s to a function
f(x,y) = x^3y^2
is constructed. Then, the values of the partial derivative
\frac{{\partial ^3 s\left( {x,y} \right)}}{{\partial x^2 2y}}
and the error are computed on a 4 x 4 grid.
using System;
using Imsl.Math;

public class Spline2DInterpolateEx3
{
    
    private static double F(double x, double y)
    {
        return (x * x * x * y * y);
    }
    
    private static double F21(double x, double y)
    {
        return (6.0 * x * 2.0 * y);
    }
    
    public static void  Main(String[] args)
    {
        int nData = 11;
        int 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
        Console.Out.WriteLine("   x        y     F21(x, y)   " 
        + "21InterpDeriv   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.Derivative(x, y, 2, 1);
                Console.Out.WriteLine(x.ToString("0.0000")+"   "
                    +y.ToString("0.0000")+"   "+F21(x,y).ToString("0.0000")
                    +"       "+z.ToString("0.0000")+"     "
                    +Math.Abs(F21(x, y) - z).ToString("0.0000"));
            }
        }
    }
}

Output

   x        y     F21(x, y)   21InterpDeriv   Error
0.3333   0.3333   1.3333       1.3333     0.0000
0.3333   0.6667   2.6667       2.6667     0.0000
0.6667   0.3333   2.6667       2.6667     0.0000
0.6667   0.6667   5.3333       5.3333     0.0000

Link to C# source.