The new function extr.m analyses the given real vector carrying a sequence of samples to be analyzed. At the end, it returns a cell array of extreme positions in the sequence. The cell array consists of two cells only. The first one contains the logical vector of maxima and the other the similar one of minima. Should more equal values be present in adjacent elements of the vector, only one position is returned. The attention is also paid on low memory requirements and a speed of the procedure.
Forms of calls:
L = extr(x); % Find true local extremes
% ..... x vector containing a sequence to be analyzed,
% ..... L cell array {L(1), L(2)}, where
% ..... L(1) is logical vector of positions of maxima,
% ..... L(2) is logical vector of positions of minima.
There are also circumstances, when the processing time is critical for a user, while the exact true extrems are of less priority. In that case he may use:
L = extr(c,0); % Find true and false local extrems.
False extrems form pairs of equal value minimum-maximum laying somewhere on the trend of the sequence. They are not extrems, but they do not harm in certain cases of consecutive processing.
Examples:
demoXtr; % See the program and figure demoXtr.jpg
L = extr(x);
y = x(L(1)|L(2)); % y is a vector of all extremes
clear, x=rand(1e7,1)-.5; tic, L=extr(x); toc
Elapsed time is 2.974584 seconds. % (3GHz PC, Windows XP Prof.)
clear, x=rand(1e7,1)-.5; tic, L=extr(x,0); toc
Elapsed time is 1.392926 seconds. % (3GHz PC, Windows XP Prof.)
Hopefully, the function is error-free. If not, please, let me know. |