# How to plot min and max values on graph

72 views (last 30 days)
Noah Johnson on 20 Oct 2020
Commented: Steven Lord on 20 Oct 2020
I've created some formulas and a function that is composed of if and elseif statements and plots a graph of it. However I am needing for the graph to show the max and min of the curve and I am unsure of how to do so.
X = 0:0.1:10;
Y = (X.^(1.01))+4*cos((3/4).*X.*pi) - 2*sin((2/3)*pi.*X)-0.25;
figure(); %creates figure window
plot (Y,'-r+') %plots figure
xlabel('Time (mins)') %x axis label
ylabel('Density Altitude (km)') %y axis label
function minmax_i = min_max(Y) %function code
N = ones(1,7);
for i = 2:(length(Y)-1)
if (Y(i-1) > Y(i)) && (Y(i+1) > Y(i)) %if true, local minimum
minmax_i(N) = i;
N = N+1;
elseif (Y(i-1) < Y(i)) && (Y(i+1) < Y(i)) %if true, local maximum
minmax_i(N) = i;
N = N+1;
end
end
end

KSSV on 20 Oct 2020
X = 0:0.1:10;
Y = (X.^(1.01))+4*cos((3/4).*X.*pi) - 2*sin((2/3)*pi.*X)-0.25;
% min
[val0,idx0] = min(Y) ;
% max
[val1,idx1] = max(Y) ;
plot(X,Y)
hold on
plot(X(idx0),Y(idx0),'*r')
plot(X(idx1),Y(idx1),'*b')

Alan Stevens on 20 Oct 2020
If you meant you want to highight all the peaks and troughs then the following will do it (assuming you haven't got the findpeaks function available):
X = 0:0.01:10;
Y = (X.^(1.01))+4*cos((3/4).*X.*pi) - 2*sin((2/3)*pi.*X)-0.25;
% Peaks and troughs
dYdX = 1.01*X.^0.01 - 3*pi*sin((3/4).*X.*pi) - (4/3)*pi*cos((2/3)*pi.*X);
signchange = diff(sign(dYdX)); % Where curve turns over
idxpos = signchange<0; % Peak positions
idxneg = signchange>0; % Trough positions
figure(); %creates figure window
plot(X,Y,'r',X(idxpos),Y(idxpos),'bo',X(idxneg),Y(idxneg),'bs'),grid
xlabel('Time (mins)') %x axis label
ylabel('Density Altitude (km)') %y axis label

#### 1 Comment

Steven Lord on 20 Oct 2020
You could use the islocalmin and islocalmax functions included in MATLAB.