我正在编写一个工具,该工具将构建一种包含测量样本的查找表(两个),然后我要给自己一个度量,在查找表中检查最接近的一个,然后将提取的结果退还给我值。我希望得到的结果与手工传递给工具的值相同。
假设我将坐标系X,Y
定义为网格后,建立了两个包含两个测量值的查询表矩阵。
x = rand(101); y = rand(101);
[X,Y] = meshgrid(x,y);
每个点(Xi,Yi)
对应一对测量值(Ai,Bi)
A = rand(101); B = rand(101);
通过这种方式,我得到了一些可以映射我的测量值(对于A和B)
现在,我想给出一个手动重新计算测量值的方向,将x = rand(1)
和y = rand(1)
对应于a,b
对,它们不必等于这样的地图点
将这些值与A,B
中的值进行比较并打印。从理论上讲,如果对a,b
与A,B
的特定元素完全对应,则意味着我可以提取地图的对应点。
我以这种方式做类似的事情
row = (size(A,1)+1)/2;
col = (size(B,2)+1)/2;
[~,m] = min(abs(A(row,:)-a));
[~,n] = min(abs(B(:,col)-b));
x_estimated = X(n,m);
y_estimated = Y(n,m);
如您所见,此代码的实际点和提取点之间存在采样错误。我需要的是,激发点(浅绿色)等于“手动”计算的点(粉红色)。
因此,我认为我需要一种加权提取,而不需要检查最接近的一组值。
在Matlab(基本上是插值)中是否存在类似的东西会自动执行?如果没有,您能建议我一个简单的方法来提取这些值吗?
编辑:
按照建议,我尝试了interp2
这样的
x_estimation = interp2(A,B,X,a,b);
y_estimation = interp2(A,B,Y,a,b);
但是给我“不是有效的MESHGRID”的编译错误,因此我尝试使用scatteredInterpolant
这样
F_x = scatteredInterpolant(X(:),Y(:),A);
x_estimation = F_x(a,b);
但是给我一个完全错误的值
EDIT2
因此,我试图使自己对我的问题更加清楚。
我将X
和Y
定义为我的坐标系,以构建一个网格,其中我计算的所有内容都在该网格内。
然后,我首先以某种方式A
和B
进行完整的测量计算,从而得出两个方向之一的测量结果。因此,我需要他们两个人都有两个方向的信息。
到目前为止,我已经在这两个矩阵中进行了抽样测量。然后,我手动给出一个进行测量的固定位置(该位置仍在我的网格中,但在任意位置),重新计算测量值,获得两个标量a
和b
并从矩阵{{ 1}}和A
中最接近B
对的元素。结果应该与我在例程开始时手工给出的结果相同,并且误差很小(尽可能小,希望为0)