【问题标题】:MATLAB meshgrid errorMATLAB网格网格错误
【发布时间】:2016-01-22 12:36:19
【问题描述】:

我在我的一个循环调用的matlab函数中使用meshgrid,特定的代码行如下(对不起,我不能在这里粘贴完整的代码)

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

现在我正在打印 rect 和 size(m),在输出中显示为 ans 以及 meshgrid 代码。我在最后两次迭代下面发布

1) 第一个给出 size(m) 为 46x48 的尺寸是正确的尺寸,并且不会在我稍后进行的矩阵加法中引发错误。

2) 第二个显示 size(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

这个异常的原因可能是什么?

【问题讨论】:

  • 使用format long g;,然后再次显示两个矩形数组。您会发现它们之间存在细微差别,这就是为什么您会得到不同的meshgrid 结果。默认情况下,MATLAB 最多显示 4 个小数点,因此您手动输入最多 4 个小数位的数字并不能完全捕获矩形中捕获的实际数字的全部精度。

标签: matlab


【解决方案1】:

您可能遇到浮点精度错误。为了有一个对小精度误差具有鲁棒性的解决方案,我建议切换到 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));

【讨论】:

  • 谢谢。但是,当运行多次迭代时,由于我的应用程序的最终输出(跟踪图像中的对象)中的累积,这种小的扰动会导致明显的错误。您还知道其他解决方法吗?
猜你喜欢
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
相关资源
最近更新 更多