Interpolation for 1D, 2D, 3D, and ND gridded datain ndgrid format
collapse all in page
Syntax
Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)
Vq = interpn(V,Xq1,Xq2,...,Xqn)
Vq = interpn(V)
Vq = interpn(V,k)
Vq = interpn(___,method)
Vq = interpn(___,method,extrapval)
Description
example
Vq = interpn(X1,X2,...,Xn,V,Xq1,Xq2,...,Xqn)
returnsinterpolated values of a function of n variablesat specific query points using linear interpolation. The results alwayspass through the original sampling of the function. X1,X2,...,Xn
containthe coordinates of the sample points. V
containsthe corresponding function values at each sample point. Xq1,Xq2,...,Xqn
containthe coordinates of the query points.
Vq = interpn(V,Xq1,Xq2,...,Xqn)
assumes a default grid of sample points. The default grid consists of the points, 1,2,3,...n_{i} in each dimension. The value of n_{i} is the length of the ith dimension in V
. Use this syntax when you want to conserve memory and are not concerned about the absolute distances between points.
Vq = interpn(V)
returnsthe interpolated values on a refined grid formed by dividing the intervalbetween sample values once in each dimension.
example
Vq = interpn(V,k)
returnsthe interpolated values on a refined grid formed by repeatedly halvingthe intervals k
times in each dimension. This resultsin 2^k1
interpolated points between sample values.
example
Vq = interpn(___,method)
specifies an alternative interpolation method: 'linear'
, 'nearest'
, 'pchip'
,'cubic'
, 'makima'
, or 'spline'
. The default method is 'linear'
.
example
Vq = interpn(___,method,extrapval)
alsospecifies extrapval
, a scalar value that is assignedto all queries that lie outside the domain of the sample points.
If you omit the extrapval
argument for queriesoutside the domain of the sample points, then based on the method
argument interpn
returnsone of the following:
The extrapolated values for the
'spline'
and'makima'
methodsNaN
values for other interpolation methods
Examples
collapse all
1D Interpolation
Open Live Script
Define the sample points and values.
x = [1 2 3 4 5];v = [12 16 31 10 6];
Define the query points, xq
, and interpolate.
xq = (1:0.1:5);vq = interpn(x,v,xq,'cubic');
Plot the result.
figureplot(x,v,'o',xq,vq,'');legend('Samples','Cubic Interpolation');
2D Interpolation
Open Live Script
Create a set of grid points and corresponding sample values.
[X1,X2] = ndgrid((5:1:5));R = sqrt(X1.^2 + X2.^2)+ eps;V = sin(R)./(R);
Interpolate over a finer grid using ntimes=1
.
Vq = interpn(V,'cubic');mesh(Vq);
Interpolate Two Sets of 2D Sample Values
Open Live Script
Create a grid of 2D sample points using ndgrid
.
[x,y] = ndgrid(0:10,0:5);
Create two different sets of sample values at the sample points and concatenate them as pages in a 3D array. Plot the two sets of sample values against the sample points. Because surf
uses meshgrid
format for grids, transpose the inputs for plotting.
v1 = sin(x.*y)./(x+1);v2 = x.*erf(y);V = cat(3,v1,v2);tiledlayout(1,2)nexttilesurf(x',y',V(:,:,1)')view(2)nexttilesurf(x',y',V(:,:,2)')view(2)
Create a set of query points for interpolation using ndgrid
and then use interpn
to find the values of each function at the query points. Plot the interpolated values against the query points.
[xq,yq] = ndgrid(0:0.2:10);Vq = interpn(x,y,V,xq,yq);tiledlayout(1,2)nexttilesurf(xq',yq',Vq(:,:,1)')view(2)nexttilesurf(xq',yq',Vq(:,:,2)')view(2)
Evaluate Outside Domain of 3D Function
Open Live Script
Create the grid vectors, x1
, x2
, and x3
. These vectors define the points associated with the values in V
.
x1 = 1:100;x2 = 1:50;x3 = 1:30;
Define the sample values to be a 100by50by30 array of random numbers, V
.
rng defaultV = rand(100,50,30);
Evaluate V
at three points outside the domain of x1
, x2
, and x3
. Specify extrapval = 1
.
xq1 = [0 0 0];xq2 = [0 0 51];xq3 = [0 101 102];vq = interpn(x1,x2,x3,V,xq1,xq2,xq3,'linear',1)
vq = 1×3 1 1 1
All three points evaluate to 1
because they are outside the domain of x1
, x2
, and x3
.
4D Interpolation
Open Script
Define an anonymous function that represents .
f = @(x,y,z,t) t.*exp(x.^2  y.^2  z.^2);
Create a grid of points in . Then, pass the points through the function to create the sample values, V
.
[x,y,z,t] = ndgrid(1:0.2:1,1:0.2:1,1:0.2:1,0:2:10);V = f(x,y,z,t);
Now, create the query grid.
[xq,yq,zq,tq] = ...ndgrid(1:0.05:1,1:0.08:1,1:0.05:1,0:0.5:10);
Interpolate V
at the query points.
Vq = interpn(x,y,z,t,V,xq,yq,zq,tq);
Create a movie to show the results.
figure;nframes = size(tq, 4);for j = 1:nframes slice(yq(:,:,:,j),xq(:,:,:,j),zq(:,:,:,j),... Vq(:,:,:,j),0,0,0); clim([0 10]); M(j) = getframe;endmovie(M);
Input Arguments
collapse all
X1,X2,...,Xn
— Sample grid points
arrays  vectors
Sample grid points, specified as real arrays or vectors. Thesample grid points must be unique.
If
X1,X2,...,Xn
are arrays, thenthey contain the coordinates of a full grid (in ndgrid format).Use the ndgrid function tocreate theX1,X2,...,Xn
arrays together. Thesearrays must be the same size.If
X1,X2,...,Xn
are vectors, then they are treated as grid vectors. The values in these vectors must be strictly monotonic, either increasing or decreasing.
Example: [X1,X2,X3,X4] = ndgrid(1:30,10:10,1:5,10:13)
Data Types: single
 double
V
— Sample values
array
Sample values, specified as a real or complex array. The size requirements for V
depend on the size of the grid of sample points defined by X1,X2,...,Xn
. The sample points X1,X2,...,Xn
can be arrays or grid vectors, but in both cases they define an ndimensional grid. V
must be an array that at least has the same n dimension sizes, but it also can have extra dimensions beyond n:
If
V
also hasn
dimensions, then the size ofV
must match the size of the ndimensional grid defined byX1,X2,...,Xn
. In this case,V
contains one set of sample values at the sample points. For example, ifX1,X2,X3
are 3by3by3 arrays, thenV
can also be a 3by3by3 array.If
V
has more thann
dimensions, then the firstn
dimensions ofV
must match the size of the ndimensional grid defined byX1,X2,...,Xn
. The extra dimensions inV
define extra sets of sample values at the sample points. For example, ifX1,X2,X3
are 3by3by3 arrays, thenV
can be a 3by3by3by2 array to define two sets of sample values at the sample points.
If V
contains complex numbers, then interpn
interpolatesthe real and imaginary parts separately.
Example: rand(10,5,3,2)
Data Types: single
 double
Complex Number Support: Yes
Xq1,Xq2,...,Xqn
— Query points
scalars  vectors  arrays
Query points, specified as real scalars, vectors, or arrays.
If
Xq1,Xq2,...,Xqn
are scalars,then they are the coordinates of a single query point in R^{n}.If
Xq1,Xq2,...,Xqn
are vectorsof different orientations, thenXq1,Xq2,...,Xqn
aretreated as grid vectors in R^{n}.If
Xq1,Xq2,...,Xqn
are vectorsof the same size and orientation, thenXq1,Xq2,...,Xqn
aretreated as scattered points in R^{n}.If
Xq1,Xq2,...,Xqn
are arrays ofthe same size, then they represent either a full grid of query points(inndgrid
format) or scattered points in R^{n}.
Example: [X1,X2,X3,X4] = ndgrid(1:10,1:5,7:9,10:11)
Data Types: single
 double
k
— Refinement factor
1
(default)  real, nonnegative, integer scalar
Refinement factor, specified as a real, nonnegative, integerscalar. This value specifies the number of times to repeatedly dividethe intervals of the refined grid in each dimension. This resultsin 2^k1
interpolated points between sample values.
If k
is 0
, then Vq
isthe same as V
.
interpn(V,1)
is the same as interpn(V)
.
The following illustration depicts k=2
in R^{2}.There are 72 interpolated values in red and 9 sample values in black.
Example: interpn(V,2)
Data Types: single
 double
method
— Interpolation method
'linear'
(default)  'nearest'
 'pchip'
 'cubic'
 'spline'
 'makima'
Interpolation method, specified as one of the options in this table.
Method  Description  Continuity  Comments 

'linear'  The interpolated value at a query point is based on linear interpolation of the values at neighboring grid points in each respective dimension. This is the default interpolation method.  C^{0} 

'nearest'  The interpolated value at a query point is the value at the nearest sample grid point.  Discontinuous 

'pchip'  Shapepreserving piecewise cubic interpolation (for 1D only). The interpolated value at a query point is based on a shapepreserving piecewise cubic interpolation of the values at neighboring grid points.  C^{1} 

'cubic'  The interpolated value at a query point is based on a cubic interpolation of the values at neighboring grid points in each respective dimension. The interpolation is based on a cubic convolution.  C^{1} 

'makima'  Modified Akima cubic Hermite interpolation. The interpolated value at a query point is based on a piecewise function of polynomials with degree at most three evaluated using the values of neighboring grid points in each respective dimension. The Akima formula is modified to avoid overshoots.  C^{1} 

'spline'  The interpolated value at a query point is based on a cubic interpolation of the values at neighboring grid points in each respective dimension. The interpolation is based on a cubic spline using notaknot end conditions.  C^{2} 

extrapval
— Function value outside domain of X1,X2,...,Xn
scalar
Function value outside domain of X1,X2,...,Xn
,specified as a real or complex scalar. interpn
returnsthis constant value for all points outside the domain of X1,X2,...,Xn
.
Example: 5
Example: 5+1i
Data Types: single
 double
Complex Number Support: Yes
Output Arguments
collapse all
Vq
— Interpolated values
scalar  vector  array
Interpolated values, returned as a real or complex scalar, vector, or array. The size and shape of Vq
depends on the syntax you use and, in some cases, the size and value of the input arguments.
If you specify sample points with
X1,X2,...,Xn
, or use the default grid, andV
has the same number of dimensions as the ndimensional grid of sample points, thenVq
contains a single set of interpolated values at the query points defined byXq1,Xq2,...,Xqn
.If
Xq1,Xq2,...,Xqn
are scalars, thenVq
is a scalar.If
Xq1,Xq2,...,Xqn
are vectors of the same size and orientation, thenVq
is a vector with the same size and orientation.If
Xq1,Xq2,...,Xqn
are grid vectors of mixed orientation, thenVq
is an array with the same size as the grid implicitly defined by the grid vectors.If
Xq1,Xq2,...,Xqn
are arrays of the same size, thenVq
is an array with the same size.
If you specify sample points with
X1,X2,...,Xn
, or use the default grid, andV
has more dimensions than the ndimensional grid of sample points, thenVq
contains multiple sets of interpolated values at the query points defined byXq1,Xq2,...,Xqn
. In this case, the first n dimensions ofVq
follow the size rules for a single set of interpolated values above, butVq
also has the same extra dimensions asV
with the same sizes.With the syntaxes
interpn(V)
andinterpn(V,k)
, the interpolation is performed by subdividing the default gridk
times (wherek=1
forinterpn(V)
). In this case,Vq
is an array with the same number of dimensions asV
where the size of the ith dimension is2^k * (size(V,i)1)+1
.
More About
collapse all
Strictly Monotonic
A set of values that are always increasingor decreasing, without reversals. For example, the sequence, a= [2 4 6 8]
is strictly monotonic and increasing. The sequence, b= [2 4 4 6 8]
is not strictly monotonic because there isno change in value between b(2)
and b(3)
.The sequence, c = [2 4 6 8 6]
contains a reversalbetween c(4)
and c(5)
, so itis not monotonic at all.
Full Grid (in ndgrid Format)
For interpn
, the fullgrid consists of n arrays, X1,X2,...,Xn
,whose elements represent a grid of points in R^{n}.The ith array, X_{i}
, contains strictly monotonic,increasing values that vary most rapidly along the ith dimension.
Use the ndgrid functionto create a full grid that you can pass to interpn
.For example, the following code creates a full grid in R^{2} forthe region, 1 ≤ X1 ≤ 3, 1≤ X2 ≤4.
[X1,X2] = ndgrid(1:3,(1:4))
X1 = 1 1 1 1 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3X2 = 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Grid Vectors
For interpn
, grid vectorsconsist of n vectors of mixedorientation thatdefine the points of a grid in R^{n}.
For example, the following code creates the grid vectors in R^{3} forthe region, 1 ≤ x1 ≤ 3, 4 ≤ x2 ≤5, and 6 ≤x3≤ 8:
x1 = 1:3;x2 = (4:5)';x3 = 6:8;
Scattered Points
For interpn
, scatteredpoints consist of n arrays or vectors, Xq1,Xq2,...,Xqn
,that define a collection of points scattered in R^{n}.The i
th array, Xi
, containsthe coordinates in the i
th dimension.
For example, the following code specifies the points, (1, 19,10), (6, 40, 1), (15, 33, 22), and (0, 61, 13) in R^{3}.
Xq1 = [1 6; 15 0];Xq2 = [19 40; 33 61];Xq3 = [10 1; 22 13];
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
For best results, provide
X1,X2,...,Xn
as vectors. The values in these vectors must be strictly monotonic and increasing.Code generation does not support the
'makima'
interpolation method.The interpolation method must be a constant charactervector.
ThreadBased Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
This function fully supports threadbased environments. For more information, see Run MATLAB Functions in ThreadBased Environment.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Usage notes and limitations:
A maximum of five dimensions is supported.
X1,X2,...,Xn
must have dimensions consistent withV
.method
must be'linear'
or'nearest'
.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
Usage notes and limitations:
X1,X2,...,Xn
must have dimensions consistent withV
.
For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced before R2006a
expand all
R2021a: Interpolate multiple data sets simultaneously
Support added to interpolate multiple data sets on the same grid at the same query points. For example, if you specify a 2D grid, a 3D array of values at the grid points, and a 2D collection of query points, then interpn
returns the interpolated values at the query points for each 2D page in the 3D array of values.
See Also
interp1  interp2  interp3  ndgrid
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 Deutsch
 English
 Français
 United Kingdom (English)
Contact your local office