How do I determine if the desired value in a vector is the Max or Min of the values around it

조회 수: 3 (최근 30일)
I have the Vector x that I want to find the Max or Min such as:
x = [ 21 19 20 17 16 17 18 16 15 13 15 16]
min(concave up) = [19 16 13]
Max(concave down) = [20 18 ]
This is what I have been trying.
I do not know if their is a fuction already in MatLab, but I would like to do it using a script.
Thank you in advance.
y = [1 2 3 4 5 6 7 8 9 10 11 12];
x = [21 19 20 17 16 17 18 16 15 13 15 16];
s = 1;
% this to get the Min
for i = 2:size(x,2)-1
if x(i-1)< x(i) < x(i+1)
z(S)= x(i);
S = S + 1;
end
end

채택된 답변

Adam Danz
Adam Danz 2019년 11월 24일
편집: Adam Danz 2019년 11월 24일
Differentiate x and determine which values are falling (negative) or rising (positive). Local minima are where the pattern switches from negative to positive. Local maxima are where the pattern switchs from positive to negative. The first and last samples are not considered minima or maxima.
In the code below, localMinIdx and localMaxIdx are the index values of (x) locating the local mins and max's.
localMins and localMaxs are the local mins and max's.
x = [ 21 19 20 17 16 17 18 16 15 13 15 16];
localMinIdx = strfind([0,diff(x),1]<0,[1,0]);
localMins = x(localMinIdx); % = [19 16 13]
localMaxIdx = strfind([0,diff(x),1]>0,[1,0]);
localMaxs = x(localMaxIdx); % = [ 20 18]

추가 답변 (1개)

Andrei Bobrov
Andrei Bobrov 2019년 11월 25일
x = [ 21 19 20 17 16 17 18 16 15 13 15 16];
M = x(hankel(1:3,3:numel(x)));
% max
[peakmax,i] = max(M);
peakmax = peakmax(i == 2);
% min
[peakmin,i] = min(M);
peakmin = peakmin(i == 2);

카테고리

Help CenterFile Exchange에서 Data Preprocessing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by