Class 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 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
      • 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
      • 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
      • 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
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object