Matlab反向二维插值interp2



我有一个函数V,它是从两个输入(X,Y)计算出来的。由于计算要求很高,我只在点的网格上执行,并希望依赖于二维线性插值。我现在想对固定的Y求逆这个函数,所以基本上我的起点是:

X = [1,2,3];
Y = [1,2,3];
V =[3,4,5;6,7,8;9,10,11];

当然,在(X,Y)的任何组合下都很容易获得V,例如:

Vq = interp2(X,Y,V,1.8,2.5)

给出

Vq =
    8.3000

但是,对于给定的V和Y,使用二维线性相互作用,我该如何找到X呢?我将不得不多次执行此任务,因此我需要一个快速且易于实现的解决方案。

谢谢你的帮助,非常感谢你的努力。

第页。

使用附加信息编辑

如果不是必须同时找到x和y,而是给定其中一个,则该问题简化为仅在1个方向(即,在x方向)上找到最小值。一种简单的方法是将其公式化为一个问题,该问题可以通过优化例程(如fminsearch)来最小化。因此,我们定义了函数f,它返回值Vq和插值结果之间的差。在给出x0的初步猜测后,我们试图找到使这种差异最小化的x。根据这个最初的猜测,结果将是我们正在寻找的:

% Which x value to choose if yq and Vq are fixed?
xq = 1.8; % // <-- this one is to be found
yq = 2.5; % // (given)
Vq = interp2(X,Y,V,xq,yq); % // 8.3 (given)
% this function will be minimized (difference between Vq and the result
% of the interpolation)
f = @(x) abs(Vq-interp2(X, Y, V, x, yq));
x0 = 1; % initial guess)
x_opt = fminsearch(f, x0) % // solution found: 1.8

Nras,非常感谢。在此期间,我做了其他事情:

function [G_inv] = G_inverse (lambda,U,grid_G_inverse,range_x,range_lambda)

for t = 1:size(U,1)
        for i = 1:size(U,2) 
            xf = linspace(range_x(1), range_x(end),10000);
            [Xf,Yf] = meshgrid(xf,lambda);
            grid_fine = interp2(range_x,range_lambda,grid_G_inverse',Xf,Yf);
            idx = find (abs(grid_fine-U(t,i))== min(min(abs(grid_fine-U(t,i))))); % find min distance point and take x index
            G_inv(t,i)=xf(idx(1));
        end
end

假设G_inv包含x,在上面的例子中U是yq,并且gridG_inverse包含Vq。range_x和range_lambda是栅格轴的对应向量。与您的解决方案相比,您对此解决方案有何看法?我想我的速度更快,但不太准确。然而,Spped是我的代码中的一个主要问题。

最新更新