n维插值用interpn
看看帮助吧:
interpn
N-D data interpolation (table lookup)
Syntax
VI = interpn(X1,X2,X3,...,V,Y1,Y2,Y3,...)
VI = interpn(V,Y1,Y2,Y3,...)
VI = interpn(V,ntimes)
VI = interpn(...,method)
VI = interpn(...,method,extrapval)
Description
VI = interpn(X1,X2,X3,...,V,Y1,Y2,Y3,...) interpolates to find VI, the values of the underlying multidimensional function V at the points in the arrays Y1, Y2, Y3, etc. For an n-dimensional array V, interpn is called with 2*N+1 arguments. Arrays X1, X2, X3, etc. specify the points at which the data V is given. Out of range values are returned as NaNs. Y1, Y2, Y3, etc. must be arrays of the same size, or vectors. Vector arguments that are not the same size, and have mixed orientations (i.e. with both row and column vectors) are passed through ndgrid to create the Y1, Y2, Y3, etc. arrays. interpn works for all n-dimensional arrays with 2 or more dimensions.
VI = interpn(V,Y1,Y2,Y3,...) interpolates as above, assuming X1 = 1:size(V,1), X2 = 1:size(V,2), X3 = 1:size(V,3), etc.
VI = interpn(V,ntimes) expands V by interleaving interpolates between each element, working recursively for ntimes iterations. interpn(V) is the same as interpn(V,1).
VI = interpn(...,method) specifies alternative methods:
'nearest'
Nearest neighbor interpolation
'linear'
Linear interpolation (default)
'spline'
Cubic spline interpolation
'cubic'
Cubic interpolation, as long as data is uniformly-spaced. Otherwise, this method is the same as 'spline'.
VI = interpn(...,method,extrapval) specifies a method and a value for VI outside of the domain created by X1, X2, .... Thus, VI equals extrapval for any value of Y1, Y2,... that is not spanned by X1, X2,... respectively. You must specify a method to use extrapval. The default method is 'linear'.
interpn requires that X1, X2, X3, ... be monotonic and plaid (as if they were created using ndgrid). X1, X2, X3, and so on can be non-uniformly spaced.
Discussion
All the interpolation methods require that X1,X2, X3 ... be monotonic and have the same format ("plaid") as if they were created using ndgrid. X1,X2,X3,... and Y1, Y2, Y3, etc. can be non-uniformly spaced. For faster interpolation when X1, X2, X3, etc. are equally spaced and monotonic, use the methods '*linear', '*cubic', or '*nearest'.
Examples
Start by defining an anonymous function to compute :
f = @(x,y,z,t) t.*exp(-x.^2 - y.^2 - z.^2);
Build the lookup table by evaluating the function f on a grid constructed by ndgrid:
[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 construct a finer grid:
[xi,yi,zi,ti] = ndgrid(-1:0.05:1,-1:0.08:1,-1:0.05:1, ...
0:0.5:10);
Compute the spline interpolation at xi, yi, zi, and ti:
vi = interpn(x,y,z,t,v,xi,yi,zi,ti,'spline');
Plot the interpolated function, and then create a movie from the plot:
nframes = size(ti, 4);
for j = 1:nframes
slice(yi(:,:,:,j), xi(:,:,:,j), zi(:,:,:,j), ...
vi(:,:,:,j),0,0,0);
caxis([0 10]);
M(j) = getframe;
end
movie(M);
这是一个三维的插值问题,直接调用相应的函数
VI = interp3(X,Y,Z,V,XI,YI,ZI);
其中输入的数据X,Y,Z为给出点的三个变量,V为该点对应的值,XI,YI,ZI为要通过插值得到的点的坐标。
n为A的行数,X=A(1:n,1);Y=A(1:n,2);Z=A(1:n,3);V=(A1:n,4);对于你待求的矩阵B前三列应该是给出的吧,于是XI=B(1:n,1);YI=B(1:n,2);ZI=B(1:n,3);于是就得到啦。 B(1:n,1)=VI;
其实是不是等距插值都不是关键,关键是要X,Y,Z,V的维数相同,XI,YI,ZI的维数相同。
[X,Y] = meshgrid(-3:.25:3);
Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3);
ZI = interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z), hold, mesh(XI,YI,ZI+15)
hold off
axis([-3 3 -3 3 -5 20])