From aed6825b4a22bb71599e568265096a78f8517858 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 30 Jul 2012 16:15:00 -0700 Subject: [PATCH] math.vectors: implement v^, v^n, n^v. --- basis/math/vectors/vectors-docs.factor | 23 +++++++++++++++++++---- basis/math/vectors/vectors-tests.factor | 4 ++++ basis/math/vectors/vectors.factor | 9 +++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/basis/math/vectors/vectors-docs.factor b/basis/math/vectors/vectors-docs.factor index 05477952f6..0e0d05f5e9 100644 --- a/basis/math/vectors/vectors-docs.factor +++ b/basis/math/vectors/vectors-docs.factor @@ -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" } "." } diff --git a/basis/math/vectors/vectors-tests.factor b/basis/math/vectors/vectors-tests.factor index 826bbfb68c..cfc99459b2 100644 --- a/basis/math/vectors/vectors-tests.factor +++ b/basis/math/vectors/vectors-tests.factor @@ -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 diff --git a/basis/math/vectors/vectors.factor b/basis/math/vectors/vectors.factor index 93db261545..7dbea0cbfa 100644 --- a/basis/math/vectors/vectors.factor +++ b/basis/math/vectors/vectors.factor @@ -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