Нахождение максимумов в векторе с помощью MATLAB - PullRequest
4 голосов
/ 08 ноября 2011

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 08 ноября 2011

Вы можете использовать функцию 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
0 голосов
/ 08 ноября 2011

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

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

выход:

b = [4,5]
0 голосов
/ 08 ноября 2011
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 содержит максимум, за которым следуют все значения местоположений, которые равны макс.

...