IsMonotonic - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


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

Calling Sequence

IsMonotonic( data )

IsMonotonic( data, section )

Parameters

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.

Options

• 

direction: Either increasing or decreasing. The default is increasing.

• 

strict: Either true or false. The default is true.

• 

compiled: Either true or false. The default is false.

Description

• 

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 always use the uncompiled version of the subcommand used to check the specific variety of monotonicity.

• 

Suppose Digits<=evalhf(Digits) and UseHardwareFloats<>false. Here, IsMonotonic will use the compiled version of the subcommand used to check the specific variety of monotonicity when either the subcommand has already been compiled or compiled=true (the command will be compiled at first execution). On the other hand, if the subcommand has not yet been compiled and compiled=false, then the subcommand will be called using evalhf mode.

• 

Use of the compiled=true option is recommended when either a very long container or numerous smaller containers are to be scanned. In these scenarios, the cost of the overhead is likely worth it.

Examples

withArrayTools&colon;

Example 1

• 

Strictly increasing list:

A5&comma;10&comma;15&comma;20

A5&comma;10&comma;15&comma;20

(1)

dataplotA&comma;view&equals;0..5&comma;0..20&comma;color&equals;blue

IsMonotonicA&comma;direction&equals;increasing&comma;strict&equals;true

true

(2)

IsMonotonicA&comma;direction&equals;decreasing&comma;strict&equals;true

false

(3)

Example 2

• 

Increasing but not strictly increasing:

B5&comma;10&comma;10&comma;20

B5&comma;10&comma;10&comma;20

(4)

dataplotB&comma;view&equals;0..5&comma;0..20&comma;color&equals;blue

IsMonotonicB&comma;direction&equals;increasing&comma;strict&equals;true

false

(5)

IsMonotonicB&comma;direction&equals;increasing&comma;strict&equals;false

true

(6)

Example 3

• 

Not monotonic on the whole, but monotonic on subsections:

CArray2&comma;3&comma;4&comma;5&comma;4&comma;3&comma;2&comma;3&comma;4&comma;5

C2345432345

(7)

dataplotC&comma;view&equals;0..10&comma;0..5&comma;color&equals;blue

IsMonotonicC&comma;direction&equals;increasing&comma;strict&equals;false

false

(8)

IsMonotonicC&comma;..4&comma;direction&equals;increasing&comma;strict&equals;true

true

(9)

IsMonotonicC&comma;4..7&comma;direction&equals;decreasing&comma;strict&equals;true

true

(10)

IsMonotonicC&comma;7..1&comma;direction&equals;increasing&comma;strict&equals;true

true

(11)

Example 4

• 

Data can include infinity:

L&infin;&comma;0&comma;&infin;

L&comma;0&comma;

(12)

IsMonotonicL&comma;direction&equals;increasing

true

(13)

IsMonotonicL&comma;direction&equals;decreasing

false

(14)

Example 5

• 

Consider the following long Array:

dataArray1..100000&comma;i&rarr;i&comma;datatype&equals;float8&colon;

• 

The Array is strictly increasing, and confirmation using the IsMonotonic command requires checking the elements all the way to the end.

• 

First, check monotonicity with compile=false:

CodeTools:-UsageIsMonotonicdata&comma;compiled&equals;false

memory used=4.07KiB, alloc change=0 bytes, cpu time=12.00ms, real time=13.00ms, gc time=0ns

true

(15)
• 

Second, check with the compiled=true option, which triggers the procedure to compile for the strictly increasing case:

CodeTools:-UsageIsMonotonicdata&comma;compiled&equals;true

memory used=14.58MiB, alloc change=38.00MiB, cpu time=318.00ms, real time=242.00ms, gc time=161.39ms

true

(16)
• 

Finally, since compilation has already occurred, the check is much quicker when using either compiled=true or compiled=false:

CodeTools:-UsageIsMonotonicdata&comma;compiled&equals;true

memory used=3.92KiB, alloc change=0 bytes, cpu time=1000.00us, real time=1000.00us, gc time=0ns

true

(17)

CodeTools:-UsageIsMonotonicdata&comma;compiled&equals;false

memory used=4.20KiB, alloc change=0 bytes, cpu time=1000.00us, real time=0ns, gc time=0ns

true

(18)

Compatibility

• 

The ArrayTools[IsMonotonic] command was introduced in Maple 2021.

• 

For more information on Maple 2021 changes, see Updates in Maple 2021.

See Also

ArrayTools

CodeTools

Compiler

dataplot