24小时热门版块排行榜    

查看: 1483  |  回复: 4

lgxsam

木虫 (正式写手)

[求助] 问个关于matlab里find函数的问题!

最近用matlab里find函数的时候出现点问题,怎么也弄不明白,希望知道的人指教一下!问题之这样的:
有这么几个语句:
x = 59.8:0.1:148.7;
b = [121;122;123;124;125];
i = 633;
find(b(:,1)==x(i)) % 这时候的x(i)=123
但是find函数返回的是empty matrix。然而当我用
find(b(:,1)==123)
的时候,find返回的是3!
请问有没有人知道这是什么原因?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
lgxsam(金币+5): 2011-12-17 01:36:02
cenwanglai(金币+3): 感谢回复~ 2011-12-20 09:06:43
x(i)=123.000与123在matlab里面不是相等的

>> x = 59.8:0.1:148.7;
>> b = [121;122;123;124;125];
>> i = 633;
>> x(i)

ans =

  123.0000
>> find(b(:,1)==x(i)) % 这时候的x(i)=123

ans =

   Empty matrix: 0-by-1

>> find(b==ceil(x(i))) % 这时候的x(i)=123

ans =

     3
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
2楼2011-12-17 00:13:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)


dbb627(金币+1): 感谢应助 2011-12-17 11:40:53
判断两个数值是否相等,最好不要直接使用等于号,因为经过运算后,计算机可能会用浮点数来表示,这个时候通过比较差值的绝对值比较好,在楼主的代码中步长是0.1,可以把误差取为0.001,查找语句改为find(abs(b(:,1) - x(i)) ≤ 0.001)。
因为是用手机写的,符号可能不是很准确,绝对值的函数也记不太清,可能是fabs,但意思已经表达清楚了。
往事并不如烟
3楼2011-12-17 09:25:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

判断两个数值是否相等,最好不要直接使用等于号,因为经过运算后,计算机可能会用浮点数来表示,这个时候通过比较差值的绝对值比较好,在楼主的代码中步长是0.1,可以把误差取为0.001,查找语句改为find(abs(b(:,1) - x(i)) ≤ 0.001)。
因为是用手机写的,符号可能不是很准确,绝对值的函数也记不太清,可能是fabs,但意思已经表达清楚了。
往事并不如烟
4楼2011-12-17 09:25:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baby_wolf

新虫 (初入文坛)


dbb627(金币+1): 欢迎交流 2011-12-19 19:01:12
楼上两位说的对。
请看:
>> x = 59.8:0.1:148.7; x(633)-123

ans =

   -1.421085471520200e-014
5楼2011-12-19 18:22:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lgxsam 的主题更新
信息提示
请填处理意见