4,494
edits
m (Text replacement - "</source>" to "</syntaxhighlight>") |
|||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Built-in|Minimum|⌊}}, '''Min''', or '''Lesser of''' is a [[dyadic]] [[scalar function]] which returns the [[Less than|smaller]] of its two [[argument]]s. The name "Minimum" is sometimes also used for the Minimum [[Reduce]] < | {{Built-in|Minimum|⌊}}, '''Min''', or '''Lesser of''' is a [[dyadic]] [[scalar function]] which returns the [[Less than|smaller]] of its two [[argument]]s. The name "Minimum" is sometimes also used for the Minimum [[Reduce]] <syntaxhighlight lang=apl inline>⌊/</syntaxhighlight>, which returns the smallest element of a [[vector]] (this usage is related to the [[wikipedia:minimum|minimum]] of a function). Minimum is paired with [[Maximum]], which returns the greater argument rather than the smaller, and shares the glyph <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> with the [[Floor]] function. It is not subject to [[comparison tolerance]], since the result will be exactly equal to one argument, and there is no reason to choose a larger argument even if the two arguments are [[tolerant comparison|tolerantly]] equal. As a [[Boolean function]], Minimum is identical to [[And]]. | ||
== Examples == | == Examples == | ||
Minimum finds the smaller of two numbers: | Minimum finds the smaller of two numbers: | ||
< | <syntaxhighlight lang=apl> | ||
2.4 ⌊ 1.9 | 2.4 ⌊ 1.9 | ||
1.9 | 1.9 | ||
</ | </syntaxhighlight> | ||
Together with [[Maximum]], it can clamp an array of numbers to a range (closed interval), here from 0 to 1: | Together with [[Maximum]], it can clamp an array of numbers to a range (closed interval), here from 0 to 1: | ||
< | <syntaxhighlight lang=apl> | ||
0 ⌈ 1 ⌊ ¯0.2 ¯0.1 0.3 0.8 1 1.3 | 0 ⌈ 1 ⌊ ¯0.2 ¯0.1 0.3 0.8 1 1.3 | ||
0 0 0.3 0.8 1 1 | 0 0 0.3 0.8 1 1 | ||
</ | </syntaxhighlight> | ||
Because the [[complex number]]s do not form an [[wikipedia:ordered field|ordered field]], attempting to take the minimum with a complex argument yields a [[DOMAIN ERROR]]. | Because the [[complex number]]s do not form an [[wikipedia:ordered field|ordered field]], attempting to take the minimum with a complex argument yields a [[DOMAIN ERROR]]. | ||
< | <syntaxhighlight lang=apl> | ||
3 ⌊ 3j1 | 3 ⌊ 3j1 | ||
DOMAIN ERROR | DOMAIN ERROR | ||
3⌊3J1 | 3⌊3J1 | ||
∧ | ∧ | ||
</ | </syntaxhighlight> | ||
=== Reduction === | === Reduction === | ||
Minimum [[Reduce]] finds the smallest [[element]] in an entire [[vector]]: | Minimum [[Reduce]] finds the smallest [[element]] in an entire [[vector]]: | ||
< | <syntaxhighlight lang=apl> | ||
⌊/ 4 3 2 3 1 5 7 | ⌊/ 4 3 2 3 1 5 7 | ||
1 | 1 | ||
</ | </syntaxhighlight> | ||
To find the [[index]] of the minimum, [[Index Of]] can be used to search for it. A shorter, but usually slower, method is to take the [[First]] of the vector's [[Grade]]. | To find the [[index]] of the minimum, [[Index Of]] can be used to search for it. A shorter, but usually slower, method is to take the [[First]] of the vector's [[Grade]]. | ||
< | <syntaxhighlight lang=apl> | ||
{⍵⍳⌊/⍵} 4 3 2 3 1 5 7 | {⍵⍳⌊/⍵} 4 3 2 3 1 5 7 | ||
5 | 5 | ||
⊃⍋ 4 3 2 3 1 5 7 | ⊃⍋ 4 3 2 3 1 5 7 | ||
5 | 5 | ||
</ | </syntaxhighlight> | ||
The two solutions may differ when [[comparison tolerance]] is not zero, because Index Of uses tolerant comparison but Grade does not. The first solution will return a smaller index if an element that is tolerantly but not exactly equal to the minimum is found at that index. | The two solutions may differ when [[comparison tolerance]] is not zero, because Index Of uses tolerant comparison but Grade does not. The first solution will return a smaller index if an element that is tolerantly but not exactly equal to the minimum is found at that index. | ||
Reducing over an empty axis yields the largest representable number, as that is the identity element for Minimum. This value is usually < | Reducing over an empty axis yields the largest representable number, as that is the identity element for Minimum. This value is usually <syntaxhighlight lang=apl inline>∞</syntaxhighlight> (for dialects that support [[infinity|infinities]]) or <syntaxhighlight lang=apl inline>1.797693135E308</syntaxhighlight> (with 64-bit [[float]]s) or <syntaxhighlight lang=apl inline>1E6145</syntaxhighlight> (with 128-bit [[decimal float]]s). | ||
== External links == | == External links == | ||
Line 43: | Line 43: | ||
=== Documentation === | === Documentation === | ||
* [ | * [https://help.dyalog.com/latest/index.htm#Language/Primitive%20Functions/Minimum.htm Dyalog] | ||
* [http://microapl.com/apl_help/ch_020_020_120.htm APLX] | * [http://microapl.com/apl_help/ch_020_020_120.htm APLX] | ||
* J [https://www.jsoftware.com/help/dictionary/d011.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/ltdot#dyadic NuVoc] | * J [https://www.jsoftware.com/help/dictionary/d011.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/ltdot#dyadic NuVoc] | ||
* [https://mlochbaum.github.io/BQN/doc/arithmetic.html#additional-arithmetic BQN] | |||
{{APL built-ins}} | {{APL built-ins}}[[Category:Primitive functions]][[Category:Scalar dyadic functions]] |