我正在Matlab中开发一个工具,我使用meshgrid
x= -a:a/101:a;
y= -a:a/101:a;
[X,Y] = meshgrid(x,y);
定义计算字段E
的点。因此,我有E(X,Y)
,并且通过这种方式我可以将其用于网格中的特定点,它将该字段的值关联起来。我有一个在所有点计算E的函数
E = compute_field(X,Y)
然后我对另一个函数内的这个字段(求和和乘法)做了一些操作,它给出了两个表示两个方向上所有可能错误的结果。
[ERR_H,ERR_V] = ideal_computations(E,X,Y)
到目前为止没有问题。
在我的工具的下一步中,我决定施加两个点x,y以提取该字段的值,以便具有E(x,y)
标量而不是之前的矩阵
e = compute_field(x,y)
我和之前做的完全相同的总和和乘法。
[ERR_H,ERR_V] = real_computations(e,x,y)
目前,两个函数ideal_computations
和real_computations
完全相同。
然后我检查E(x,y)
里面E(X,Y)
计算两者之间的最小值并提取坐标,问题就在这里。
[x1_est,x2_est] = compute_error(err_h,err_v,X,Y,ERR_H,ERR_V)
row = (size(ERR_H,1)+1)/2;
col = (size(ERR_V,2)+1)/2;
[~,m] = min(abs(ERR_H(row,:)-err_h));
[~,n] = min(abs(ERR_V(:,col)-err_v));
x1_est = X(n,m);
x2_est = Y(n,m);
可能情侣(X,Y)
没有完全匹配(x,y)
的步骤,我得到了这个
这可能发生在我计算最小值并且结果不完全为零时,因此存在这种不匹配。
例如我把点(0.0651,0.0651)
。此函数检查该点的位置,或接近0.0651
的位置。查看矩阵,我发现最接近的值为0.065076334365630
,而不是0.0651
。为了获得min = 0,我应该在矩阵内部使用值0.0651,在这种情况下,我将使两个点重叠。
我不想增加这个步骤,因为可能甚至可以使用这个字段,但也许不能用另一个字段,而且我将有一个非常大的矩阵,需要花费很多精力来计算。
我怎么解决这个问题?有没有其他方法可以不使用meshgrid但总是有效的东西?