非常简单,我以为我知道自己在做什么,但显然不是。反正。
我需要在向量中找到小于特定值的第一个元素。这是我一直在使用的代码:
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的第一个元素,但是,当我运行我的代码时,我什么都没得到。
我可能做错了什么?
谢谢!
答案 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
(您可以通过单击所需代码行旁边的左侧垂直条来添加断点) ),这可以帮助您轻松识别错误,并为将来节省大量时间。