Нахождение максимумов в векторе с использованием MATLAB

#matlab #numerical-methods

#matlab #численные методы

Вопрос:

я пытаюсь найти локальные максимумы вектора чисел с использованием MATLAB. Встроенная функция findpeaks будет работать для такого вектора, как:

 [0 1 2 3 2 1 1 2 3 2 1 0]
  

где пики (каждый из 3 ‘s) занимают только одну позицию в векторе, но если у меня есть вектор, подобный:

 [0 1 2 3 3 2 1 1 2 3 2 1 0]
  

первый «пик» занимает две позиции в векторе, и findpeaks функция его не распознает.

Есть ли хороший способ написать функцию поиска максимумов, которая будет обнаруживать такого рода пики?

Ответ №1:

Вы можете использовать функцию REGIONALMAX из набора инструментов обработки изображений:

 >> x = [0 1 2 3 3 2 1 1 2 3 2 1 0]
x =
     0     1     2     3     3     2     1     1     2     3     2     1     0

>> idx = imregionalmax(x)
idx =
     0     0     0     1     1     0     0     0     0     1     0     0     0
  

Комментарии:

1. это то, что я в конечном итоге использовал, спасибо. с последующим уменьшением результата с помощью bwmorph для получения одного результата для каждого пика.

Ответ №2:

Что-то намного проще:

 a = [1 2 4 5 5 3 2];
b = find(a == max(a(:)));
  

вывод:

 b = [4,5]
  

Ответ №3:

 a = [ 0 1 2 3 3 2 1 2 3 2 1 ];

sizeA = length(a);

result = max(a);

for i=1:sizeA, 

    if a(i) == result(1)
       result(length(result)   1) = i;
    end
end
  

result содержит значение max, за которым следуют все значения locations, которые равны max.