在未排序的向量中找到小于某个值的第一个元素(MATLAB)

时间:2014-03-11 01:51:33

标签: matlab vector

非常简单,我以为我知道自己在做什么,但显然不是。反正。

我需要在向量中找到小于特定值的第一个元素。这是我一直在使用的代码:

t = 0:0.01:5;

u = ((2)*exp(-10.*t).*cos((4.*sqrt(6)).*t) + ((5)./sqrt(6)).*exp(-10.*t).*sin((4.*sqrt(6)).*t));

for a = 1:size(u)
if u(a) < (0.05)
    disp(a)
    break
end
end

我试图找到的值是小于0.05的第一个元素,但是,当我运行我的代码时,我什么都没得到。

我可能做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

@ user2994291已正确指出基于循环的解决方案出错的地方(+1)。

但是我还要补充一点,你要做的事情可以通过以下方式完成:

find(u < 0.05, 1, 'first')

从技术上讲,第三项输入不是必需的 - 你可以使用:

find(u < 0.05, 1)

但是,我似乎记得在某些时候阅读,如果你提供第三个输入,find将更快地工作。

答案 1 :(得分:3)

for循环的上限可能等于1.

在你的情况下,你是一个行向量(在MATLAB中肯定不能说是100%,因为我现在只能访问GNU Octave),但调用大小(u)可能回复[1 501]作为答案。你的for循环将选择1作为上限。

尝试用size(u,2)或更好的length(u)替换尺寸(u)。我得到一个= 24作为答案。

编辑:

从您的问题我假设您是MATLAB初学者,因此我强烈建议您查看内置debugger(您可以通过单击所需代码行旁边的左侧垂直条来添加断点) ),这可以帮助您轻松识别错误,并为将来节省大量时间。