# SuanShu, a Java numerical and statistical library

com.numericalmethod.suanshu.algebra.linear.matrix.doubles

## Class ImmutableMatrix

• java.lang.Object
• com.numericalmethod.suanshu.algebra.linear.matrix.doubles.ImmutableMatrix
• All Implemented Interfaces:
Matrix, MatrixAccess, MatrixRing, MatrixTable, AbelianGroup<Matrix>, Monoid<Matrix>, Ring<Matrix>, Table, DeepCopyable

public class ImmutableMatrix
extends Object
implements Matrix
This is a read-only view of a Matrix instance. It keeps a reference to the matrix instance, delegates all operations to the instance except for set(int, int, double) which will always result in an MatrixAccessException. Note that the returned values of all operations (e.g., add()) have the same types as the original matrix. Popular usages of this class include, e.g., the final member of a class, the return value of a method.

Note that the 'immutability' can be broken if the original matrix is modified. To avoid this, make a copy of the original matrix before passing it to the constructor. For example,


ImmutableMatrix immutable = new ImmutableMatrix(m.deepCopy());

• ### Constructor Summary

Constructors
Constructor and Description
ImmutableMatrix(Matrix A)
Construct a read-only version of a matrix.
• ### Method Summary

All Methods
Modifier and Type Method and Description
Matrix add(Matrix that)
this + that
Matrix deepCopy()
Make a deep copy of the underlying matrix.
boolean equals(Object obj)
double get(int i, int j)
Get the matrix entry at [i,j].
Vector getColumn(int j)
Get the specified column in the matrix as a vector.
Vector getRow(int i)
Get the specified row in the matrix as a vector.
int hashCode()
Matrix minus(Matrix that)
this - that
Matrix multiply(Matrix that)
this * that
Vector multiply(Vector v)
Right multiply this matrix, A, by a vector.
int nCols()
Gets the number of columns.
int nRows()
Gets the number of rows.
Matrix ONE()
Get an identity matrix that has the same dimension as this matrix.
Matrix opposite()
Get the opposite of this matrix.
Matrix scaled(double c)
Scale this matrix, A, by a constant.
void set(int row, int col, double value)
Set the matrix entry at [i,j] to a value.
Matrix t()
Get the transpose of this matrix.
String toString()
Matrix ZERO()
Get a zero matrix that has the same dimension as this matrix.
• ### Methods inherited from class java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
• ### Constructor Detail

• #### ImmutableMatrix

public ImmutableMatrix(Matrix A)
Construct a read-only version of a matrix. Note that changing the original matrix changes the "immutable" version as well.
Parameters:
A - a matrix
• ### Method Detail

• #### set

public void set(int row,
int col,
double value)
throws MatrixAccessException
Description copied from interface: MatrixAccess
Set the matrix entry at [i,j] to a value. This is the only method that may change a matrix.
Specified by:
set in interface MatrixAccess
Parameters:
row - the row index
col - the column index
value - the value to set A[i,j] to
Throws:
MatrixAccessException - if i or j is out of range
• #### nRows

public int nRows()
Description copied from interface: Table
Gets the number of rows. Rows count from 1.
Specified by:
nRows in interface Table
Returns:
the number of rows
• #### nCols

public int nCols()
Description copied from interface: Table
Gets the number of columns. Columns count from 1.
Specified by:
nCols in interface Table
Returns:
the number of columns
• #### get

public double get(int i,
int j)
throws MatrixAccessException
Description copied from interface: MatrixAccess
Get the matrix entry at [i,j].
Specified by:
get in interface MatrixAccess
Parameters:
i - the row index
j - the column index
Returns:
A[i,j]
Throws:
MatrixAccessException - if i or j is out of range
• #### getRow

public Vector getRow(int i)
throws MatrixAccessException
Description copied from interface: Matrix
Get the specified row in the matrix as a vector.
Specified by:
getRow in interface Matrix
Parameters:
i - the row index
Returns:
the vector A[i, ]
Throws:
MatrixAccessException - when i < 1, or when i > the number of rows
• #### getColumn

public Vector getColumn(int j)
throws MatrixAccessException
Description copied from interface: Matrix
Get the specified column in the matrix as a vector.
Specified by:
getColumn in interface Matrix
Parameters:
j - the column index
Returns:
a vector A[, j]
Throws:
MatrixAccessException - when j < 1, or when j > the number of columns

public Matrix add(Matrix that)
Description copied from interface: MatrixRing
this + that
Specified by:
add in interface MatrixRing
Specified by:
add in interface AbelianGroup<Matrix>
Parameters:
that - a matrix
Returns:
the sum of this and that
• #### minus

public Matrix minus(Matrix that)
Description copied from interface: MatrixRing
this - that
Specified by:
minus in interface MatrixRing
Specified by:
minus in interface AbelianGroup<Matrix>
Parameters:
that - a matrix
Returns:
the difference between this and that
• #### multiply

public Matrix multiply(Matrix that)
Description copied from interface: MatrixRing
this * that
Specified by:
multiply in interface MatrixRing
Specified by:
multiply in interface Monoid<Matrix>
Parameters:
that - a matrix
Returns:
the product ofthis and that
• #### multiply

public Vector multiply(Vector v)
Description copied from interface: Matrix
Right multiply this matrix, A, by a vector.
Specified by:
multiply in interface Matrix
Parameters:
v - a vector
Returns:
Av, a vector
• #### scaled

public Matrix scaled(double c)
Description copied from interface: Matrix
Scale this matrix, A, by a constant.
Specified by:
scaled in interface Matrix
Parameters:
c - a double
Returns:
cA
• #### opposite

public Matrix opposite()
Description copied from interface: MatrixRing
Get the opposite of this matrix.
Specified by:
opposite in interface MatrixRing
Specified by:
opposite in interface AbelianGroup<Matrix>
Returns:
-this
• #### ZERO

public Matrix ZERO()
Description copied from interface: MatrixRing
Get a zero matrix that has the same dimension as this matrix.
Specified by:
ZERO in interface MatrixRing
Specified by:
ZERO in interface AbelianGroup<Matrix>
Returns:
the 0 matrix
• #### ONE

public Matrix ONE()
Description copied from interface: MatrixRing
Get an identity matrix that has the same dimension as this matrix. For a non-square matrix, it zeros out the rows (columns) with index > nCols (nRows).
Specified by:
ONE in interface MatrixRing
Specified by:
ONE in interface Monoid<Matrix>
Returns:
an identity matrix
• #### t

public Matrix t()
Description copied from interface: MatrixRing
Get the transpose of this matrix. This is the involution on the matrix ring.
Specified by:
t in interface MatrixRing
Returns:
the transpose of this matrix
• #### deepCopy

public Matrix deepCopy()
Make a deep copy of the underlying matrix. The copy is no longer an ImmutableMatrix and may be mutable.
Specified by:
deepCopy in interface Matrix
Specified by:
deepCopy in interface DeepCopyable
Returns:
a deep copy of the underlying matrix
• #### toString

public String toString()
Overrides:
toString in class Object
• #### equals

public boolean equals(Object obj)
Overrides:
equals in class Object
• #### hashCode

public int hashCode()
Overrides:
hashCode in class Object