How to plot min and max values on graph

248 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

KSSV
KSSV il 20 Ott 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')

Più risposte (1)

Alan Stevens
Alan Stevens il 20 Ott 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
% Gradient of curve
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 Commento
Steven Lord
Steven Lord il 20 Ott 2020
You could use the islocalmin and islocalmax functions included in MATLAB.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by