3

我有一个从两个输入(X,Y)计算的函数 V。由于计算要求很高,我只在点网格上执行它,并希望依赖 2d 线性插值。我现在想为固定 Y 反转该函数。所以基本上我的出发点是:

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

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

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

Vq =

    8.3000

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

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

P。

4

2 回答 2

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
于 2014-10-24T14:22:33.783 回答
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 是我的代码中的一个主要问题。

于 2014-10-30T09:25:32.227 回答