Matrix Divide: Difference between revisions
No edit summary |
(History in APL\360) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Built-in|Matrix Divide|⌹}} is a [[dyadic function]] that performs [[wikipedia:matrix division|matrix division]] | {{Built-in|Matrix Divide|⌹}} is a [[dyadic function]] that performs [[wikipedia:matrix division|matrix division]] between two [[argument]]s of rank 2 or less. Some dialects automatically apply it to rank-2 [[subarray]]s of higher-rank arguments. It shares the [[glyph]] ''Quad Divide'' <syntaxhighlight lang=apl inline>⌹</syntaxhighlight> (often called ''Domino'') with the monadic function [[Matrix Inverse]]. These functions were added to [[APL\360]] in 1970<ref>"Report of the APL SHARE conference" ([https://dl.acm.org/action/showBmPdf?doi=10.1145%2F987461 pdf]). [[APL Quote-Quad]] Volume 2, Number 3. 1970-09.</ref> and are widely supported in modern APL. | ||
== Examples == | == Examples == | ||
The result of < | The result of <syntaxhighlight lang=apl inline>X⌹Y</syntaxhighlight> is equal to <syntaxhighlight lang=apl inline>(⌹Y)+.×X</syntaxhighlight>, which is analogous to <syntaxhighlight lang=apl inline>X÷Y</syntaxhighlight> being equal to <syntaxhighlight lang=apl inline>(÷Y)×X</syntaxhighlight>. As a consequence, <syntaxhighlight lang=apl inline>X≡Y+.×X⌹Y</syntaxhighlight> is true for square matrices. | ||
< | <syntaxhighlight lang=apl> | ||
⎕←X←2 2⍴1 2 3 4 | ⎕←X←2 2⍴1 2 3 4 | ||
1 2 | 1 2 | ||
Line 20: | Line 20: | ||
X≡Y+.×X⌹Y | X≡Y+.×X⌹Y | ||
1 | 1 | ||
</ | </syntaxhighlight> | ||
== Applications == | == Applications == | ||
Line 28: | Line 28: | ||
The following example solves the system of equations <math>x + 2y = 5, 2x - y = 8</math>. The answer is <math>x=4.2, y=0.4</math>. | The following example solves the system of equations <math>x + 2y = 5, 2x - y = 8</math>. The answer is <math>x=4.2, y=0.4</math>. | ||
< | <syntaxhighlight lang=apl> | ||
⎕←X←2 2⍴1 2 2 ¯1 | ⎕←X←2 2⍴1 2 2 ¯1 | ||
1 2 | 1 2 | ||
Line 35: | Line 35: | ||
Y⌹X | Y⌹X | ||
4.2 0.4 | 4.2 0.4 | ||
</ | </syntaxhighlight> | ||
The following example solves the linear least squares over the five points <math>(1,5), (2,1), (3,4), (4,2), (5,8)</math>. The answer is <math>y=1.9 + 0.7x</math>. | The following example solves the linear least squares over the five points <math>(1,5), (2,1), (3,4), (4,2), (5,8)</math>. The answer is <math>y=1.9 + 0.7x</math>. | ||
< | <syntaxhighlight lang=apl> | ||
⎕←X←1,⍪⍳5 | ⎕←X←1,⍪⍳5 | ||
1 1 | 1 1 | ||
Line 49: | Line 49: | ||
Y⌹X | Y⌹X | ||
1.9 0.7 | 1.9 0.7 | ||
</ | </syntaxhighlight> | ||
When used with real vectors as both arguments, < | When used with real vectors as both arguments, <syntaxhighlight lang=apl inline>Y×X⌹Y</syntaxhighlight> gives the [[wikipedia:Projection (linear algebra)#Finding projection with an inner product|projection]] of X onto a basis vector Y. The remaining component of X, namely <syntaxhighlight lang=apl inline>R←X-Y×X⌹Y</syntaxhighlight>, is [[wikipedia:Orthogonality#Euclidean vector spaces|orthogonal]] to Y (<syntaxhighlight lang=apl inline>R+.×Y</syntaxhighlight> is zero). | ||
< | <syntaxhighlight lang=apl> | ||
(X Y)←(2 7)(3 1) | (X Y)←(2 7)(3 1) | ||
X⌹Y | X⌹Y | ||
Line 63: | Line 63: | ||
⎕CT>|Y+.×X-Y×X⌹Y ⍝ ∧ is orthogonal to Y (with negligible error) | ⎕CT>|Y+.×X-Y×X⌹Y ⍝ ∧ is orthogonal to Y (with negligible error) | ||
1 | 1 | ||
</ | </syntaxhighlight> | ||
== External links == | == External links == | ||
Line 73: | Line 73: | ||
=== Documentation === | === Documentation === | ||
* [ | * [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Matrix%20Divide.htm Dyalog] | ||
* [http://microapl.com/apl_help/ch_020_020_280.htm APLX] | * [http://microapl.com/apl_help/ch_020_020_280.htm APLX] | ||
* [http://wiki.nars2000.org/index.php/Matrix_Inverse/Divide NARS2000] | * [http://wiki.nars2000.org/index.php/Matrix_Inverse/Divide NARS2000] | ||
* J [https://www.jsoftware.com/help/dictionary/d131.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/percentdot#dyadic NuVoc] (as < | * J [https://www.jsoftware.com/help/dictionary/d131.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/percentdot#dyadic NuVoc] (as <syntaxhighlight lang=j inline>%.</syntaxhighlight>) | ||
== References == | |||
<references/> | |||
{{APL built-ins}}[[Category:Primitive functions]] | {{APL built-ins}}[[Category:Primitive functions]] |
Latest revision as of 01:40, 18 March 2024
⌹
|
Matrix Divide (⌹
) is a dyadic function that performs matrix division between two arguments of rank 2 or less. Some dialects automatically apply it to rank-2 subarrays of higher-rank arguments. It shares the glyph Quad Divide ⌹
(often called Domino) with the monadic function Matrix Inverse. These functions were added to APL\360 in 1970[1] and are widely supported in modern APL.
Examples
The result of X⌹Y
is equal to (⌹Y)+.×X
, which is analogous to X÷Y
being equal to (÷Y)×X
. As a consequence, X≡Y+.×X⌹Y
is true for square matrices.
⎕←X←2 2⍴1 2 3 4 1 2 3 4 ⎕←Y←2 2⍴5 6 7 8 5 6 7 8 X⌹Y 5 4 ¯4 ¯3 (⌹Y)+.×X 5 4 ¯4 ¯3 X≡Y+.×X⌹Y 1
Applications
From the properties of Moore-Penrose inverse (which Matrix Inverse uses), Matrix Divide can not only be used to solve a system of linear equations, but also to find the linear least squares solution to an overdetermined system.
The following example solves the system of equations . The answer is .
⎕←X←2 2⍴1 2 2 ¯1 1 2 2 ¯1 Y←5 8 Y⌹X 4.2 0.4
The following example solves the linear least squares over the five points . The answer is .
⎕←X←1,⍪⍳5 1 1 1 2 1 3 1 4 1 5 Y←5 1 4 2 8 Y⌹X 1.9 0.7
When used with real vectors as both arguments, Y×X⌹Y
gives the projection of X onto a basis vector Y. The remaining component of X, namely R←X-Y×X⌹Y
, is orthogonal to Y (R+.×Y
is zero).
(X Y)←(2 7)(3 1) X⌹Y 1.3 Y×X⌹Y ⍝ Projection of X onto Y 3.9 1.3 X-Y×X⌹Y ⍝ The remaining component in X ¯1.9 5.7 ⎕CT>|Y+.×X-Y×X⌹Y ⍝ ∧ is orthogonal to Y (with negligible error) 1
External links
Lesson
Documentation
- Dyalog
- APLX
- NARS2000
- J Dictionary, NuVoc (as
%.
)
References
- ↑ "Report of the APL SHARE conference" (pdf). APL Quote-Quad Volume 2, Number 3. 1970-09.