我在我的一个matlab函数中使用了meshgrid,这个函数在一个循环中调用,特定的代码行如下(对不起,我不能在这里粘贴完整的代码)
rect
[m,n] = meshgrid(rect(1):rect(3),rect(2):rect(4));
size(m)
现在我打印rect和size(m)在输出中显示为ans以及meshgrid代码。我发布的是最后两次迭代
1)第一个给出尺寸(m)为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 :(得分: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));