24小时热门版块排行榜    

查看: 2790  |  回复: 2

格林达姆少校

金虫 (小有名气)

[求助] Matlab无法判断等于,其判断相等机制是怎样的?? 已有2人参与

偶然发现一个程序怎么调都调不对,写了几条判断相等的语句竟然不对
比如就这个,我产生p为0.01-0.15,用同样的a挨个比相等,竟然有好几个不相等。。。。
Matlab无法判断等于,其判断相等机制是怎样的??


然后我让p最高为0.14,14个数,还有不相等的,而且和上一个不一样。。。
Matlab无法判断等于,其判断相等机制是怎样的??-1


写到这里突然意识到可能是无穷小量的问题,是否是这样?
如果是,那么规范写法是如何的?
回复此楼

» 猜你喜欢

人は同じ过ちを缲り返す。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
格林达姆少校: 金币+25, ★★★★★最佳答案, 感谢! 2016-09-01 17:01:26
这个是数的计算机表示误差(或者叫舍入误差)影响!
比如你试一下:
>> p(14)==0.14

ans =

     0
显然不正确!
实际上:
>> p(14)-0.14

ans =

-2.7756e-017
所以应该改成: abs(p(14)-0.14)是否小于某个阈值(根据你的问题去设定),
也就是说绝对值小于阈值的数被当成零!
善恶到头终有报,人间正道是沧桑.
2楼2016-08-27 19:36:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
格林达姆少校: 金币+5, ★★★很有帮助, 嗯,应该直接贴代码的。。。 2016-09-01 17:01:47
Matlab 2010a
CODE:
clc
clear all
p=0.01:0.01:0.15;
A=[];
for ( a = 0.01:0.01:0.15)
    A = [A; (p == a)];
end
A

A =
     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     1     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     1     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     1     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

CODE:
clc
clear all
p=0.01:0.01:0.14;
A=[];
for ( a = 0.01:0.01:0.14)
    A = [A; (p == a)];
end
A

A =
     1     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     1     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     1     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     1     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     1     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     1

3楼2016-08-27 20:58:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 格林达姆少校 的主题更新
信息提示
请填处理意见