Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.

Close

Tree [fbdf29] automake-branch automake-snapshot-2011-01-25-1327 /
History



File Date Author Commit
LAPACK 2011-01-25 Raymond Toy Raymond Toy [89d1ab] Ignore some files.
bin 2009-09-01 Raymond Toy Raymond Toy [3fc88b] Ignore sse2f.
dfftpack 2011-01-25 Raymond Toy Raymond Toy [89d1ab] Ignore some files.
lib 2011-01-25 Raymond Toy Raymond Toy [2ddf76] Makefile.am:
lib-src 2011-01-25 Raymond Toy Raymond Toy [89d1ab] Ignore some files.
src 2011-01-25 Raymond Toy Raymond Toy [f443af] Use cl:real instead of real.
AUTHORS 2011-01-25 Raymond Toy Raymond Toy [db80bf] Initial version.
COPYING 2011-01-25 Raymond Toy Raymond Toy [db80bf] Initial version.
COPYRIGHT 2000-04-13 simsek simsek [9894bf] This is the Matlisp copyright.
ChangeLog 2011-01-25 Raymond Toy Raymond Toy [db80bf] Initial version.
HOWTO 2000-07-11 simsek simsek [e36834] *** empty log message ***
INSTALL 2011-01-25 Raymond Toy Raymond Toy [c918b8] Mention autoreconf.
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...
Makefile.am 2011-01-25 Raymond Toy Raymond Toy [2ddf76] Makefile.am:
NEWS 2011-01-25 Raymond Toy Raymond Toy [db80bf] Initial version.
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.lisp.in 2011-01-25 Raymond Toy Raymond Toy [de6a7f] config.lisp.in:
config.sub 2005-06-19 Raymond Toy Raymond Toy [70b149] I don't really remember, but I think this is an...
configure 2011-01-25 Raymond Toy Raymond Toy [fbdf29] Regenerated.
configure.ac 2011-01-25 Raymond Toy Raymond Toy [de6a7f] config.lisp.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 2011-01-25 Raymond Toy Raymond Toy [de6a7f] config.lisp.in:
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....
start.lisp.in 2011-01-25 Raymond Toy Raymond Toy [43b699] Add translation for builddir so we can get acce...
system.dcl 2011-01-25 Raymond Toy Raymond Toy [dbef02] o Rearrange paths sos that we can do a parallel...

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).