在matlab / octave

时间:2015-05-10 19:24:28

标签: matlab octave

我使用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>0), find(xmin<1)),这也给了我同样的问题。我不知道为什么会这样。任何有关这方面的帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

没有必要使用find,你可以直接做一些逻辑索引:

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

最佳,

答案 1 :(得分:1)

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

如果您执行x > 0 & x < 1,您当然会获得值0.000000000000000的值,例如2.4652e-31。那些大于0且小于1.您需要重新考虑您的计算(您不会向我们提供任何有关它的详细信息)或您的比较。