Matrix Operations

These are operations on matrices. The include the "simple" arithmetic operations (\+, \-, \*), as well as other standard matrix operations, such as inverse, transpose, augment, and gauss-jordan elimations.


\+[Method]

Adds two matrices.

Synopsis

\+ (matrix1, matrix2) => (summation-matrix)

Parameters

matrix1An instance of <matrix>.
matrix2An instance of <matrix>.

Return Values

summation-matrixAn instance of <matrix>.

Description

Adds two matrices. This is a binary operator that performs matrix addition on the matrices "matrix1" and "matrix2", storing the result in a new matrix "temp-mat", "temp-mat" is then returned on exit. Matrix addition is very simple, all it is is adding terms in corresponding positions


\-[Method]

Subtracts two matrices.

Synopsis

\- (matrix1, matrix2) => (difference-matrix)

Parameters

matrix1An instance of <matrix>.
matrix2An instance of <matrix>.

Return Values

difference-matrixAn instance of <matrix>.

Description

Matrix subtraction is (surprise) just like matrix addition, where the element i,j in (A - B) is (A[i,j] - B[i,j])


\*[Method]

Multiplies a matrix by a scalar.

Synopsis

\* (a, matrix1) => (product-matrix)

Parameters

aAn instance of <number>.
matrix1An instance of <matrix>.

Return Values

product-matrixAn instance of <matrix>.

Description

Multiplication of a matrix and a scalar quantity. This simply multiplies each element of the matrix by the scalar quantity.


\*[Method]

Multiplies a matrix by a scalar.

Synopsis

\* (a, matrix1) => (product-matrix)

Parameters

aAn instance of <number>.
matrix1An instance of <matrix>.

Return Values

product-matrixAn instance of <matrix>.

Description

Same as the above \*, with the opposite order of the parameters.


\*[Method]

Multiplies two matrices.

Synopsis

\* (matrix1, matrix2) => (mult-matrix)

Parameters

matrix1An instance of <number>.
matrix2An instance of <matrix>.

Return Values

mult-matrixAn instance of <matrix>.

Description

Multiplies two matrices. There are certain restrictions on what matrices can be multiplied. To multiply two matrices, the dimensions must be MxN for the first matrix, and NxP for the second. The result of the multiplication will be an MxP matrix. (Note, this implies A * B is not necessarily equal to B * A) The element i,j in A * B is the dot (inner) product of the ith row of A with the jth column of B. The dot product of a vector is the sum of the products of corresponding elements. That is, if vector V=[a,b,c,d] and vector W=[w,x,y,z] then V*W= aw + bx + cy + dz (Note that this is a scalar quantity).

The actual algorithm used was reproduced from Sedgewick's Algorithms, Ch. 36. Basically, the algorithm goes through the temporary matrix, filling out each element in the following way: For the i,jth element of the matrix, calculate the dot product an element at a time, by having a number k range from 0 to the dimension N of the matrix. Take A[i,k] and multiply it by B[k,j] to get one of the terms in the dot product. Continue this for each element in the MxP matrix to get the result.


augment-matrix[Method]

A special way to concatenate two matrices.

Synopsis

augment-matrix (matrix1, matrix2) => (augmented-matrix)

Parameters

matrix1An instance of <number>.
matrix2An instance of <matrix>.

Return Values

augmented-matrixAn instance of <matrix>.

Description

The augment-matrix procedure will take matrices A and B and return a matrix | A B |.


gauss-jordan[Method]

Does a Gauss-Jordan elimination on a matrix.

Synopsis

gauss-jordan (matrix1) => (solution-matrix)

Parameters

matrix1An instance of <number>.

Return Values

solution-matrixAn instance of <matrix>.

Description

This procedure does gauss-jordan elimation on a matrix of dimension N by N + 1. The first N columns are the coefficents in a set of simultaneous equations, and the last column is a solution vector. The matrix that is returned is an N by 1 matrix contaning the solution for each variable. For example, if you have a system of equations like this:

 2x + 4y - 2z = 2
 4x + 9y - 3z = 8
-2x - 3y + 7z = 10 
	  

The matrix representing this would be

|  2  4 -2  2 |
|  4  9 -3  8 |
| -2 -3  7 10 |
	  

The solution matrix returned would be:

| -1 |
|  2 |
|  2 |
	  

where x is -1, y is 2, and z is 2


inverse[Method]

Finds the inverse of a matrix.

Synopsis

inverse (matrix1) => (inverted-matrix)

Parameters

matrix1An instance of <number>.

Return Values

inverted-matrixAn instance of <matrix>.

Description

Finds the inverse of a matrix, by using a modified gauss-jordan elimination. Given any matrix, if there is an inverse, the inverse will be returned, otherwise, an error will be signalled. To determine the existance of an inverse, the algorithm finds the upper triangular matrix, and then multiplies all of the elements along the main diagonal. If the result of this multiplication is zero, there is no inverse, otherwise, there is gaurenteed to be an inverse.


det[Method]

Returns the determinant of a matrix.

Synopsis

det (matrix1) => (determinant)

Parameters

matrix1An instance of <number>.

Return Values

determinantAn instance of <number>.

Description

This just does what the first half of inverse does. It reduces the matrix to the upper triangular form, and then returns the product of all of the elements along the diagonal. This is the determinant of the matrix.


inverse[Method]

Returns the matrix transposed.

Synopsis

inverse (matrix1) => (transposed-matrix)

Parameters

matrix1An instance of <number>.

Return Values

transposed-matrixAn instance of <matrix>.

Description

This function transposes a matrix. It takes a M by N matrix and turns it into an N by M matrix. All it does is take the i,jth element in the M by N matrix, and turns it into the j,ith element in the N by M matrix.