Effacer les filtres
Effacer les filtres

Stop for-loop at the second last column

4 vues (au cours des 30 derniers jours)
HYZ
HYZ le 17 Avr 2019
Modifié(e) : Adam Danz le 17 Avr 2019
E.g. I have a vector a = [1 1 5 1 1 1 10 2]; Error appeared when the loop reached the last column. I am writing to stop at end-1, but kinda lost. Please help solve this. thanks in advance.
function z = findpeaks(a)
for i = 2:[a(:,end-1)]
z = a(a(i)>a(i-1) & a(i)>a(i+1))
end
  2 commentaires
Dennis
Dennis le 17 Avr 2019
I think your loop has a creative synthax (not wrong though).
What bothers me is that your loop runs from 2 to the 2nd last value in a, so the amount of iterations depend on your vector entry:
a = [1 1 5 1 1 1 10 2]; %10 iterations
a = [1 1 5 1 1 1 1 2]; %1 iteration
a = [1 1 5 1 1 1 -10 2]; %does nothing
a = [1 1 5 1 1 1 0.5 2]; %does nothing
I am not sure if this is intentional.
Also i recommened to rename your function since findpeaks() is already implemented in matlab.
Maybe you should check the Matlab version out, i guess you want to try something similar:
[peakval,peakloc]=findpeaks(a)
peakval =
5 10
peakloc =
3 7
HYZ
HYZ le 17 Avr 2019
Sorry I didn't explain my problem well. Basically I would like to get values which are larger than the value before and after. That's why I tried to put something like i=2:end-1. The loop has problem when it reached '2' as it has no vlaue after it.

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 17 Avr 2019
Modifié(e) : Adam Danz le 17 Avr 2019
Here's how to start at the 2nd column and stop at the second to last column
for i = 2 : size(a,2)-1 %or for i = 2 : length(a)-1 if a is a vector
...
end
Also, matlab already has a function named findpeaks() so you might want to rename your function.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by