Tree [b58600] automake-branch-start /
 History



File Date Author Commit
 LAPACK 2001-03-08 Raymond Toy Raymond Toy [cf5aed] Upgrade to LAPACK 3.0, May 31, 2000.
 bin 2009-09-01 Raymond Toy Raymond Toy [3fc88b] Ignore sse2f.
 dfftpack 2000-05-05 simsek simsek [0d562c] o DFFTPACK Fortran source code
 lib 2005-06-24 Raymond Toy Raymond Toy [7bcd78] Update for CMUCL with linkage tables. In this ...
 lib-src 2004-05-24 Raymond Toy Raymond Toy [02beae] More SBCL support from Robert Sedgewick. The p...
 src 2010-12-12 Raymond Toy Raymond Toy [5e4897] matrix.lisp:
 COPYRIGHT 2000-04-13 simsek simsek [9894bf] This is the Matlisp copyright.
 HOWTO 2000-07-11 simsek simsek [e36834] *** empty log message ***
 INSTALL 2005-08-19 Raymond Toy Raymond Toy [2113ff] Compile dlamch without optimization because the...
 ISSUES 2001-03-07 Raymond Toy Raymond Toy [e6b95d] Initial version.
 Makefile 2001-04-25 Raymond Toy Raymond Toy [b97d10] Don't remove config.status and config.log for m...
 README 2000-07-11 simsek simsek [b72e6a] *** empty log message ***
 blas.system 2000-06-19 Raymond Toy Raymond Toy [299981] Simple defsystem for blas.
 config.guess 2005-06-19 Raymond Toy Raymond Toy [70b149] I don't really remember, but I think this is an...
 config.lisp 2003-06-27 Raymond Toy Raymond Toy [452c78] The package is COMMON-LISP-USER, not USER.
 config.sub 2005-06-19 Raymond Toy Raymond Toy [70b149] I don't really remember, but I think this is an...
 configure 2011-01-16 Raymond Toy Raymond Toy [b58600] Regenerate.
 configure.in 2011-01-16 Raymond Toy Raymond Toy [da2dbf] configure.in:
 defsystem.lisp 2006-06-01 Raymond Toy Raymond Toy [2ccb1f] Update to latest version in clocc. Builds ok w...
 dfftpack.system 2000-06-19 Raymond Toy Raymond Toy [f460ba] Simple defsystem for FFTPACK..
 fortran.system 2000-06-19 Raymond Toy Raymond Toy [3d34c8] Simple defsystem for all of the Fortran code in...
 gpl.txt 2000-04-13 simsek simsek [6e3068] This is GPL that needs to be distributed with '...
 install-sh 2000-04-13 simsek simsek [ddaad2] A script used by 'configure'
 lapack.system 2000-06-19 Raymond Toy Raymond Toy [42335f] Simple defsystem for LAPACK.
 matlisp.mk.in 2011-01-16 Raymond Toy Raymond Toy [da2dbf] configure.in:
 packages.lisp 2009-08-19 Raymond Toy Raymond Toy [9dc3a6] Add support for interfacing to potrf and potrs....
 purgargs.awk 2000-07-11 simsek simsek [56fba8] o Initial revision
 save.lisp 2005-01-27 Raymond Toy Raymond Toy [779db7] %TOP-LEVEL is in the LISP package, not CL.
 start.lisp 2009-08-19 Raymond Toy Raymond Toy [9dc3a6] Add support for interfacing to potrf and potrs....
 system.dcl 2009-08-19 Raymond Toy Raymond Toy [9dc3a6] Add support for interfacing to potrf and potrs....

Read Me

MatLisp - a Matrix package for CMU Lisp


What is MatLisp?
----------------

MatLisp is a set of CLOS classes for handling matrices with
real-valued or complex-valued elements.  The classes allow a simple
and consistent interface to matrix operations such as add, subtrace,
multiple, and divide. 

However, a implementation of the matrix operations entirely in Lisp
could have been done, but such an approach completely ignores the
excellent packages available for matrices.  In particular, LAPACK is
used to handle the matrix operations.

Thus, MatLisp supplies a set of wrapper classes and functions around
the core LAPACK routines.  


Why MatLisp?
------------

While MatLisp essentially supplies a wrapper around the LAPACK
routines, it is more than that.  You have at your disposable the
complete Lisp language and CLOS.  

This allows you to write clean, object-oriented code that can utilize
the LAPACK matrix routines.  Thus, you can think about your problem in
the natural way instead of trying to force-fit your problem in
matrices, like some other packages do.

What About Matlab, Rlab, Octave, etc?
-------------------------------------

While all of these are good at what they do, they all have a
fundamental limitation:  Everything is a matrix.  You have no
alternative.  Either you make your problem fit into a matrix, or you
can't use these languages.  The exception is Rlab, which does have
simple lists in addition to matrices.  However, that's as far as it goes.

MatLisp frees you from this limitation---you have at your disposal,
the complete functionality of Common Lisp, including structures, hash
tables, lists, arrays, and the Common Lisp Object System (CLOS).
MatLisp adds to this richness by giving you a matrix fast class based
on the well-known and well-tested LAPACK library.

Thus, you can think about your problem in the most natural way,
without having to force everything into a matrix.  If the natural way,
you can then use a matrix, and achieve performance close to Matlab and
the other languages.


How to Install
--------------
See the file INSTALL.

How to Use
----------

This is very short.  Here is a list of available routines

make-float-matrix
	create a float matrix
    (make-float-matrix n m)
	creates an n x m matrix initialize to zero.
    (make-float-matrix #2a(...))
	creates a matrix with the same dimensions as the array and
	initializes the matrix with those elements.
    (make-float-matrix '((...) (...) ...))
	creats a matrix of the appropriate dimensions and initializes
	it to the elements in the list.

make-complex-matrix
	create a complex matrix
    (make-complex-matrix n m)
	creates an n x m matrix initialize to zero.
    (make-complex-matrix #2a(...))
	creates a matrix with the same dimensions as the array and
	initializes the matrix with those elements.
    (make-complex-matrix '((...) (...) ...))
	creats a matrix of the appropriate dimensions and initializes
	it to the elements in the list.


[]
	create a float or complex matrix
    [1 2 ; 3 4]
	creates a 2x2 matrix
    [[1 3]' [2 4]']
        creates the same 2x2 matrix
    [[1 2] ; [3 4]]
   	creates the same 2x2 matrix

matrix-ref
	access the elements of the matrix.  Indices are 0-based.
    (matrix-ref mat r)
	access the array as if it were really 1-dimensional.  Matrix
	is stored in column-major order.
    (matrix-ref mat r c)
	access element r,c
    (matrix-ref mat ridx)
	if ridx is a matrix or a sequence, ridx is used as the indices
	to extract the corresponding elements from the matrix.

m+
	add two matrices

m-
	subtract two matrices.  If only one matrix is given, return
	the negative of the matrix.

m*
	multiply two matrices

m/
	divide two matrices.  (m/ a b) means the same as inv(B)*A.
	(m/ a) is the same as inv(A).