## Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

This page is maintained in the package's 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

*[record]*

`(define-structure line-segment p q)`

*[procedure]*

`(p l)`

*[procedure]*

`(q l)`

*[procedure]*

`(collinear? l1 l2)`

*[procedure]*

`(point-on-line-segment? r l)`

*[procedure]*

`(intersection-point l1 l2)`

*[procedure]*

`(cross? l1 l2)`

*[procedure]*

`(intersect? l1 l2)`

*[procedure]*

`(line-tangent l)`

*[procedure]*

`(normal-2d l)`

*[procedure]*

`(line-segment-length l)`

*[procedure]*

`(read-line-segments-from-file pathname)`

*[procedure]*

`(write-line-segments-to-file line-segments pathname)`

### Vectors

*[procedure]*

`(x v)`

*[procedure]*

`(y v)`

*[procedure]*

`(z v)`

*[procedure]*

`(dot u v)`

*[procedure]*

`(cross-2d u v)`

*[procedure]*

`(cross u v)`

*[procedure]*

`(v+ u v)`

*[procedure]*

`(v- u v)`

*[procedure]*

`(k*v k v)`

*[procedure]*

`(v*k v k)`

*[procedure]*

`(k+v k v)`

*[procedure]*

`(v+k v k)`

*[procedure]*

`(v/k v k)`

*[procedure]*

`(v* u v)`

*[procedure]*

`(v/ u v)`

*[procedure]*

`(v= u v)`

*[procedure]*

`(rotate-90 u)`

*[procedure]*

`(rotate-180 u)`

*[procedure]*

`(rotate-270 u)`

*[procedure]*

`(perpendicular? u v)`

*[procedure]*

`(parallel? u v)`

*[procedure]*

`(magnitude-squared v)`

*[procedure]*

`(magnitude v)`

*[procedure]*

`(unit v)`

*[procedure]*

`(distance-squared u v)`

*[procedure]*

`(distance u v)`

*[procedure]*

`(clockwise-angle? u v w)`

*[procedure]*

`(clockwise-or-same-angle? u v w)`

*[procedure]*

`(append-vector vec1 vec2)`

### Matrices

*[procedure]*

`(matrix? v)`

*[procedure]*

`(list->matrix l)`

*[procedure]*

`(make-matrix m n . &rest)`

*[procedure]*

`(make-3-by-3-matrix a11 a12 a13 a21 a22 a23 a31 a32 a33)`

*[procedure]*

`(matrix-copy m)`

*[procedure]*

`(matrix-rows a)`

*[procedure]*

`(matrix-columns a)`

*[procedure]*

`(matrix-ref a i j)`

*[procedure]*

`(matrix-set! a i j x)`

*[procedure]*

`(matrix-row-ref a i)`

*[procedure]*

`(matrix-column-ref a j)`

*[procedure]*

`(matrix-row-set! a i v)`

*[procedure]*

`(vector->row-matrix v)`

*[procedure]*

`(vector->column-matrix v)`

*[procedure]*

`(m+ a b)`

*[procedure]*

`(m- a b)`

*[procedure]*

`(m+k m k)`

*[procedure]*

`(m+k-diagonal m k)`

*[procedure]*

`(k+m k m)`

*[procedure]*

`(m*v a v)`

*[procedure]*

`(matrix-transpose a)`

*[procedure]*

`(outer-product f u v)`

*[procedure]*

`(self-outer-product f v)`

*[procedure]*

`(m* a b)`

*[procedure]*

`(m*. a b)`

*[procedure]*

`(m/. a b)`

*[procedure]*

`(v*m v a)`

*[procedure]*

`(k*m k m)`

*[procedure]*

`(m*k m k)`

*[procedure]*

`(m/k m k)`

*[procedure]*

`(v*m*v v m)`

*[procedure]*

`(determinant a)`

*[procedure]*

`(invert-matrix a)`

*[procedure]*

`(simplex a m1 m2 m3)`

*[procedure]*

`(jacobi a)`

*[procedure]*

`(eigenvalues a)`

*[procedure]*

`(eigenvectors a)`

*[procedure]*

`(vector->diagonal-matrix v)`

*[procedure]*

`(identity-matrix n)`

*[procedure]*

`(clip-eigenvalues a v)`

*[procedure]*

`(eigenvector-angle1 m)`

*[procedure]*

`(eigenvector-angle2 m)`

*[procedure]*

`(left-pseudo-inverse m)`

*[procedure]*

`(right-pseudo-inverse m)`

*[procedure]*

`(ref-1d m a)`

*[procedure]*

`(ref-2d m a b)`

*[procedure]*

`(ref-3d m a b c)`

*[procedure]*

`(ref-4d m a b c d)`

*[procedure]*

`(ref-5d m a b c d e)`

*[procedure]*

`(map-n-vector-2d f m n)`

*[procedure]*

`(map-n-vector-3d f m n p)`

*[procedure]*

`(map-n-vector-4d f m n p q)`

*[procedure]*

`(map-n-vector-5d f m n p q r)`

*[procedure]*

`(matrix-sum f n i)`

*[procedure]*

`(matrix-sum-2d f m n i)`

*[procedure]*

`(shape-matrix v c)`

*[procedure]*

`(unshape-matrix m)`

*[procedure]*

`(crop m x y w h)`

*[procedure]*

`(submatrix m x-offset y-offset x-size y-size)`

*[procedure]*

`(matrix-ref-nd m . is)`

*[procedure]*

`(matrix-3d-ref a s i j)`

*[procedure]*

`(matrix-set-nd! m v . is)`

*[procedure]*

`(matrix-3d-set! a v s i j)`

*[procedure]*

`(map-matrix-nd f m n)`

*[procedure]*

`(for-each-matrix-nd f m n)`

*[procedure]*

`(map-matrix f m)`

*[procedure]*

`(for-each-matrix f m)`

*[procedure]*

`(map-matrix-3d f m)`

*[procedure]*

`(for-each-matrix-3d f m)`

*[procedure]*

`(map-n-matrix f i j)`

*[procedure]*

`(for-each-n-matrix f i j)`

*[procedure]*

`(map-indexed-matrix f m)`

*[procedure]*

`(for-each-indexed-matrix f m)`

*[procedure]*

`(map-indexed-matrix-3d f p)`

*[procedure]*

`(for-each-indexed-matrix-3d f p)`

### Sparse matrices

*[record]*

`(define-structure sparse-matrix row column blank)`

*[record]*

`(define-structure sparse-matrix-row element i up down)`

*[record]*

`(define-structure sparse-matrix-column element j left right)`

*[record]*

`(define-structure sparse-matrix-element value i up down j left right)`

*[procedure]*

`(create-sparse-matrix blank)`

*[procedure]*

`(sparse-matrix-ref sparse-matrix i j)`

### Traversal

*[procedure]*

`(every-n-2d p v w)`

*[procedure]*

`(every-n-3d p v w x)`

*[procedure]*

`(every-n-4d p v w x y)`

*[procedure]*

`(every-n-5d p v w x y z)`

*[procedure]*

`(product-2d f m n)`

*[procedure]*

`(sum-2d f m n)`

*[procedure]*

`(sum-3d f m n p)`

*[procedure]*

`(sum-4d f m n p q)`

*[procedure]*

`(sum-pairs f m)`

*[procedure]*

`(vector-sum f n i)`

*[procedure]*

`(vector-sum-2d f m n i)`

*[procedure]*

`(sum-f f l)`

*[procedure]*

`(sum-vector v)`

*[procedure]*

`(sum-vector-f f v)`

### Statistics

*[procedure]*

`(list-mean p)`

*[procedure]*

`(list-covariance l)`

*[procedure]*

`(list-variance s)`

*[procedure]*

`(list-skewness l)`

*[procedure]*

`(list-kurtosis l)`

*[procedure]*

`(list-correlation l1 l2)`

*[procedure]*

`(vector-mean v)`

*[procedure]*

`(vector-variance v)`

*[procedure]*

`(vector-skewness v)`

*[procedure]*

`(vector-kurtosis v)`

*[procedure]*

`(vector-correlation v1 v2)`

*[procedure]*

`(coefficient-of-bimodality v)`

*[procedure]*

`(vectors-mean values)`

*[procedure]*

`(vectors-variance mu values)`

*[procedure]*

`(mahalanobis-distance val mu isigma)`

*[procedure]*

`(frequencies l)`

### Misc

*[parameter]*

`*linear-algebra:epsilon*`

*[constant]*

`pi`

*[constant]*

`half-pi`

*[constant]*

`two-pi`

*[constant]*

`minus-pi`

*[constant]*

`two-pi/360`

*[constant]*

`three-sixty/two-pi`

*[procedure]*

`(sqr x)`

*[procedure]*

`(quadratic1 a b c)`

*[procedure]*

`(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.