### 0.1. Determinant `(import (slib determinant))`

This library is a little misnamed. Apart from determinants, it also provides a range of functions on single and pairs of matrices.

All the functions take either a SRFI-63 array or a list of lists as the matrix definition.

#### 0.1.1. determinant

`determinant` returns the determinant of a given matrix.

```sash[r7rs]> (determinant '((1 2) (3 4)))
-2```

#### 0.1.2. matrix→array

`matrix→array` returns a SRFI-63 array from given matrix definition (e.g. list-of-lists):

```sash[r7rs]> (matrix->array '((1 2) (3 4)))
#<<array> 0x2a6a400>```

#### 0.1.3. matrix→lists

`matrix→lists` converts a given matrix definition into a list of lists:

```sash[r7rs]> (matrix->lists (matrix->array '((1 2) (3 4))))
((1 2) (3 4))
sash[r7rs]> (matrix->lists '((1 2) (3 4)))
((1 2) (3 4))```

#### 0.1.4. matrix:difference

`matrix:difference` takes two matrices of numbers and returns their element-wise difference. If the matrices are not of equal dimension, returns a matrix of the smallest size.

```sash[r7rs]> (matrix:difference '((1 2) (3 4)) '((5 6) (7 8)))
((-4 -4) (-4 -4))
sash[r7rs]> (matrix:difference '((1 2) (3 4)) '((5 6 7) (8 9 10)))
((-4 -4) (-5 -5))```

#### 0.1.5. matrix:inverse

`matrix:inverse` returns the inverse of a given square matrix. If the matrix is singular, the function returns `#f`.

```sash[r7rs]> (matrix:inverse '((1 2) (3 4)))
((-2 1) (3/2 -1/2))
sash[r7rs]> (matrix:inverse '((0 0) (0 0)))
#f```

#### 0.1.6. matrix:product

`matrix:product` takes two arguments, at least one of which must be a matrix. If the other argument is a scalar, returns the element-wise product of the scalar with the matrix. If the other argument is a matrix, returns the matrix product.

```sash[r7rs]> (matrix:product '((1 2) (3 4)) '((5 6) (7 8)))
((19 22) (43 50))
sash[r7rs]>  (matrix:product '((1 2) (3 4)) 2)
((2 4) (6 8))
sash[r7rs]> (matrix:product 2 '((1 2) (3 4)))
((2 4) (6 8))```

#### 0.1.7. matrix:sum

`matrix:sum` takes two matrices of numbers and returns their element-wise sum. If the matrices are not of equal dimension, returns a matrix of the smallest size.

```sash[r7rs]> (matrix:sum '((1 2) (3 4)) '((5 6) (7 8)))
((6 8) (10 12))
sash[r7rs]> (matrix:sum '((1 2 3) (4 5 6)) '((7 8) (9 10)))
((8 10) (13 15))```

#### 0.1.8. transpose

`transpose` returns a copy of the given matrix with entries flipped about the diagonal.

```sash[r7rs]> (transpose '((1 2 3) (4 5 6) (7 8 9)))
((1 4 7) (2 5 8) (3 6 9))```