ArrayTools
IsMonotonic
determine if a 1-D list or rtable is decreasing, increasing, non-decreasing, or non-increasing
Calling Sequence
Parameters
Options
Description
Examples
Compatibility
IsMonotonic( data )
IsMonotonic( data, section )
data
-
1-D list or rtable of data of type realcons
section
(optional) range of the form a..b, a.., ..b, or .., where a and b are integers. The default is .., which corresponds to the entire container.
direction: Either increasing or decreasing. The default is increasing.
strict: Either true or false. The default is true.
The IsMonotonic command determines if a 1-D list or rtable, or a section of it, is monotonic (increasing, non-decreasing, decreasing, or non-increasing).
If direction=increasing and strict=true, then the result is true if data[i+1]>data[i] for all valid indices i, and false otherwise.
If direction=increasing and strict=false, then the result is true if data[i+1]>=data[i] for all valid indices i, and false otherwise.
If direction=decreasing and strict=true, then the result is true if data[i+1]<data[i] for all valid indices i, and false otherwise.
If direction=decreasing and strict=false, then the result is true if data[i+1]<=data[i] for all valid indices i, and false otherwise.
If data has fewer than two elements, or the section contains fewer than two elements, the result is vacuously true.
If data is not an Array with lower index different than 1, you can use valid negative indices in section for counting backward. For example, if data is a Vector with 15 elements, then 5..-2 is a valid range for section (equivalent to 5..14), with -2 indicating the second element from the end. However, if data is an Array with lower index different than 1, you can only use valid literal indices.
Suppose the working precision of the session is larger than that of hardware floats (i.e. Digits>evalhf(Digits)), or use of hardware floats has been disabled (i.e. UseHardwareFloats=false). Here, IsMonotonic will use external code to determine monotonicity.
with⁡ArrayTools:
Example 1
Strictly increasing list:
A≔5,10,15,20
dataplot⁡A,view=0..5,0..20,color=blue
IsMonotonic⁡A,direction=increasing,strict=true
true
IsMonotonic⁡A,direction=decreasing,strict=true
false
Example 2
Increasing but not strictly increasing:
B≔5,10,10,20
dataplot⁡B,view=0..5,0..20,color=blue
IsMonotonic⁡B,direction=increasing,strict=true
IsMonotonic⁡B,direction=increasing,strict=false
Example 3
Not monotonic on the whole, but monotonic on subsections:
C≔Array⁡2,3,4,5,4,3,2,3,4,5
C≔2345432345
dataplot⁡C,view=0..10,0..5,color=blue
IsMonotonic⁡C,direction=increasing,strict=false
IsMonotonic⁡C,..4,direction=increasing,strict=true
IsMonotonic⁡C,4..7,direction=decreasing,strict=true
IsMonotonic⁡C,7..−1,direction=increasing,strict=true
Example 4
Data can include infinity:
L≔−∞,0,∞
IsMonotonic⁡L,direction=increasing
IsMonotonic⁡L,direction=decreasing
Example 5
Consider the following long Array:
data≔Array⁡1..104,i↦i,datatype=float8:
The Array is strictly increasing, and confirmation using the IsMonotonic command requires checking the elements all the way to the end:
CodeTools:-Usage⁡IsMonotonic⁡data
memory used=8.11KiB, alloc change=0 bytes, cpu time=0ns, real time=0ns, gc time=0ns
Starting with Maple 2023, external C code is used for the auxiliary procedures that were formerly implemented in Maple and could be compiled by passing the compiled option. The compiled option is now deprecated, but it is still accepted for backwards compatibility.
The ArrayTools[IsMonotonic] command was introduced in Maple 2021.
For more information on Maple 2021 changes, see Updates in Maple 2021.
The ArrayTools[IsMonotonic] command was updated in Maple 2023.
See Also
dataplot
Download Help Document