Editor's Note: This file was a File Exchange Pick of the Week
ISMONOTONIC(X) returns a boolean value indicating whether or not a vector is monotonic.
By default, ISMONOTONIC returns true for non-strictly monotonic vectors,
and both monotonic increasing and monotonic decreasing vectors. For
matrices and N-D arrays, ISMONOTONIC returns a value for each column in
X.
ISMONOTONIC(X, 1) works as above, but only returns true when X is
strictly monotonically increasing, or strictly monotonically decreasing.
ISMONOTONIC(X, 0) works as ISMONOTONIC(X).
ISMONOTONIC(X, [], 'INCREASING') works as above, but returns true only
when X is monotonically increasing.
ISMONOTONIC(X, [], 'DECREASING') works as above, but returns true only
when X is monotonically decreasing.
ISMONOTONIC(X, [], 'EITHER') works as ISMONOTONIC(X, []).
ISMONOTONIC(X, [], [], DIM) works as above, but along dimension DIM.
NOTE: Third input variable is case insensitive, and partial matching is
used, so 'd' would be recognised as 'DECREASING' etc..
EXAMPLE:
x = [1:4; 6:-2:2 3]
ismonotonic(x)
ismonotonic(x, [], 'i')
ismonotonic(x, [], [], 2)
x =
1 2 3 4
6 4 2 3
ans =
1 1 1 1
ans =
1 1 0 0
ans =
1
0
NEW FEATURES in v1.1:
Code now fully vectorised.
Support for N-D arrays.
Character arrays now allowed.
ACKNOWLEDGEMENTS:
Thanks to Jos X for advice on vectorisation
Richie Cotton (2021). ismonotonic (https://www.mathworks.com/matlabcentral/fileexchange/11637-ismonotonic), MATLAB Central File Exchange. Retrieved .
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
Thanks Richie, very helpful.
Andy
The matlab function issorted does the job in many cases, but doesn't include the strictly monotonic option, so I prefer to use Richie's function.
Giving only a single boolean result for vectors instead of a vector of booleans.
Thank you!
Thanks for the contribution Richie.
It works as expected and replaces one I had been using that did not.
Jeff
GIVEN HOW MANY STANDARD MATLAB FUNCTIONS REQUIRE A VECTOR OF MONOTONICALLY INCREASING/DECREASING VALUES, A FUNCTION LIKE THIS ONE SHOULD BE INCLUDED WITH MATLAB.
FRUSTRATED,
Adam
great file. very helpful. thanks!
H1 line, complete help, examples, author and date mentioned in the source, fast and working!
For small problems the string recognition takes more time than the calculations:
strmatch(lower(direction), 'either')
Much faster:
strncmpi(direction, 'either', length(direction))
or even (1st letter is enough, handles empty strings):
strncmpi(direction, 'e', 1)
The function works and works quickly. Saved me some time coding up something clunky to do the same thing. Thanks!