]> gitweb.factorcode.org Git - factor.git/commitdiff
finished erg's math cleanup
authorSlava Pestov <slava@factorcode.org>
Fri, 21 Oct 2005 06:46:54 +0000 (06:46 +0000)
committerSlava Pestov <slava@factorcode.org>
Fri, 21 Oct 2005 06:46:54 +0000 (06:46 +0000)
contrib/README.txt
contrib/math/load.factor
contrib/math/test.factor
library/bootstrap/boot-stage1.factor
library/math/quaternions.factor [deleted file]
library/test/math/matrices.factor [deleted file]
library/test/math/quaternions.factor [deleted file]
library/test/test.factor

index beead44abfa6220954d4c9ef66e23b0d60b27ab0..d19cfccaa77e81350f33ef3155df771a5d848523 100644 (file)
@@ -29,3 +29,5 @@ library, but is useful enough to ship with the Factor distribution.
 - contrib/xml.factor -- XML parser and writer (Daniel Ehrenberg)
 
 - contrib/cairo/ -- cairo bindings (Sampo Vuori)
+
+- contrib/math/ -- extended math library (Doug Coleman)
index 626f7034d1c14e8927649992f26e007543a0d3e9..aae78c49251292869a65733e18d762fc1ac3e293 100644 (file)
@@ -4,6 +4,8 @@ USING: parser sequences words compiler ;
     "contrib/math/combinatorics.factor"
     "contrib/math/analysis.factor"
     "contrib/math/polynomial.factor"
+    "contrib/math/quaternions.factor"
+    "contrib/math/matrices.factor"
 
     ! "contrib/math/dimensions.factor"
     ! "contrib/math/constants.factor"
index 4df209f6f3031a28ca2aafe849daf43fbc682db7..80307d12578c6a0b7d2860f9419e14967b324ecb 100644 (file)
@@ -70,3 +70,139 @@ USING: kernel math test sequences ;
 [ t ] [ 11 gammaln 15.1044 - abs .0001 < ] unit-test
 [ t ] [ 9000000000000000000000000000000000000000000 gammaln 8.811521863477754e+44 - abs 5.387515050969975e+30 < ] unit-test
 
+[ 1 ] [ qi norm ] unit-test
+[ 1 ] [ qj norm ] unit-test
+[ 1 ] [ qk norm ] unit-test
+[ 1 ] [ q1 norm ] unit-test
+[ 0 ] [ q0 norm ] unit-test
+[ t ] [ qi qj q* qk = ] unit-test
+[ t ] [ qj qk q* qi = ] unit-test
+[ t ] [ qk qi q* qj = ] unit-test
+[ t ] [ qi qi q* q1 v+ q0 = ] unit-test
+[ t ] [ qj qj q* q1 v+ q0 = ] unit-test
+[ t ] [ qk qk q* q1 v+ q0 = ] unit-test
+[ t ] [ qi qj qk q* q* q1 v+ q0 = ] unit-test
+[ t ] [ i qj n*v qk = ] unit-test
+[ t ] [ qj i q*n qk v+ q0 = ] unit-test
+[ t ] [ qk qj q/ qi = ] unit-test
+[ t ] [ qi qk q/ qj = ] unit-test
+[ t ] [ qj qi q/ qk = ] unit-test
+[ t ] [ qi q>v v>q qi = ] unit-test
+[ t ] [ qj q>v v>q qj = ] unit-test
+[ t ] [ qk q>v v>q qk = ] unit-test
+[ t ] [ 1 c>q q1 = ] unit-test
+[ t ] [ i c>q qi = ] unit-test
+
+[
+    @{ @{ 0 }@ @{ 0 }@ @{ 0 }@ }@
+] [
+    3 1 zero-matrix
+] unit-test
+
+[
+    @{ @{ 1 0 0 }@
+       @{ 0 1 0 }@
+       @{ 0 0 1 }@ }@
+] [
+    3 identity-matrix
+] unit-test
+
+[
+    @{ @{ 1 0 4 }@
+       @{ 0 7 0 }@
+       @{ 6 0 3 }@ }@
+] [
+    @{ @{ 1 0 0 }@
+       @{ 0 2 0 }@
+       @{ 0 0 3 }@ }@
+       
+    @{ @{ 0 0 4 }@
+       @{ 0 5 0 }@
+       @{ 6 0 0 }@ }@
+
+    m+
+] unit-test
+
+[
+    @{ @{ 1 0 4 }@
+       @{ 0 7 0 }@
+       @{ 6 0 3 }@ }@
+] [
+    @{ @{ 1 0 0 }@
+       @{ 0 2 0 }@
+       @{ 0 0 3 }@ }@
+       
+    @{ @{ 0 0 -4 }@
+       @{ 0 -5 0 }@
+       @{ -6 0 0 }@ }@
+
+    m-
+] unit-test
+
+[
+    @{ 10 20 30 }@
+] [
+    10 @{ 1 2 3 }@ n*v
+] unit-test
+
+[
+    @{ 3 4 }@
+] [
+    @{ @{ 1 0 }@
+       @{ 0 1 }@ }@
+
+    @{ 3 4 }@
+
+    m.v
+] unit-test
+
+[
+    @{ 4 3 }@
+] [
+    @{ @{ 0 1 }@
+       @{ 1 0 }@ }@
+
+    @{ 3 4 }@
+
+    m.v
+] unit-test
+
+[ @{ 0 0 1 }@ ] [ @{ 1 0 0 }@ @{ 0 1 0 }@ cross ] unit-test
+[ @{ 1 0 0 }@ ] [ @{ 0 1 0 }@ @{ 0 0 1 }@ cross ] unit-test
+[ @{ 0 1 0 }@ ] [ @{ 0 0 1 }@ @{ 1 0 0 }@ cross ] unit-test
+
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ ]
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip flip ]
+unit-test
+
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ flip flip ]
+unit-test
+
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip ]
+unit-test
+
+[
+    @{ @{ 6 }@ }@
+] [
+    @{ @{ 3 }@ }@ @{ @{ 2 }@ }@ m.
+] unit-test
+
+[
+    @{ @{ 11 }@ }@
+] [
+    @{ @{ 1 3 }@ }@ @{ @{ 5 }@ @{ 2 }@ }@ m.
+] unit-test
+
+[
+    @{ @{ 28 }@ }@
+] [
+    @{ @{ 2 4 6 }@ }@
+
+    @{ @{ 1 }@
+       @{ 2 }@
+       @{ 3 }@ }@
+    
+    m.
+] unit-test
index db2721737943de1947b49a56f5032853fb2a52f8..30ff1f35113796468ae9e52e363dfbf1670f3078 100644 (file)
@@ -56,8 +56,7 @@ sequences io vectors words ;
         "/library/math/pow.factor"
         "/library/math/trig-hyp.factor"
         "/library/math/arc-trig-hyp.factor"
-        "/library/math/matrices.factor"
-        "/library/math/quaternions.factor"
+        "/library/math/vectors.factor"
         "/library/math/parse-numbers.factor"
 
         "/library/words.factor"
diff --git a/library/math/quaternions.factor b/library/math/quaternions.factor
deleted file mode 100644 (file)
index b9cdb90..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-
-! Everybody's favorite non-commutative skew field, the
-! quaternions!
-
-! Quaternions are represented as pairs of complex numbers,
-! using the identity: (a+bi)+(c+di)j = a+bi+cj+dk.
-USING: arrays kernel math sequences ;
-IN: math-internals
-
-: 2q [ first2 ] 2apply ; inline
-
-: q*a 2q swapd ** >r * r> - ; inline
-
-: q*b 2q >r ** swap r> * + ; inline
-
-IN: math
-
-: q* ( u v -- u*v )
-    #! Multiply quaternions.
-    [ q*a ] 2keep q*b 2array ;
-
-: qconjugate ( u -- u' )
-    #! Quaternion conjugate.
-    first2 neg >r conjugate r> 2array ;
-
-: qrecip ( u -- 1/u )
-    #! Quaternion inverse.
-    qconjugate dup norm-sq v/n ;
-
-: q/ ( u v -- u/v )
-    #! Divide quaternions.
-    qrecip q* ;
-
-: q*n ( q n -- q )
-    #! Note: you will get the wrong result if you try to
-    #! multiply a quaternion by a complex number on the right
-    #! using v*n. Use this word instead. Note that v*n with a
-    #! quaternion and a real is okay.
-    conjugate v*n ;
-
-: c>q ( c -- q )
-    #! Turn a complex number into a quaternion.
-    0 2array ;
-
-: v>q ( v -- q )
-    #! Turn a 3-vector into a quaternion with real part 0.
-    first3 rect> >r 0 swap rect> r> 2array ;
-
-: q>v ( q -- v )
-    #! Get the vector part of a quaternion, discarding the real
-    #! part.
-    first2 >r imaginary r> >rect 3array ;
-
-: cross ( u v -- u*v )
-    #! Cross product of two 3-vectors can be computed using
-    #! quaternion multiplication.
-    [ v>q ] 2apply q* q>v ;
-
-! Zero
-: q0 @{ 0 0 }@ ;
-
-! Units
-: q1 @{ 1 0 }@ ;
-: qi @{ #{ 0 1 }# 0 }@ ;
-: qj @{ 0 1 }@ ;
-: qk @{ 0 #{ 0 1 }# }@ ;
-
-! Euler angles -- see
-! http://www.mathworks.com/access/helpdesk/help/toolbox/aeroblks/euleranglestoquaternions.html
-
-: (euler) ( theta unit -- q )
-    >r -0.5 * dup cos c>q swap sin r> n*v v- ;
-
-: euler ( phi theta psi -- q )
-    qk (euler) >r qj (euler) >r qi (euler) r> q* r> q* ;
diff --git a/library/test/math/matrices.factor b/library/test/math/matrices.factor
deleted file mode 100644 (file)
index dbd27f1..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-IN: temporary
-USING: kernel lists math matrices namespaces sequences test
-vectors ;
-
-[
-    @{ @{ 0 }@ @{ 0 }@ @{ 0 }@ }@
-] [
-    3 1 zero-matrix
-] unit-test
-
-[
-    @{ @{ 1 0 0 }@
-       @{ 0 1 0 }@
-       @{ 0 0 1 }@ }@
-] [
-    3 identity-matrix
-] unit-test
-
-[
-    @{ @{ 1 0 4 }@
-       @{ 0 7 0 }@
-       @{ 6 0 3 }@ }@
-] [
-    @{ @{ 1 0 0 }@
-       @{ 0 2 0 }@
-       @{ 0 0 3 }@ }@
-       
-    @{ @{ 0 0 4 }@
-       @{ 0 5 0 }@
-       @{ 6 0 0 }@ }@
-
-    m+
-] unit-test
-
-[
-    @{ @{ 1 0 4 }@
-       @{ 0 7 0 }@
-       @{ 6 0 3 }@ }@
-] [
-    @{ @{ 1 0 0 }@
-       @{ 0 2 0 }@
-       @{ 0 0 3 }@ }@
-       
-    @{ @{ 0 0 -4 }@
-       @{ 0 -5 0 }@
-       @{ -6 0 0 }@ }@
-
-    m-
-] unit-test
-
-[
-    @{ 10 20 30 }@
-] [
-    10 @{ 1 2 3 }@ n*v
-] unit-test
-
-[
-    @{ 3 4 }@
-] [
-    @{ @{ 1 0 }@
-       @{ 0 1 }@ }@
-
-    @{ 3 4 }@
-
-    m.v
-] unit-test
-
-[
-    @{ 4 3 }@
-] [
-    @{ @{ 0 1 }@
-       @{ 1 0 }@ }@
-
-    @{ 3 4 }@
-
-    m.v
-] unit-test
-
-[ @{ 0 0 1 }@ ] [ @{ 1 0 0 }@ @{ 0 1 0 }@ cross ] unit-test
-[ @{ 1 0 0 }@ ] [ @{ 0 1 0 }@ @{ 0 0 1 }@ cross ] unit-test
-[ @{ 0 1 0 }@ ] [ @{ 0 0 1 }@ @{ 1 0 0 }@ cross ] unit-test
-
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ ]
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip flip ]
-unit-test
-
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ flip flip ]
-unit-test
-
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip ]
-unit-test
-
-[
-    @{ @{ 6 }@ }@
-] [
-    @{ @{ 3 }@ }@ @{ @{ 2 }@ }@ m.
-] unit-test
-
-[
-    @{ @{ 11 }@ }@
-] [
-    @{ @{ 1 3 }@ }@ @{ @{ 5 }@ @{ 2 }@ }@ m.
-] unit-test
-
-[
-    @{ @{ 28 }@ }@
-] [
-    @{ @{ 2 4 6 }@ }@
-
-    @{ @{ 1 }@
-       @{ 2 }@
-       @{ 3 }@ }@
-    
-    m.
-] unit-test
diff --git a/library/test/math/quaternions.factor b/library/test/math/quaternions.factor
deleted file mode 100644 (file)
index 0039249..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-IN: temporary
-USING: kernel math test ;
-
-[ 1 ] [ qi norm ] unit-test
-[ 1 ] [ qj norm ] unit-test
-[ 1 ] [ qk norm ] unit-test
-[ 1 ] [ q1 norm ] unit-test
-[ 0 ] [ q0 norm ] unit-test
-[ t ] [ qi qj q* qk = ] unit-test
-[ t ] [ qj qk q* qi = ] unit-test
-[ t ] [ qk qi q* qj = ] unit-test
-[ t ] [ qi qi q* q1 v+ q0 = ] unit-test
-[ t ] [ qj qj q* q1 v+ q0 = ] unit-test
-[ t ] [ qk qk q* q1 v+ q0 = ] unit-test
-[ t ] [ qi qj qk q* q* q1 v+ q0 = ] unit-test
-[ t ] [ i qj n*v qk = ] unit-test
-[ t ] [ qj i q*n qk v+ q0 = ] unit-test
-[ t ] [ qk qj q/ qi = ] unit-test
-[ t ] [ qi qk q/ qj = ] unit-test
-[ t ] [ qj qi q/ qk = ] unit-test
-[ t ] [ qi q>v v>q qi = ] unit-test
-[ t ] [ qj q>v v>q qj = ] unit-test
-[ t ] [ qk q>v v>q qk = ] unit-test
-[ t ] [ 1 c>q q1 = ] unit-test
-[ t ] [ i c>q qi = ] unit-test
index 0e2aed67a229c81066e03093b4c76129359991d3..e6398f206e0002d2616941b172059bc2a7836181 100644 (file)
@@ -87,8 +87,8 @@ SYMBOL: failures
         "words" "prettyprint" "random"
         "stream" "math/bitops"
         "math/math-combinators" "math/rational" "math/float"
-        "math/complex" "math/quaternions" "math/irrational"
-        "math/integer" "math/matrices"
+        "math/complex" "math/irrational"
+        "math/integer"
         "httpd/url-encoding" "httpd/html" "httpd/httpd"
         "httpd/http-client" "threads" "parsing-word"
         "inference" "interpreter" "alien"