jumbo.euclid
Class RealMatrix

java.lang.Object
  |
  +--jumbo.euclid.Status
        |
        +--jumbo.euclid.RealMatrix
Direct Known Subclasses:
RealSquareMatrix

public class RealMatrix
extends Status

RealMatrix - rectangular real number matrix class

RealMatrix represents a rectangular m-x-n matrix. The basic matrix algebra for non-square matrices is represented here and this class is also a base for square matrices.

Read the signature of each member function carefully as some MODIFY the object and some CREATE A NEW ONE. Among the reasons for this is that subclassing (e.g to RealSquareMatrix) is easier with one of these forms in certain cases. Note that if you modify an object, then all references to it will refer to the changed object


Field Summary
protected  int cols
          number of columns
protected  double[][] flmat
          the matrix
protected  int rows
          number of rows
 
Constructor Summary
RealMatrix()
          Default matrix, with cols = rows = 0
RealMatrix(double[][] m)
          COPY from an existing matrix - check that it is rectangular
RealMatrix(int r, int c)
          A rows*cols matrix set to 0.0 (rows or cols < 0 defaults to 0)
RealMatrix(int r, int c, double f)
          initalises all elements in the array with a given double[]
RealMatrix(int rows, int cols, double[] array)
          Formed by feeding in an existing 1-D array to a rowsXcols matrix.
RealMatrix(IntMatrix m)
          from a IntMatrix
RealMatrix(RealMatrix m)
          copy constructor - COPIES the other matrix
RealMatrix(RealMatrix m, int lowrow, int hirow, int lowcol, int hicol)
          submatrix of another matrix; fails if lowrow > hirow, lowrow < 0, etc.
 
Method Summary
 void appendColumnData(RealArray f)
          append data to matrix columnwise
 void appendColumnData(RealMatrix m)
          append data to matrix columnwise
 void appendRowData(RealArray f)
          append data to matrix rowwise
 void appendRowData(RealMatrix m)
          append data to matrix rowwise
 void clearMatrix()
          clear matrix
 RealMatrix clone(RealMatrix m)
           
 void columnwiseDivide(RealArray f)
          divide each column of a matrix by a vector of scalars (i.e.
 void deleteColumn(int col)
          delete column from matrix and close up
 void deleteColumns(int low, int high)
          delete 2 or more adjacent columns (inclusive) from matrix and close up
 void deleteRow(int row)
          delete row from matrix and close up
 void deleteRows(int low, int high)
          delete 2 or more adjacent rows (inclusive) from matrix and close up; if (high > rows-1 high -> rows-1; or low < 0, low -> 0
 double elementAt(Int2 rowcol)
          extracts a given element from the matrix
 double elementAt(int row, int col)
          extracts a given element from the matrix
 IntMatrix elementsInRange(RealRange r)
          produce a mask of those elements which fall in a range (1) else (0)
 boolean equals(RealMatrix m)
          are two matrices equal in all elements?
 double euclideanColumnLength(int i)
          get Euclidean length of column
 RealArray euclideanColumnLengths()
          get array of Euclidean column lengths
 double euclideanRowLength(int i)
          get Euclidean length of row
 RealArray euclideanRowLengths()
          get array of Euclidean row lengths
 RealArray extractColumnData(int col)
          get column data from matrix
 RealArray extractRowData(int row)
          get row data from matrix
 RealMatrix extractSubMatrixData(int low_row, int high_row, int low_col, int high_col)
          extract a RealMatrix submatrix from a RealMatrix
 int getCols()
          get number of columns
 double[][] getMatrix()
           
 double[] getMatrixAsArray()
          get matrix as double[] (in C order: m(0,0), m(0,1) ...)
 int getRows()
          get number of rows
 RealMatrix getTranspose()
          transpose matrix - creates new Matrix
 Int2 indexOfLargestElement()
          get index of largest element
 int indexOfLargestElementInColumn(int jcol)
          get index of largest element in column
 int indexOfLargestElementInRow(int irow)
          get index of largest element in row (or -1 if default matrix)
 Int2 indexOfSmallestElement()
          get index of smallest element
 int indexOfSmallestElementInColumn(int jcol)
          get index of smallest elem in column
 int indexOfSmallestElementInRow(int irow)
          get index of smallest element in row
 void insertColumnData(int after_col, RealArray f)
          add data as column or column block into matrix and expand
 void insertColumnData(int after_col, RealMatrix m)
          add data as column or column block into matrix and expand
 void insertColumns(int after_col, int delta_cols)
          insert a hole into the matric and expand
 void insertRowData(int after_row, RealArray f)
          insert row of data into matrix and expand
 void insertRowData(int after_row, RealMatrix m)
          insert 2 or more adjacent rows of data into matrix and expand
 void insertRows(int after_row, int delta_rows)
          make space for new rows in matrix and expand
 boolean isOrthogonal()
          is matrix Orthogonal (row-wise)? i.e.
 boolean isSquare()
          is the matrix square?
 double largestElement()
          get largest element
 double largestElementInColumn(int jcol)
          get largest element in a column
 double largestElementInRow(int irow)
          get largest element in a row
static void main(java.lang.String[] args)
          tests RealMatrix routines = new RealMatrix
 RealArray multiply(RealArray f)
          matrix multiplication of a COLUMN vector
 RealMatrix multiply(RealMatrix m)
          matrix multiplication - multiplies conformable matrices to give NEW matrix result = 'this' * m; (order matters)
 void multiplyBy(double f)
          matrix multiplication by a scalar - MODIFIES matrix
 void negative()
          unary minus - negate all elements of matrix; MODIFIES matrix
 void normaliseByColumns()
          normalise matrix columns to length of 1.0
 void normaliseByRows()
          normalise matrix rows to length of 1.0
 RealMatrix plus(RealMatrix m2)
          matrix addition - adds conformable matrices giving NEW matrix
 RealMatrix reorderColumnsBy(IntSet is)
          reorder the columns of a matrix.
 RealMatrix reorderRowsBy(IntSet is)
          reorder the rows of a matrix.
 void replaceColumnData(int starting_col, double[] f)
          and from double[]
 boolean replaceColumnData(int column, RealArray f)
          replace data in a single column - return false if impossible
 void replaceColumnData(int start_column, RealMatrix m)
          replace data in a block of columns
 void replaceRowData(int row, double[] f)
          and using a double[]
 void replaceRowData(int row, RealArray f)
          overwrite existing row of data
 void replaceRowData(int after_row, RealMatrix m)
          overwrite existing block of rows; if too big, copying is truncated
 void replaceSubMatrixData(int low_row, int low_col, RealMatrix m)
          replaces the data starting at (low_row, low_col) and extending by the dimensions for the matrix m
 void setAllElements(double f)
          initialise matrix to given double
 void setElementAt(int row, int col, double f)
          inserts a given element to the matrix - MODIFIES matrix
 void shallowCopy(RealMatrix m)
          shallowCopy
 double smallestElement()
          get smallest element
 double smallestElementInColumn(int jcol)
          get smallest element in a column
 double smallestElementInRow(int irow)
          get smallest element in a row
 RealMatrix subtract(RealMatrix m2)
          matrix subtraction - subtracts conformable matrices giving NEW matrix
 java.lang.String toString()
          output matrix - very crude...
 
Methods inherited from class jumbo.euclid.Status
NYI
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

rows

protected int rows
number of rows

cols

protected int cols
number of columns

flmat

protected double[][] flmat
the matrix
Constructor Detail

RealMatrix

public RealMatrix()
Default matrix, with cols = rows = 0

RealMatrix

public RealMatrix(int r,
                  int c)
A rows*cols matrix set to 0.0 (rows or cols < 0 defaults to 0)

RealMatrix

public RealMatrix(int rows,
                  int cols,
                  double[] array)
           throws BadArgumentException
Formed by feeding in an existing 1-D array to a rowsXcols matrix. THE COLUMN IS THE FASTEST MOVING INDEX, i.e. the matrix is filled as flmat(0,0), flmat(0,1) ... C-LIKE. COPIES the array
Throws:
BadArgumentException - size of array is not rows*cols

RealMatrix

public RealMatrix(int r,
                  int c,
                  double f)
initalises all elements in the array with a given double[]

RealMatrix

public RealMatrix(RealMatrix m,
                  int lowrow,
                  int hirow,
                  int lowcol,
                  int hicol)
           throws BadArgumentException
submatrix of another matrix; fails if lowrow > hirow, lowrow < 0, etc. COPIES the parts of m
Throws:
BadArgumentException - impossible value of hirow, hicol, lowrow, lowcol

RealMatrix

public RealMatrix(RealMatrix m)
copy constructor - COPIES the other matrix

RealMatrix

public RealMatrix(IntMatrix m)
from a IntMatrix

RealMatrix

public RealMatrix(double[][] m)
           throws NonRectMatrixException
COPY from an existing matrix - check that it is rectangular
Throws:
NonRectMatrixException - m has rows of different lengths
Method Detail

shallowCopy

public void shallowCopy(RealMatrix m)
shallowCopy

clone

public RealMatrix clone(RealMatrix m)

getRows

public int getRows()
get number of rows

getCols

public int getCols()
get number of columns

getMatrix

public double[][] getMatrix()

getMatrixAsArray

public double[] getMatrixAsArray()
get matrix as double[] (in C order: m(0,0), m(0,1) ...)

equals

public boolean equals(RealMatrix m)
               throws UnequalMatricesException
are two matrices equal in all elements?
Throws:
UnequalMatricesException - m and this are different sizes

plus

public RealMatrix plus(RealMatrix m2)
                throws UnequalMatricesException
matrix addition - adds conformable matrices giving NEW matrix
Throws:
UnequalMatricesException - m and this are different sizes

subtract

public RealMatrix subtract(RealMatrix m2)
                    throws UnequalMatricesException
matrix subtraction - subtracts conformable matrices giving NEW matrix
Throws:
UnequalMatricesException - m and this are different sizes

negative

public void negative()
unary minus - negate all elements of matrix; MODIFIES matrix

multiply

public RealMatrix multiply(RealMatrix m)
                    throws UnequalMatricesException
matrix multiplication - multiplies conformable matrices to give NEW matrix result = 'this' * m; (order matters)
Throws:
UnequalMatricesException - m and this are different sizes

multiplyBy

public void multiplyBy(double f)
matrix multiplication by a scalar - MODIFIES matrix

multiply

public RealArray multiply(RealArray f)
                   throws UnequalMatricesException
matrix multiplication of a COLUMN vector
Throws:
UnequalMatricesException - f.size() differs from cols

columnwiseDivide

public void columnwiseDivide(RealArray f)
                      throws UnequalMatricesException
divide each column of a matrix by a vector of scalars (i.e. mat[i][j] = mat[i][j] / vect[i] - MODIFIES matrix
Throws:
UnequalMatricesException - f.size() and rows differ

elementAt

public double elementAt(int row,
                        int col)
extracts a given element from the matrix

elementAt

public double elementAt(Int2 rowcol)
extracts a given element from the matrix

setElementAt

public void setElementAt(int row,
                         int col,
                         double f)
inserts a given element to the matrix - MODIFIES matrix

largestElement

public double largestElement()
get largest element

indexOfLargestElement

public Int2 indexOfLargestElement()
get index of largest element

largestElementInColumn

public double largestElementInColumn(int jcol)
get largest element in a column

indexOfLargestElementInColumn

public int indexOfLargestElementInColumn(int jcol)
get index of largest element in column

largestElementInRow

public double largestElementInRow(int irow)
get largest element in a row

indexOfLargestElementInRow

public int indexOfLargestElementInRow(int irow)
get index of largest element in row (or -1 if default matrix)

smallestElement

public double smallestElement()
get smallest element

indexOfSmallestElement

public Int2 indexOfSmallestElement()
get index of smallest element

smallestElementInColumn

public double smallestElementInColumn(int jcol)
get smallest element in a column

indexOfSmallestElementInColumn

public int indexOfSmallestElementInColumn(int jcol)
get index of smallest elem in column

smallestElementInRow

public double smallestElementInRow(int irow)
get smallest element in a row

indexOfSmallestElementInRow

public int indexOfSmallestElementInRow(int irow)
get index of smallest element in row

isOrthogonal

public boolean isOrthogonal()
is matrix Orthogonal (row-wise)? i.e. row(i) * row(j) = 0 if i != j.

euclideanRowLength

public double euclideanRowLength(int i)
get Euclidean length of row

euclideanRowLengths

public RealArray euclideanRowLengths()
get array of Euclidean row lengths

euclideanColumnLength

public double euclideanColumnLength(int i)
get Euclidean length of column

euclideanColumnLengths

public RealArray euclideanColumnLengths()
get array of Euclidean column lengths

extractColumnData

public RealArray extractColumnData(int col)
get column data from matrix

extractRowData

public RealArray extractRowData(int row)
get row data from matrix

clearMatrix

public void clearMatrix()
clear matrix

setAllElements

public void setAllElements(double f)
initialise matrix to given double

normaliseByRows

public void normaliseByRows()
normalise matrix rows to length of 1.0

normaliseByColumns

public void normaliseByColumns()
normalise matrix columns to length of 1.0

getTranspose

public RealMatrix getTranspose()
transpose matrix - creates new Matrix

isSquare

public boolean isSquare()
is the matrix square?

deleteColumn

public void deleteColumn(int col)
delete column from matrix and close up

deleteColumns

public void deleteColumns(int low,
                          int high)
delete 2 or more adjacent columns (inclusive) from matrix and close up

deleteRow

public void deleteRow(int row)
delete row from matrix and close up

deleteRows

public void deleteRows(int low,
                       int high)
delete 2 or more adjacent rows (inclusive) from matrix and close up; if (high > rows-1 high -> rows-1; or low < 0, low -> 0

replaceColumnData

public boolean replaceColumnData(int column,
                                 RealArray f)
replace data in a single column - return false if impossible

replaceColumnData

public void replaceColumnData(int starting_col,
                              double[] f)
and from double[]

replaceColumnData

public void replaceColumnData(int start_column,
                              RealMatrix m)
replace data in a block of columns

insertColumns

public void insertColumns(int after_col,
                          int delta_cols)
insert a hole into the matric and expand

insertColumnData

public void insertColumnData(int after_col,
                             RealArray f)
add data as column or column block into matrix and expand

insertColumnData

public void insertColumnData(int after_col,
                             RealMatrix m)
add data as column or column block into matrix and expand

insertRows

public void insertRows(int after_row,
                       int delta_rows)
make space for new rows in matrix and expand

replaceRowData

public void replaceRowData(int row,
                           RealArray f)
                    throws UnequalMatricesException
overwrite existing row of data
Throws:
UnequalMatricesException - f.size() and cols differ

replaceRowData

public void replaceRowData(int row,
                           double[] f)
                    throws UnequalMatricesException
and using a double[]
Throws:
UnequalMatricesException - f.length and cols differ

replaceRowData

public void replaceRowData(int after_row,
                           RealMatrix m)
                    throws UnequalMatricesException
overwrite existing block of rows; if too big, copying is truncated
Throws:
UnequalMatricesException - m.rows and this.rows differ

insertRowData

public void insertRowData(int after_row,
                          RealMatrix m)
                   throws UnequalMatricesException
insert 2 or more adjacent rows of data into matrix and expand
Throws:
UnequalMatricesException - m.cols and this.colsdiffer

insertRowData

public void insertRowData(int after_row,
                          RealArray f)
                   throws UnequalMatricesException
insert row of data into matrix and expand
Throws:
UnequalMatricesException - f.size() and this.cols differ

appendColumnData

public void appendColumnData(RealArray f)
                      throws UnequalMatricesException
append data to matrix columnwise
Throws:
UnequalMatricesException - f.size() and this.rows differ

appendColumnData

public void appendColumnData(RealMatrix m)
                      throws UnequalMatricesException
append data to matrix columnwise
Throws:
UnequalMatricesException - m.rows and this.rows differ

appendRowData

public void appendRowData(RealArray f)
                   throws UnequalMatricesException
append data to matrix rowwise
Throws:
UnequalMatricesException - m.cols and this.cols differ

appendRowData

public void appendRowData(RealMatrix m)
                   throws UnequalMatricesException
append data to matrix rowwise
Throws:
UnequalMatricesException - m.cols and this.cols differ

replaceSubMatrixData

public void replaceSubMatrixData(int low_row,
                                 int low_col,
                                 RealMatrix m)
replaces the data starting at (low_row, low_col) and extending by the dimensions for the matrix m

reorderColumnsBy

public RealMatrix reorderColumnsBy(IntSet is)
                            throws UnequalMatricesException,
                                   java.lang.ArrayIndexOutOfBoundsException
reorder the columns of a matrix.
Throws:
UnequalMatricesException - is.size() and this.cols differ
java.lang.ArrayIndexOutOfBoundsException - an element of is >= this.cols

reorderRowsBy

public RealMatrix reorderRowsBy(IntSet is)
                         throws UnequalMatricesException,
                                java.lang.ArrayIndexOutOfBoundsException
reorder the rows of a matrix. Deleting rows is allowed
Throws:
UnequalMatricesException - is.size() and this.rows differ
java.lang.ArrayIndexOutOfBoundsException - an element of is >= this.rows

extractSubMatrixData

public RealMatrix extractSubMatrixData(int low_row,
                                       int high_row,
                                       int low_col,
                                       int high_col)
                                throws BadArgumentException
extract a RealMatrix submatrix from a RealMatrix
Throws:
BadArgumentException - low/high_row/col are outside range of this

elementsInRange

public IntMatrix elementsInRange(RealRange r)
produce a mask of those elements which fall in a range (1) else (0)

toString

public java.lang.String toString()
output matrix - very crude...
Overrides:
toString in class java.lang.Object

main

public static void main(java.lang.String[] args)
tests RealMatrix routines = new RealMatrix