如何制作2个变量的函数并给定2D数组,它会返回一个插值?
我有N x M
数组A
。我需要插入它并以某种方式获得该表面的功能,以便我可以选择非整数参数的值。
(我需要将插值用作2个变量的函数)
例如:
A[N,M] //my array
// here is the method I'm looking for. Returns function interpolatedA
interpolatedA(3.14,344.1) //That function returns interpolated value
答案 0 :(得分:6)
以下是使用scatteredInterpolant
的示例:
%# get some 2D matrix, and plot as surface
A = peaks(15);
subplot(121), surf(A)
%# create interpolant
[X,Y] = meshgrid(1:size(A,2), 1:size(A,1));
F = scatteredInterpolant(X(:), Y(:), A(:), 'linear');
%# interpolate over a finer grid
[U,V] = meshgrid(linspace(1,size(A,2),50), linspace(1,size(A,1),50));
subplot(122), surf(U,V, F(U,V))
请注意,您可以随时评估插值对象:
>> F(3.14,3.41)
ans =
0.036288
以上示例使用向量化调用在网格的所有点进行插值
答案 1 :(得分:4)
对于常规网格上的数据,请使用interp2。如果您的数据分散,请使用griddata。您可以创建anonymous function作为围绕这些调用的简化包装。
M = 10;
N = 5;
A = rand(M,N);
interpolatedA = @(y,x) interp2(1:N,1:M,A,x,y);
%interpolatedA = @(y,x) griddata(1:N,1:M,A,x,y); % alternative
interpolatedA(3.3,8.2)
ans =
0.53955
答案 2 :(得分:0)
您是否看过interp2
函数?
来自MatLab文档:
ZI = interp2(X,Y,Z,XI,YI)
返回包含与ZI
和XI
元素对应的元素的矩阵YI
,并通过矩阵{{1}指定的二维函数中的插值确定},X
和Y
。 Z
和X
必须是单调的,并且具有相同的格式(“格子”),就好像它们是由Y
生成的一样。矩阵meshgrid
和X
指定数据Y
的给定点。超出范围的值将返回Z
s。
答案 3 :(得分:0)
使用spline()
命令,如下所示:
% A contains N rows and 2 columns
pp = spline(A(:,1), A(:,2));
ppval(pp,3.44)
ans =
0.4454