2013-03-21 4 views
1

Кто-то может мне помочь. Я использую программу Matlab.Найти локальное максимальное значение в векторе

Предположим, у меня есть вектор А,

A = [0 0 1 2 3 5 0 0 0 0 0 2 3 6 7 0 0 0 0 1 1 2 3 4 1] 

Я хотел бы получить информацию о местных максимальных значений и расположение от вектора А. Итак, ответ, который я хотел бы получить следующий.

maxValue = 5, 7 и 4;

maxLocation = 6, 15 и 24;

спасибо, что вам понравилось.

+1

huh? как получить 5 7 4? – DarthVader

+0

Я еще не знаю, как получить 5 7 4 из массива A. , но maxValue и maxLocation - это ответ, который я получил бы. –

+0

Максимальное значение равно 7? правильно? если вы были ребенком, и вам дали 10 мячей, как бы вы нашли самый большой? – DarthVader

ответ

7

Если у вас есть набор инструментов обработки сигналов, то findpeaks должно быть то, что вы хотите:

[pks,locs] = findpeaks(A) 

На будущее, вы должны знать, что вы хотите, чтобы найти локальные максимумы. Говоря, что вы хотите найти максимальное значение, кажется, что вы хотите, чтобы глобальные максимумы (в этом случае в этом случае было бы 7).

+0

Ваш ответ очень полезен для меня. Спасибо –

-2

Вы хотите найти каждое происхождение 4,5 и 7? попробовать:

Output = find(A>3) 

это вернет вектор 1xn с позиции чего-либо более 3 ... не уверен, если это то, что вы хотите, хотя

+0

find (A> 3) - не ответ, который я хочу получить. спасибо за помощь –

2

Вы должны быть гораздо более четкое представление о ваших целей , Похоже, вы хотите найти локальные максимумы в векторе.

Будете ли вы всегда иметь векторы (не действительно массивы, которые обычно являются словом, обозначающим вещь с двумя несобственными измерениями), которые имеют локальный максимум, который вы хотите найти? Будете ли вы выбирать все локальные максимумы? Если это так, то это будет работать ...

A = [0 0 1 2 3 5 0 0 0 0 0 4 5 6 7 0 0 0 0 1 1 2 3 4 1]; 

n = numel(A); 
ind = 2:(n-1); 

maxLoc = ind(find((diff(ind-1) > 0) & (diff(ind) < 0))); 

% in case the max occurs at an end 
if A(2) < A(1) 
    maxLoc = [1,maxLoc]; 
end 
if A(n) < A(n-1) 
    maxLoc = [maxLoc,n]; 
end 

maxVal = A(maxLoc); 

Но что о векторе

A = [0 1 2 2 1 0]; 

Что вы хотите увидеть сейчас?

Опять же, вам нужно придумать свои требования. Каковы ваши потребности. Какова цель?

Как только вы это сделаете, ваши проблемы будут легче решить, и кому-то легче ответить.

2

Предполагаю, что вы ищете локальные максимальные значения - то есть значения, которые больше, чем те, что вокруг них.

Мое решение было бы это:

Loc = find(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0)+1; 
Val = A(Loc); 

Loc будет содержать положения локальных максимумов, и Val будет содержать значения в этих локальных максимумов. Обратите внимание, что он НЕ найдет максимумы по краям, как написано. Если вы также хотите их обнаружить, вы должны немного изменить его:

Loc = find([A(1)>A(2),(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0),A(end)>A(end-1)]); 
Val = A(Loc); 
Смежные вопросы