Class Matrix

  extended by smithers.algorithms.Matrix

public class Matrix
extends java.lang.Object

Implements a collection of useful matrix related algorithms. The methods of this class all require that the matrix arguments be rectangular; for efficiency they do not check this, hence if the arguments are invalid, they will likely throw ArrayIndexOutOfBoundsException or NullPointerException

Method Summary
static void decomposeLQ(float[][] matrix, float[][] l, float[][] q)
          Computes an LQ decomposition of a matrix.
static float[] product(float[][] matrix, float[] vector)
          Multiplies a matrix by a column vector.
static float[][] product(float[][] matrix1, float[][] matrix2)
          Multiplies two matrices together.
static float[] product(float[] vector, float[][] matrix)
          Multiplies a row vector by a matrix.
static void rowReduce(float[][] matrix)
          Row reduce a matrix in-place.
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Method Detail


public static float[][] product(float[][] matrix1,
                                float[][] matrix2)
Multiplies two matrices together. The first matrix must have as many columns as the second has rows.

matrix1 - a matrix
matrix2 - another matrix
matrix1 * matrix2


public static float[] product(float[][] matrix,
                              float[] vector)
Multiplies a matrix by a column vector. The vector must have as many elements as the matrix has columns.

matrix - a matrix
vector - a vector
matrix * vector


public static float[] product(float[] vector,
                              float[][] matrix)
Multiplies a row vector by a matrix. The vector must have as many elements as the matrix has rows.

vector - a vector
matrix - a matrix
vector * matrix


public static void rowReduce(float[][] matrix)
Row reduce a matrix in-place. Uses Gauss-Jordan elimination with scaled partial pivoting.

matrix - the matrix to reduce


public static void decomposeLQ(float[][] matrix,
                               float[][] l,
                               float[][] q)
Computes an LQ decomposition of a matrix. The matrix must have at least as many columns as rows. This computes L and Q such that A = LQ, with L lower triangular and Q orthogonal. Uses the modified Gram-Schmidt process, further modified to still work if A is not square or if the rows of A are not linearly independant; in the latter case the matrix L will have one or more zero entries on the diagonal.

matrix - the matrix to decompose
l - the matrix in which to store L; must have the same dimensions as matrix
q - the matrix in which to store Q; must be square of dimension equal to the number of columns of matrix