@code{(require 'determinant)}
@ftindex determinant

@noindent
A Matrix can be either a list of lists (rows) or an array.
Unlike linear-algebra texts, this package uses 0-based coordinates.


@defun matrix->lists matrix

Returns the list-of-lists form of @var{matrix}.
@end defun


@defun matrix->array matrix

Returns the array form of @var{matrix}.
@end defun


@defun determinant matrix

@var{matrix} must be a square matrix.
@code{determinant} returns the determinant of @var{matrix}.

@example
(require 'determinant)
(determinant '((1 2) (3 4))) @result{} -2
(determinant '((1 2 3) (4 5 6) (7 8 9))) @result{} 0
@end example
@end defun


@defun transpose matrix

Returns a copy of @var{matrix} flipped over the diagonal containing the 1,1
element.
@end defun


@defun matrix:sum m1 m2

Returns the element-wise sum of matricies @var{m1} and @var{m2}.
@end defun


@defun matrix:difference m1 m2

Returns the element-wise difference of matricies @var{m1} and @var{m2}.
@end defun


@defun matrix:product m1 m2

Returns the product of matrices @var{m1} and @var{m2}.

@defunx matrix:product m1 z
Returns matrix @var{m1} times scalar @var{z}.

@defunx matrix:product z m1
Returns matrix @var{m1} times scalar @var{z}.
@end defun


@defun matrix:inverse matrix

@var{matrix} must be a square matrix.
If @var{matrix} is singular, then @code{matrix:inverse} returns #f; otherwise @code{matrix:inverse} returns the
@code{matrix:product} inverse of @var{matrix}.
@end defun

