[[tags: egg math]] [[toc:]] This page is maintained in the package's [[https://github.com/abarbu/linear-algebra|github repository]]. == linear-algebra This implements various linear algebra and other math operations. Much of this code is originally from Jeff Siskind's QobiScheme. === Line segments (define-structure line-segment p q) (p l) (q l) (collinear? l1 l2) (point-on-line-segment? r l) (intersection-point l1 l2) (cross? l1 l2) (intersect? l1 l2) (line-tangent l) (normal-2d l) (line-segment-length l) (read-line-segments-from-file pathname) (write-line-segments-to-file line-segments pathname) === Vectors (x v) (y v) (z v) (dot u v) (cross-2d u v) (cross u v) (v+ u v) (v- u v) (k*v k v) (v*k v k) (k+v k v) (v+k v k) (v/k v k) (v* u v) (v/ u v) (v= u v) (rotate-90 u) (rotate-180 u) (rotate-270 u) (perpendicular? u v) (parallel? u v) (magnitude-squared v) (magnitude v) (unit v) (distance-squared u v) (distance u v) (clockwise-angle? u v w) (clockwise-or-same-angle? u v w) (append-vector vec1 vec2) === Matrices (matrix? v) (list->matrix l) (make-matrix m n . &rest) (make-3-by-3-matrix a11 a12 a13 a21 a22 a23 a31 a32 a33) (matrix-copy m) (matrix-rows a) (matrix-columns a) (matrix-ref a i j) (matrix-set! a i j x) (matrix-row-ref a i) (matrix-column-ref a j) (matrix-row-set! a i v) (vector->row-matrix v) (vector->column-matrix v) (m+ a b) (m- a b) (m+k m k) (k+m k m) (m*v a v) (transpose-matrix a) (outer-product f u v) (self-outer-product f v) (m* a b) (m*. a b) (m/. a b) (v*m v a) (k*m k m) (m*k m k) (m/k m k) (v*m*v v m) (determinant a) (invert-matrix a) (simplex a m1 m2 m3) (jacobi a) (eigenvalues a) (eigenvectors a) (vector->diagonal-matrix v) (identity-matrix n) (clip-eigenvalues a v) (eigenvector-angle1 m) (eigenvector-angle2 m) (left-pseudo-inverse m) (right-pseudo-inverse m) (ref-1d m a) (ref-2d m a b) (ref-3d m a b c) (ref-4d m a b c d) (ref-5d m a b c d e) (map-n-vector-2d f m n) (map-n-vector-3d f m n p) (map-n-vector-4d f m n p q) (map-n-vector-5d f m n p q r) (matrix-sum f n i) (matrix-sum-2d f m n i) (shape-matrix v c) (unshape-matrix m) (crop m x y w h) (matrix-ref-nd m . is) (matrix-3d-ref a s i j) (matrix-set-nd! m v . is) (matrix-3d-set! a v s i j) (map-matrix-nd f m n) (for-each-matrix-nd f m n) (map-matrix f m) (for-each-matrix f m) (map-matrix-3d f m) (for-each-matrix-3d f m) (map-n-matrix f i j) (for-each-n-matrix f i j) (map-indexed-matrix f m) (for-each-indexed-matrix f m) (map-indexed-matrix-3d f p) (for-each-indexed-matrix-3d f p) === Sparse matrices (define-structure sparse-matrix row column blank) (define-structure sparse-matrix-row element i up down) (define-structure sparse-matrix-column element j left right) (define-structure sparse-matrix-element value i up down j left right) (create-sparse-matrix blank) (sparse-matrix-ref sparse-matrix i j) === Traversal (every-n-2d p v w) (every-n-3d p v w x) (every-n-4d p v w x y) (every-n-5d p v w x y z) (product-2d f m n) (sum-2d f m n) (sum-3d f m n p) (sum-4d f m n p q) (sum-pairs f m) (vector-sum f n i) (vector-sum-2d f m n i) (sum-f f l) (sum-vector v) (sum-vector-f f v) === Statistics (list-mean p) (list-covariance l) (list-variance s) (list-skewness l) (list-kurtosis l) (list-correlation l1 l2) (vector-mean v) (vector-variance v) (vector-skewness v) (vector-kurtosis v) (vector-correlation v1 v2) (coefficient-of-bimodality v) (vectors-mean values) (vectors-variance mu values) (mahalanobis-distance val mu isigma) (frequencies l) === Misc *linear-algebra:epsilon* pi half-pi two-pi minus-pi two-pi/360 three-sixty/two-pi (sqr x) (quadratic1 a b c) (quadratic2 a b c) === License Copyright 2010-2012 Purdue University. All rights reserved. Contact Andrei Barbu, andrei@0xab.com. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses.