#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.