math.vectors: implement v^, v^n, n^v.

db4
John Benediktsson 2012-07-30 16:15:00 -07:00
parent 6077f2d6c6
commit aed6825b4a
3 changed files with 32 additions and 4 deletions

View File

@ -9,6 +9,7 @@ ARTICLE: "math-vectors-arithmetic" "Vector arithmetic"
v+-
v*
v/
v^
}
"Vector unary operations:"
{ $subsections
@ -30,6 +31,8 @@ ARTICLE: "math-vectors-arithmetic" "Vector arithmetic"
n+v
v-n
n-v
v^n
n^v
}
"Saturated arithmetic (only on " { $link "specialized-arrays" } "):"
{ $subsections
@ -212,7 +215,7 @@ HELP: vtruncate
HELP: n+v
{ $values { "n" "a number" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Adds " { $snippet "n" } " to each element of " { $snippet "u" } "." } ;
{ $description "Adds " { $snippet "n" } " to each element of " { $snippet "v" } "." } ;
HELP: v+n
{ $values { "u" "a sequence of numbers" } { "n" "a number" } { "w" "a sequence of numbers" } }
@ -220,7 +223,7 @@ HELP: v+n
HELP: n-v
{ $values { "n" "a number" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Subtracts each element of " { $snippet "u" } " from " { $snippet "n" } "." } ;
{ $description "Subtracts each element of " { $snippet "v" } " from " { $snippet "n" } "." } ;
HELP: v-n
{ $values { "u" "a sequence of numbers" } { "n" "a number" } { "w" "a sequence of numbers" } }
@ -228,7 +231,7 @@ HELP: v-n
HELP: n*v
{ $values { "n" "a number" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Multiplies each element of " { $snippet "u" } " by " { $snippet "n" } "." } ;
{ $description "Multiplies each element of " { $snippet "v" } " by " { $snippet "n" } "." } ;
HELP: v*n
{ $values { "u" "a sequence of numbers" } { "n" "a number" } { "w" "a sequence of numbers" } }
@ -236,7 +239,7 @@ HELP: v*n
HELP: n/v
{ $values { "n" "a number" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Divides " { $snippet "n" } " by each element of " { $snippet "u" } "." }
{ $description "Divides " { $snippet "n" } " by each element of " { $snippet "v" } "." }
{ $errors "May throw an error if a division by zero occurs; see " { $link "division-by-zero" } "." } ;
HELP: v/n
@ -244,6 +247,14 @@ HELP: v/n
{ $description "Divides each element of " { $snippet "u" } " by " { $snippet "n" } "." }
{ $errors "May throw an error if a division by zero occurs; see " { $link "division-by-zero" } "." } ;
HELP: n^v
{ $values { "n" "a number" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Raises " { $snippet "n" } " to the power of each element of " { $snippet "v" } "." } ;
HELP: v^n
{ $values { "u" "a sequence of numbers" } { "n" "a number" } { "w" "a sequence of numbers" } }
{ $description "Raises each element of " { $snippet "u" } " to the power of " { $snippet "n" } "." } ;
HELP: v+
{ $values { "u" "a sequence of numbers" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Adds " { $snippet "u" } " and " { $snippet "v" } " component-wise." } ;
@ -276,6 +287,10 @@ HELP: v/
{ $description "Divides " { $snippet "u" } " by " { $snippet "v" } " component-wise." }
{ $errors "May throw an error if a division by zero occurs; see " { $link "division-by-zero" } "." } ;
HELP: v^
{ $values { "u" "a sequence of numbers" } { "v" "a sequence of numbers" } { "w" "a sequence of numbers" } }
{ $description "Raises " { $snippet "u" } " to the power of " { $snippet "v" } " component-wise." } ;
HELP: vmax
{ $values { "u" "a sequence of real numbers" } { "v" "a sequence of real numbers" } { "w" "a sequence of real numbers" } }
{ $description "Creates a sequence where each element is the maximum of the corresponding elements from " { $snippet "u" } " and " { $snippet "v" } "." }

View File

@ -8,6 +8,10 @@ SPECIALIZED-ARRAY: int
[ { 1 2 3 } ] [ { 2 4 6 } 2 v/n ] unit-test
[ { 1/1 1/2 1/3 } ] [ 1 { 1 2 3 } n/v ] unit-test
{ { 1 4 27 } } [ { 1 2 3 } { 1 2 3 } v^ ] unit-test
{ { 1 4 9 } } [ { 1 2 3 } 2 v^n ] unit-test
{ { 2 4 8 } } [ 2 { 1 2 3 } n^v ] unit-test
[ 5 ] [ { 1 2 } norm-sq ] unit-test
[ 13 ] [ { 2 3 } norm-sq ] unit-test

View File

@ -57,6 +57,15 @@ M: object v*hs+ [ * ] 2map (h+) ; inline
GENERIC: v/ ( u v -- w )
M: object v/ [ / ] 2map ; inline
GENERIC: v^ ( u v -- w )
M: object v^ [ ^ ] 2map ; inline
GENERIC: v^n ( u n -- w )
M: object v^n [ ^ ] curry map ; inline
GENERIC: n^v ( n v -- w )
M: object n^v [ ^ ] with map ; inline
GENERIC: vavg ( u v -- w )
M: object vavg [ + 2 / ] 2map ; inline