There are three multi-dimensional interpolation functions in Octave, with similar capabilities. Methods using Delaunay tessellation are described in Interpolation on Scattered Data.

- :
`zi`=**interp2**`(`

¶`x`,`y`,`z`,`xi`,`yi`) - :
`zi`=**interp2**`(`

¶`z`,`xi`,`yi`) - :
`zi`=**interp2**`(`

¶`z`,`n`) - :
`zi`=**interp2**`(`

¶`z`) - :
`zi`=**interp2**`(…,`

¶`method`) - :
`zi`=**interp2**`(…,`

¶`method`,`extrap`) -
Two-dimensional interpolation.

Interpolate reference data

`x`,`y`,`z`to determine`zi`at the coordinates`xi`,`yi`. The reference data`x`,`y`can be matrices, as returned by`meshgrid`

, in which case the sizes of`x`,`y`, and`z`must be equal. If`x`,`y`are vectors describing a grid then`length (`

and`x`) == columns (`z`)`length (`

. In either case the input data must be strictly monotonic.`y`) == rows (`z`)If called without

`x`,`y`, and just a single reference data matrix`z`, the 2-D region

is assumed. This saves memory if the grid is regular and the distance between points is not important.`x`= 1:columns (`z`),`y`= 1:rows (`z`)If called with a single reference data matrix

`z`and a refinement value`n`, then perform interpolation over a grid where each original interval has been recursively subdivided`n`times. This results in`2^`

additional points for every interval in the original grid. If`n`-1`n`is omitted a value of 1 is used. As an example, the interval [0,1] with

results in a refined interval with points at [0, 1/4, 1/2, 3/4, 1].`n`==2The interpolation

`method`is one of:`"nearest"`

Return the nearest neighbor.

`"linear"`

(default)Linear interpolation from nearest neighbors.

`"pchip"`

Piecewise cubic Hermite interpolating polynomial—shape-preserving interpolation with smooth first derivative.

`"cubic"`

Cubic interpolation using a convolution kernel function—third order method with smooth first derivative.

`"spline"`

Cubic spline interpolation—smooth first and second derivatives throughout the curve.

`extrap`is a scalar number. It replaces values beyond the endpoints with`extrap`. Note that if`extrap`is used,`method`must be specified as well. If`extrap`is omitted and the`method`is`"spline"`

, then the extrapolated values of the`"spline"`

are used. Otherwise the default`extrap`value for any other`method`is`"NA"`

.

- :
`vi`=**interp3**`(`

¶`x`,`y`,`z`,`v`,`xi`,`yi`,`zi`) - :
`vi`=**interp3**`(`

¶`v`,`xi`,`yi`,`zi`) - :
`vi`=**interp3**`(`

¶`v`,`n`) - :
`vi`=**interp3**`(`

¶`v`) - :
`vi`=**interp3**`(…,`

¶`method`) - :
`vi`=**interp3**`(…,`

¶`method`,`extrapval`) -
Three-dimensional interpolation.

Interpolate reference data

`x`,`y`,`z`,`v`to determine`vi`at the coordinates`xi`,`yi`,`zi`. The reference data`x`,`y`,`z`can be matrices, as returned by`meshgrid`

, in which case the sizes of`x`,`y`,`z`, and`v`must be equal. If`x`,`y`,`z`are vectors describing a cubic grid then`length (`

,`x`) == columns (`v`)`length (`

, and`y`) == rows (`v`)`length (`

. In either case the input data must be strictly monotonic.`z`) == size (`v`, 3)If called without

`x`,`y`,`z`, and just a single reference data matrix`v`, the 3-D region

is assumed. This saves memory if the grid is regular and the distance between points is not important.`x`= 1:columns (`v`),`y`= 1:rows (`v`),`z`= 1:size (`v`, 3)If called with a single reference data matrix

`v`and a refinement value`n`, then perform interpolation over a 3-D grid where each original interval has been recursively subdivided`n`times. This results in`2^`

additional points for every interval in the original grid. If`n`-1`n`is omitted a value of 1 is used. As an example, the interval [0,1] with

results in a refined interval with points at [0, 1/4, 1/2, 3/4, 1].`n`==2The interpolation

`method`is one of:`"nearest"`

Return the nearest neighbor.

`"linear"`

(default)Linear interpolation from nearest neighbors.

`"cubic"`

Piecewise cubic Hermite interpolating polynomial—shape-preserving interpolation with smooth first derivative (not implemented yet).

`"spline"`

Cubic spline interpolation—smooth first and second derivatives throughout the curve.

`extrapval`is a scalar number. It replaces values beyond the endpoints with`extrapval`. Note that if`extrapval`is used,`method`must be specified as well. If`extrapval`is omitted and the`method`is`"spline"`

, then the extrapolated values of the`"spline"`

are used. Otherwise the default`extrapval`value for any other`method`is`"NA"`

.

- :
`vi`=**interpn**`(`

¶`x1`,`x2`, …,`v`,`y1`,`y2`, …) - :
`vi`=**interpn**`(`

¶`v`,`y1`,`y2`, …) - :
`vi`=**interpn**`(`

¶`v`,`m`) - :
`vi`=**interpn**`(`

¶`v`) - :
`vi`=**interpn**`(…,`

¶`method`) - :
`vi`=**interpn**`(…,`

¶`method`,`extrapval`) -
Perform

`n`-dimensional interpolation, where`n`is at least two.Each element of the

`n`-dimensional array`v`represents a value at a location given by the parameters`x1`,`x2`, …,`xn`. The parameters`x1`,`x2`, …,`xn`are either`n`-dimensional arrays of the same size as the array`v`in the`"ndgrid"`

format or vectors.The parameters

`y1`,`y2`, …,`yn`represent the points at which the array`vi`is interpolated. They can be vectors of the same length and orientation in which case they are interpreted as coordinates of scattered points. If they are vectors of differing orientation or length, they are used to form a grid in`"ndgrid"`

format. They can also be`n`-dimensional arrays of equal size.If

`x1`, …,`xn`are omitted, they are assumed to be`x1 = 1 : size (`

, etc. If`v`, 1)`m`is specified, then the interpolation adds a point half way between each of the interpolation points. This process is performed`m`times. If only`v`is specified, then`m`is assumed to be`1`

.The interpolation

`method`is one of:`"nearest"`

Return the nearest neighbor.

`"linear"`

(default)Linear interpolation from nearest neighbors.

`"pchip"`

Piecewise cubic Hermite interpolating polynomial—shape-preserving interpolation with smooth first derivative (not implemented yet).

`"cubic"`

Cubic interpolation (same as

`"pchip"`

[not implemented yet]).`"spline"`

Cubic spline interpolation—smooth first and second derivatives throughout the curve.

The default method is

`"linear"`

.`extrapval`is a scalar number. It replaces values beyond the endpoints with`extrapval`. Note that if`extrapval`is used,`method`must be specified as well. If`extrapval`is omitted and the`method`is`"spline"`

, then the extrapolated values of the`"spline"`

are used. Otherwise the default`extrapval`value for any other`method`is`NA`

.

A significant difference between `interpn`

and the other two
multi-dimensional interpolation functions is the fashion in which the
dimensions are treated. For `interp2`

and `interp3`

, the y-axis is
considered to be the columns of the matrix, whereas the x-axis corresponds to
the rows of the array. As Octave indexes arrays in column major order, the
first dimension of any array is the columns, and so `interpn`

effectively
reverses the ’x’ and ’y’ dimensions. Consider the example,

x = y = z = -1:1; f = @(x,y,z) x.^2 - y - z.^2; [xx, yy, zz] = meshgrid (x, y, z); v = f (xx,yy,zz); xi = yi = zi = -1:0.1:1; [xxi, yyi, zzi] = meshgrid (xi, yi, zi); vi = interp3 (x, y, z, v, xxi, yyi, zzi, "spline"); [xxi, yyi, zzi] = ndgrid (xi, yi, zi); vi2 = interpn (x, y, z, v, xxi, yyi, zzi, "spline"); mesh (zi, yi, squeeze (vi2(1,:,:)));

where `vi`

and `vi2`

are identical. The reversal of the
dimensions is treated in the `meshgrid`

and `ndgrid`

functions
respectively.
The result of this code can be seen in Figure 29.4.