【问题标题】:Bizarre glitch in MATLAB vector assignmentMATLAB向量分配中的奇怪故障
【发布时间】:2013-08-04 03:24:10
【问题描述】:

我有一段代码,我在其中挑选出在给定阈值 d/2 内以 ds 间隔的 x 值。这可能不是最有效的方法,但除了我在这里提出的偶尔的错误之外,它工作正常,我想保留该方法。但是,MATLAB 似乎切断了此代码创建的向量的上端点。我的猜测是它有某种舍入误差并且没有达到上限。它适用于不同(但数量级相同)的 d 和 ds 值。

d=250e-9;
ds=1e-9;
xlim=0;

while xlim < ((d/2)-ds)
    xlim = xlim + ds;
end;

disp(xlim);

xlim 返回为 1.25e-7。那么,

xrel = -xlim:ds:xlim

这将显示 xrel,它从 -1.25e-7 开始,到 1.24e-7 结束。顺便说一句,正好有 250 个值(稍后在我的代码中,我认为这是一个奇数)。关于变通的任何想法?谢谢!

【问题讨论】:

  • 这并不是真正的“舍入误差”,浮点加法在处理这么小的值时并不能保证正确性。我下面的回答应该可以解决您的问题。

标签: arrays matlab vector while-loop variable-assignment


【解决方案1】:

如果您键入: 长格式

在执行此操作之前,您会看到在您的程序之后 xlim 并不完全是 1.25e-7。这是一种不好的做法,请改为执行以下操作:

xrel = -d/2:ds:d/2

这将为您提供 251 长度的向量,其值从 -1.25e-7 到 1.25e-7 您想要。

【讨论】:

  • 或者,如果您确切知道需要多少点并且有上限和下限,请考虑使用 linspace 函数。
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 2017-04-03
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多