find max & min

2 views (last 30 days)
Arief Kus
Arief Kus on 11 Mar 2020
Commented: Arief Kus on 18 Mar 2020
If I want to choose one cycle. The cycle must have criteria : largest distance maximum & minimum, 3 point cross X axis. Thank you very much in advanced.
  1 Comment
Turlough Hughes
Turlough Hughes on 11 Mar 2020
Edited: Turlough Hughes on 11 Mar 2020
What do you mean by one cycle? Are you looking for the maximum change in y given a change in x of 3?

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 11 Mar 2020
This will do it:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
s = load('data.mat')
data = s.data;
hFig = figure;
plot(data, 'b-', 'LineWidth', 2)
grid on;
xlabel('Index', 'FontSize', fontSize);
ylabel('Signal', 'FontSize', fontSize);
% Maximizxe the window.
hFig.WindowState = 'maximized';
% Find the max
[maxValue, indexOfMax] = max(data)
% Find the min
[minValue, indexOfMin] = min(data)
% Find out where the signal last crosses 0 before the peak
% First set after the peak to infinity so we do not find that.
tempSignal = data;
tempSignal(indexOfMax:end) = inf;
indexLeft = find(tempSignal < 0, 1, 'last')
% Plot a red spot there.
hold on;
plot(indexLeft, data(indexLeft), 'r.', 'MarkerSize', 40);
% Find out where the signal first crosses 0 after the max peak on the right side.
% First set before the valley to infinity so we do not find the peak.
tempSignal = data;
tempSignal(1 : indexOfMax) = inf;
indexMiddle = find(tempSignal < 0, 1, 'first')
% Plot a red spot there.
hold on;
plot(indexMiddle, data(indexMiddle), 'r.', 'MarkerSize', 40);
% Find out where the signal first crosses 0 after the min peak (the biggest valley).
% First set before the valley to -infinity so we do not find the peak.
tempSignal = data;
tempSignal(1 : indexOfMin) = -inf;
indexRight = find(tempSignal > 0, 1, 'first')
% Plot a red spot there.
hold on;
plot(indexRight, data(indexRight), 'r.', 'MarkerSize', 40);
  4 Comments
Arief Kus
Arief Kus on 18 Mar 2020
Done. I am really sorry for late in clicking "Accept this answer".
Arief Kus
Arief Kus on 18 Mar 2020
If I have X and Y data. I want to choose one cycle. The cycle must have criteria : largest distance maximum & minimum, 3 point cross X axis.Thank you very much in advance.

Sign in to comment.

More Answers (0)

Categories

Find more on Simulink in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!