Scilab Function
Last update : 24/3/2004

interp2d - bicubic spline (2d) evaluation function

### Calling Sequence

  `[zp[,dzpdx,dzpdy[,d2zpdxx,d2zpdxy,d2zpdyy]]]=interp2d(xp,yp,x,y,C [,out_mode])`

### Parameters

- `xp, yp`: real vectors or matrices of same size
- `x,y,C`: real vectors defining a bicubic spline or sub-spline function (called `s` in the following)
- `out_mode`: (optionnal) string defining the evaluation of `s` outside [x(1),x(nx)]x[y(1),y(ny)]
- `zp`: vector or matrix of same format than `xp` and `yp`, elementwise evaluation of `s` on these points.
- `dzpdx, dzpdy`: vectors (or matrices) of same format than `xp` and `yp`, elementwise evaluation of the first derivatives of `s` on these points.
- `d2zpdxx, d2zpdxy, d2zpdyy`: vectors (or matrices) of same format than `xp` and `yp`, elementwise evaluation of the second derivatives of `s` on these points.

### Description

Given three vectors `(x,y,C)` defining a bicubic spline or sub-spline function (see `splin2d`) this function evaluates s (and ds/dx, ds/dy, d2s/dxx, d2s/dxy, d2s/dyy if needed) at (xp(i),yp(i)) :

          zp(i) = s(xp(i),yp(i))
          dzpdx(i) = ds/dx(xp(i),yp(i))
          dzpdy(i) = ds/dy(xp(i),yp(i))
          d2zpdxx(i) = d2s/dx2(xp(i),yp(i))
          d2zpdxy(i) = d2s/dxdy(xp(i),yp(i))
          d2zpdyy(i) = d2s/dy2(xp(i),yp(i))

The `out_mode` parameter defines the evaluation rule for extrapolation, i.e. for (xp(i),yp(i)) not in [x(1),x(nx)]x[y(1),y(ny)]:

  - "by_zero": an extrapolation by zero is done
  - "by_nan": extrapolation by Nan
  - "C0": the extrapolation is defined as follows :

             s(x,y) = s(proj(x,y)) where proj(x,y) is nearest point
                                   of [x(1),x(nx)]x[y(1),y(ny)] from (x,y)

  - "natural": the extrapolation is done by using the nearest bicubic-patch from (x,y).
  - "periodic": `s` is extended by periodicity.

### Examples

    // see the examples of splin2d

    // this example shows some different extrapolation features
    // interpolation of cos(x)cos(y)
    n = 7;  // a n x n interpolation grid
    x = linspace(0,2*%pi,n); y = x;
    z = cos(x')*cos(y);
    C = splin2d(x, y, z, "periodic");

    // now evaluate on a bigger domain than [0,2pi]x [0,2pi]
    m = 80; // discretisation parameter of the evaluation grid
    xx = linspace(-0.5*%pi,2.5*%pi,m); yy = xx;
    [XX,YY] = ndgrid(xx,yy);
    zz1 = interp2d(XX,YY, x, y, C, "C0");
    zz2 = interp2d(XX,YY, x, y, C, "by_zero");
    zz3 = interp2d(XX,YY, x, y, C, "periodic");
    zz4 = interp2d(XX,YY, x, y, C, "natural");
    xbasc()
    subplot(2,2,1)
      plot3d(xx, yy, zz1, flag=[2 6 4])
      xtitle("extrapolation with the C0 outmode")
    subplot(2,2,2)
      plot3d(xx, yy, zz2, flag=[2 6 4])
      xtitle("extrapolation with the by_zero outmode")
    subplot(2,2,3)
      plot3d(xx, yy, zz3, flag=[2 6 4])
      xtitle("extrapolation with the periodic outmode")
    subplot(2,2,4)
      plot3d(xx, yy, zz4, flag=[2 6 4])
      xtitle("extrapolation with the natural outmode")
    xselect()

### See Also

`splin2d`,

### Author

B. Pincon