Getting rid of a for loop

9 visualizaciones (últimos 30 días)
jacob Mitch
jacob Mitch el 19 de Oct. de 2019
Comentada: jacob Mitch el 20 de Oct. de 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.

Respuesta aceptada

Walter Roberson
Walter Roberson el 19 de Oct. de 2019
value1 = find(input(1:end-2) > input(2:end-1) & input(2:end-1) < input(3:end)) + 1;
value2 = input(value1);
  1 comentario
jacob Mitch
jacob Mitch el 20 de Oct. de 2019
Perfect Walter, Thank you

Iniciar sesión para comentar.

Más respuestas (2)

Turlough Hughes
Turlough Hughes el 19 de Oct. de 2019
Editada: Turlough Hughes el 19 de Oct. de 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 el 20 de Oct. de 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.

Categorías

Más información sobre Startup and Shutdown en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by