【问题标题】:find operation in matlab/octave在 matlab/octave 中查找操作
【发布时间】:2015-05-10 19:24:27
【问题描述】:

我正在使用 glpk 求解器来获取 xmin 中最小化问题的 LP 变量值。 xmin 是一个包含 0、1 和一些小数值的向量。然后我想得到其中的小数值。

frac_value = find (xmin > 0 & xmin < 1)

frac_value_xmin = xmin(frac_value)

frac_value 应该给我 xmin 的小数值的位置。 frac_value_xmin 应该给我价值观。

对于某些输入 xmin 仅包含 01 并且它显示没有小数值。喜欢xmin= 1 0 -0 1 0

但对于某些输入,xmin 也显示只有 01 的值,但喜欢关注

在哪里xmin = 1.00000 1.00000 0.00000 -0.00000

find 操作之后,它返回frac_value = 3frac_value_xmin = 2.4652e-32,它假设不返回任何东西。

对于某些输入xmin = 1.0000 0.50000 0.00000 0.50000,它也会显示正确的输出。 frac_value = 2 4frac_value_xmin = 0.50000 0.50000

我尝试使用frac_value = intersect(find(xmin&gt;0), find(xmin&lt;1)),这也给了我同样类型的问题。我不知道为什么会这样。对此的任何帮助将不胜感激。

【问题讨论】:

  • 这不是正常行为,find 应该只返回有限整数。你能用这种行为制作一个最小的例子吗?

标签: matlab octave


【解决方案1】:

这个不用find,直接做一些逻辑索引即可:

frac_value_xmin = xmin(xmin>0 & xmin<1);

最好的,

【讨论】:

  • 但我也需要这些职位。这也给了我那些实际值应该是0.000000000000000的有线值
【解决方案2】:

你需要阅读What Every Programmer Should Know About Floating-Point Arithmetic

如果您执行x &gt; 0 &amp; x &lt; 1,您当然会返回值0.000000000000000,例如2.4652e-31。这些大于 0 且小于 1。您将需要重新考虑您的计算(您没有向我们提供任何有关它的详细信息)或您的比较。

【讨论】:

  • 我添加了一个关于场景的示例问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2020-03-11
相关资源
最近更新 更多