[英]MATLAB isequal function gives wrong answer for symbolic expression
[英]Matlab gives wrong answer on mod(), isequal(), floor() function with a vector parameter
我使用matlab来解决混合整数编程,在我从linprog获得解决方案之后,我想评估它们是否都是整数(x是n维),但我无法找到一种方法来做到这一点。
所有函数,例如mod(x,1) == 0
, isequal(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.