Getting rid of a for loop

조회 수: 3 (최근 30일)
jacob Mitch
jacob Mitch 2019년 10월 19일
댓글: jacob Mitch 2019년 10월 20일
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.

채택된 답변

Walter Roberson
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);
  댓글 수: 1
jacob Mitch
jacob Mitch 2019년 10월 20일
Perfect Walter, Thank you

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Turlough Hughes
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);

Steven Lord
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.

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by