Matlab反转了2d插值interp2

时间:2014-10-24 13:49:43

标签: matlab interpolation linear-interpolation

我有一个函数V,它是从两个输入(X,Y)计算出来的。由于计算要求很高,我只是在点网格上执行它,并希望依赖于2d线性插值。我现在想要将该函数反转为固定的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

但是如何使用2d线性插值找到给定V和Y的X?我将不得不多次执行此任务,因此我需要一个快速且易于实施的解决方案。

感谢您的帮助,我们非常感谢您的努力。

P上。

2 个答案:

答案 0 :(得分:1)

使用其他信息进行编辑

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

% 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

答案 1 :(得分:0)

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,grid_G_inverse包含Vq。 range_x和range_lambda是网格轴的对应矢量。您对此解决方案有何看法,与您的解决方案相比如何?我猜我的速度更快但准确度更低。然而,Spped是我的代码中的一个主要问题。