Getting rid of a for loop

3 views (last 30 days)
jacob Mitch
jacob Mitch on 19 Oct 2019
Commented: jacob Mitch on 20 Oct 2019
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.

Accepted Answer

Walter Roberson
Walter Roberson on 19 Oct 2019
value1 = find(input(1:end-2) > input(2:end-1) & input(2:end-1) < input(3:end)) + 1;
value2 = input(value1);

More Answers (2)

Turlough Hughes
Turlough Hughes on 19 Oct 2019
Edited: Turlough Hughes on 19 Oct 2019
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);

Steven Lord
Steven Lord on 20 Oct 2019
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.

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!