0

我正在使用 matlab 来解决混合整数规划,在我从 linprog 获得解决方案后,我想评估它们是否都是整数(x 是 n 维),但我想不出办法做到这一点。

所有函数,例如mod(x,1) == 0isequal(x,floor(x))都会给出错误的答案。

更奇怪的是,如果你手动输入一个具有相同参数的向量,结果是正确的。

结果显示:(这里所有的x都是从linprog的结果中得到的)。任何人都可以帮助解决这个问题或提出一些其他有用的方法来评估这个?

K>> x

x =

    7.0000
    1.0000

K>> mod(x,1)

ans =

    0.0000
    1.0000

K>> x

x =

    6.0000
    3.0000

K>> isequal(x,floor(x))

ans =
    0
4

1 回答 1

2

看起来是来自 linprog 的整数 1,实际上是一个非常接近 1 的浮点数,但不等于它。只是您(默认情况下)无法通过在 MATLAB 中输出数字来区分。请参阅有关比较浮点值的问题。此外,请参阅有关数字显示格式的 MATLAB 手册页。

默认情况下,MATLAB 使用 显示数字format short

format将浮点数值的显示设置为默认显示格式,即短固定十进制格式。此格式显示 5 位缩放的定点值。

因此,即使它不等于1 – 1e–101,也会显示为1。同样,即使它确实是,也会显示为 1 。mod(1 – 1e–10, 1)1 – 1e–10

如果您手动设置x为其显示的表示,则所有较低有效的数字都将被截断,“奇怪地”为您提供预期的结果。

x输入命令后检查format long

于 2013-02-04T20:01:13.880 回答