Class ImmutableMatrix

java.lang.Object
dev.nm.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 Details

    • ImmutableMatrix

      public ImmutableMatrix()
      for serialization
    • 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 Details

    • 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
    • add

      public Matrix add(Matrix that)
      Description copied from interface: MatrixRing
      this + that
      Specified by:
      add in interface AbelianGroup<Matrix>
      Specified by:
      add in interface MatrixRing
      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 AbelianGroup<Matrix>
      Specified by:
      minus in interface MatrixRing
      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 AbelianGroup<Matrix>
      Specified by:
      opposite in interface MatrixRing
      Returns:
      -this
      See Also:
    • 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 AbelianGroup<Matrix>
      Specified by:
      ZERO in interface MatrixRing
      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 DeepCopyable
      Specified by:
      deepCopy in interface Matrix
      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