繁体   English   中英

Matlab给出了带有向量参数的mod(),isequal(),floor()函数的错误答案

[英]Matlab gives wrong answer on mod(), isequal(), floor() function with a vector parameter

我使用matlab来解决混合整数编程,在我从linprog获得解决方案之后,我想评估它们是否都是整数(x是n维),但我无法找到一种方法来做到这一点。

所有函数,例如mod(x,1) == 0isequal(x,floor(x))将给出错误的anwser。

更奇怪的是,如果您手动输入具有相同参数的矢量,则结果是正确的。

结果如下所示:(这里的所有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

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

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

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

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

如果手动将x设置为其显示的表示,则会截断所有不太重要的数字,“奇怪地”为您提供预期的结果。

输入命令format long后检查x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM