2015-10-23 83 views
0

我使用meshgrid在被称为一个循环和代码的具体路线如下我的MATLAB的功能之一(对不起,我不能粘贴在这里完整的代码)MATLAB meshgrid错误

rect 
[m,n] = meshgrid(rect(1):rect(3),rect(2):rect(4)); 
size(m) 

现在我打印矩形和大小(米)与网格代码一起显示为ans输出。我发布的最后两个迭代下面

1)第一个给大小(米)为46x48是一个正确的维度,并没有抛出一个错误在我以后的矩阵加法。

2)显示大小(m)为46x47的第二个是错误的维度,尽管rect值表示否则。

rect = 

    119.9290 69.3807 166.9290 114.3807 


ans = 

    46 48 


rect = 

    120.0508 69.5380 167.0508 114.5380 


ans = 

    46 47 

Error using + 
Matrix dimensions must agree. 

现在我采取相同的号码,并在命令窗口中执行一个meshgrid,结果是正确如下

>> [lm,kl] = meshgrid(120.0508:167.0508,69.5380:114.5380); 
>> size(lm) 

ans = 

    46 48 

什么也许对于这种异常的原因吗?

+0

使用'format long g;',然后再次显示两个矩形数组。你会发现它们之间有一个小的差别,这就是为什么你会得到不同的'meshgrid'结果。 MATLAB默认显示最多4个小数点,所以您手动输入最多4个小数位的数字不能完全捕获矩形中捕获的实际数字的整个精度。 – rayryeng

回答

0

您可能正在经历浮点精度错误。为了使解决方案对小精度错误有效,我建议切换到linspace。

[m,n] = meshgrid(linspace(rect(1),rect(3),round(rect(3)-rect(1)+1),linspace(rect(2),rect(4),round(rect(4)-rect(2)+1)) 

作为一种替代方法,您可以添加一些小数字到第二个值。这将确保差异总是略大于整数距离,而不是略小。

[m,n] = meshgrid(rect(1):(rect(3)+0.1),rect(2):(rect(4)+0.1)); 
+0

谢谢。但是这个小的扰动会导致一个明显的错误,这是由于在我的应用程序的最终输出中累积(在图像中跟踪一个对象),在运行多次迭代时。你知道的其他解决方法? – Nagsaver

+0

我们没有导致问题的代码。 – Daniel