Go to the previous, next section.

### Linear Algebra Operations

The `matrix` class stores both the elements of the matrix and the LU decomposition. A single `fract_matrix` is used to store the lower-triangular (L) and upper-triangular (U) matrices. The class also keeps track of which columns are pivot columns, and which columns where permuted to compute the LU decomposition. Whenever any of the elements in the matrix are changed, the LU decomposition of the matrix is marked invalid. Whenever the LU decomposition is needed, it is recalculated if currently invalid. The `is_factored` method checks if the LU decomposition is up-to-date. The `factor` method is called to calculate the LU decomposition; it will only do the calculation if the current decomposition is not valid.

The `is_pivot` method returns `TRUE` if its integer argument is a pivot column in the LU decomposition. The `rank` method returns the integer rank of the matrix. Also, the methods `full_row_rank` and `full_column_rank` check if the rank of the matrix is equal to the number of row or columns, respectively.

The method `inverse` returns the inverse of the current matrix. (the matrix must be non-singular and square).

The method `range` returns the `vector_space` (see section Vector Spaces for Linear Algebra) that corresponds to the column space, or range, of the matrix. The column space of a matrix contains all the points that are combinations of its columns (i.e. all points `b` such that `Ax = b`). The method `kernel` returns a `vector_space` representing the null-space, or kernel of the matrix. The kernel of a matrix `A` is the set of all vectors `x` such that `Ax = 0`. If `A` is an `m` by `n` matrix with rank `r`, then the kernel has dimension `n - r`. See section Vector Spaces for Linear Algebra. For example, given the following matrix:

```[ 1 4 0 ]
[ 0 3 0 ]
```

The kernel is:

```{(0, 0, 1)}
```

For the matrix `A`, the method `particular_solution` returns the particular solution to the equation `Ax = b`. If a single solution exists to this equation, then the particular solution is simply the one solution. If infinite solutions exist, then the particular solution is the solution with all free variables set to 0. In general, all possible solutions to the equation can be represented as the sum of the particular solution and a solution to `Ax = 0`. The method takes as arguments the `fract_vector` `b` and a boolean valid flag. If a solution was found, the flag is set to `TRUE` and the `fract_vector` `x` is returned. If no solution exists, then the flag is set to `FALSE`. For example given the equation:

```[ 4 3 8 2 ]      [ 1 ]
[ 0 0 3 1 ] x =  [ 4 ]
[ 0 0 0 0 ]      [ 0 ]
```

The particular solution is:

```[ -29/12 ]
[    0   ]
[   4/3  ]
[    0   ]
```

Go to the previous, next section.