linear algebra question



Question About Matrices: 

1)  A matrix is ALWAYS represented internally as a list of rows, each row
of which is a maxima list.

If M is a matrix then M[i] is the ith row, and hence a list.  Similarly
M[i,j] is an entry the i,j entry with 1,1 top left corner entry. 

2)  If you do transpose(x) and x is a matrix or list the result is always a matrix.
The case of x a list is a convenient way of building a column matrix

3)  To turn a matrix into a simple list of all the entries, with first row then
second row etc.. you could do:

ListMatrixEntries(m):=block([ans:[]],
       for v in m do ans:append(ans,v),
       ans);

ListMatrixEntries(matrix([a,b],[c,d]))==>[a,b,c,d]
ListMatrixEntries(transpose([a,b,c])) ==> [a,b,c]

In lisp to define the same thing you could do
(defun $LIST_MATRIX_ENTRIES (m)
   (or ($matrixp m) (error "not a matrix"))
   (cons '(mlist) (sloop for v in (cdr m) append (cdr v))))


I will add this function to maxima
since I know from experience it is useful.   I call it
$LIST_MATRIX_ENTRIES to be compatible with the usual conventions in maxima.

Note
(defun |$ListMatrixEntries| (m) ...) would have defined the one with the mixed
case name.