Getting rid of a for loop
4 次查看(过去 30 天)
显示 更早的评论
If I have my code as
function [value1, value2] = scope(input)
c=1;
x=length(input);
for z=2:x
if z==x
break
elseif input(z-1)>input(z) && input(z)<input(z+1)
value1(c,1)=z;
value2(c,1)=input(z);
c=c+1;
end
end
Is it possible to get rid of the for look so the function runs without loops. Thank you.
0 个评论
采纳的回答
Walter Roberson
2019-10-19
value1 = find(input(1:end-2) > input(2:end-1) & input(2:end-1) < input(3:end)) + 1;
value2 = input(value1);
更多回答(2 个)
Turlough Hughes
2019-10-19
编辑:Turlough Hughes
2019-10-19
The following should do the job.
ind=input(1:end-2)>input(2:end-1) & input(2:end-1)<input(3:end);
ind=[false; ind; false]; % If input is a row vector just remove to semi-colons here.
value1=find(ind);
value2=input(ind);
0 个评论
Steven Lord
2019-10-20
You're looking for a local minimum in your vector input? [I would choose a different name, BTW, since input already has a meaning.] If so and you're using release R2017b or later use islocalmin.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!