Class MatrixAlgebra

  • Direct Known Subclasses:
    CommonsMatrixAlgebra, OGMatrixAlgebra

    public abstract class MatrixAlgebra
    extends Object
    Parent class for matrix algebra operations. Basic operations (add, subtract, scale) are implemented in this class.
    • Constructor Detail

      • MatrixAlgebra

        public MatrixAlgebra()
    • Method Detail

      • add

        public Matrix add​(Matrix m1,
                          Matrix m2)
        Adds two matrices. This operation can only be performed if the matrices are of the same type and dimensions.
        Parameters:
        m1 - The first matrix, not null
        m2 - The second matrix, not null
        Returns:
        The sum of the two matrices
        Throws:
        IllegalArgumentException - If the matrices are not of the same type, if the matrices are not the same shape.
      • divide

        public Matrix divide​(Matrix m1,
                             Matrix m2)
        Returns the quotient of two matrices $C = \frac{A}{B} = AB^{-1}$, where $B^{-1}$ is the pseudo-inverse of $B$ i.e. $BB^{-1} = \mathbb{1}$.
        Parameters:
        m1 - The numerator matrix, not null. This matrix must be a DoubleMatrix.
        m2 - The denominator, not null. This matrix must be a DoubleMatrix.
        Returns:
        The result
      • kroneckerProduct

        public Matrix kroneckerProduct​(Matrix m1,
                                       Matrix m2)
        Returns the Kronecker product of two matrices. If $\mathbf{A}$ is an $m \times n$ matrix and $\mathbf{B}$ is a $p \times q$ matrix, then the Kronecker product $A \otimes B$ is an $mp \times nq$ matrix with elements $$ \begin{align*} A \otimes B &= \begin{pmatrix} a_{11}\mathbf{B} & \cdots & a_{1n}\mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{m1}\mathbf{B} & \cdots & a_{mn}\mathbf{B} \end{pmatrix}\\ &= \begin{pmatrix} a_{11}b_{11} & a_{11}b_{12} & \cdots & a_{11}b_{1q} & \cdots & a_{1n}b_{11} & a_{1n}b_{12} & \cdots & a_{1n}b_{1q}\\ a_{11}b_{21} & a_{11}b_{22} & \cdots & a_{11}b_{2q} & \cdots & a_{1n}b_{21} & a_{1n}b_{22} & \cdots & a_{1n}b_{2q} \\ \vdots & \vdots & \ddots & \vdots & \cdots & \vdots & \vdots & \ddots & \cdots \\ a_{11}b_{p1} & a_{11}b_{p2} & \cdots & a_{11}b_{pq} & \cdots & a_{1n}b_{p1} & a_{1n}b_{p2} & \cdots & a_{1n}b_{pq} \\ \vdots & \vdots & & \vdots & \ddots & \vdots & \vdots & & \cdots \\ a_{m1}b_{11} & a_{m1}b_{12} & \cdots & a_{m1}b_{1q} & \cdots & a_{mn}b_{11} & a_{mn}b_{12} & \cdots & a_{mn}b_{1q} \\ a_{m1}b_{21} & a_{m1}b_{22} & \cdots & a_{m1}b_{2q} & \cdots & a_{mn}b_{21} & a_{mn}b_{22} & \cdots & a_{mn}b_{2q} \\ \vdots & \vdots & \ddots & \vdots & \cdots & \vdots & \vdots & \ddots & \cdots \\ a_{m1}b_{p1} & a_{m1}b_{p2} & \cdots & a_{m1}b_{pq} & \cdots & a_{mn}b_{p1} & a_{mn}b_{p2} & \cdots & a_{mn}b_{pq} \end{pmatrix} \end{align*} $$
        Parameters:
        m1 - The first matrix, not null. This matrix must be a DoubleMatrix.
        m2 - The second matrix, not null. This matrix must be a DoubleMatrix.
        Returns:
        The Kronecker product
      • multiply

        public abstract Matrix multiply​(Matrix m1,
                                        Matrix m2)
        Multiplies two matrices.
        Parameters:
        m1 - The first matrix, not null.
        m2 - The second matrix, not null.
        Returns:
        The product of the two matrices.
      • scale

        public Matrix scale​(Matrix m,
                            double scale)
        Scale a vector or matrix by a given amount, i.e. each element is multiplied by the scale.
        Parameters:
        m - A vector or matrix, not null
        scale - The scale
        Returns:
        the scaled vector or matrix
      • subtract

        public Matrix subtract​(Matrix m1,
                               Matrix m2)
        Subtracts two matrices. This operation can only be performed if the matrices are of the same type and dimensions.
        Parameters:
        m1 - The first matrix, not null
        m2 - The second matrix, not null
        Returns:
        The second matrix subtracted from the first
        Throws:
        IllegalArgumentException - If the matrices are not of the same type, if the matrices are not the same shape.
      • getCondition

        public abstract double getCondition​(Matrix m)
        Returns the condition number of the matrix.
        Parameters:
        m - A matrix, not null
        Returns:
        The condition number of the matrix
      • getDeterminant

        public abstract double getDeterminant​(Matrix m)
        Returns the determinant of the matrix.
        Parameters:
        m - A matrix, not null
        Returns:
        The determinant of the matrix
      • getInverse

        public abstract DoubleMatrix getInverse​(Matrix m)
        Returns the inverse (or pseudo-inverse) of the matrix.
        Parameters:
        m - A matrix, not null
        Returns:
        The inverse matrix
      • getInnerProduct

        public abstract double getInnerProduct​(Matrix m1,
                                               Matrix m2)
        Returns the inner (or dot) product.
        Parameters:
        m1 - A vector, not null
        m2 - A vector, not null
        Returns:
        The scalar dot product
        Throws:
        IllegalArgumentException - If the vectors are not the same size
      • getOuterProduct

        public abstract DoubleMatrix getOuterProduct​(Matrix m1,
                                                     Matrix m2)
        Returns the outer product.
        Parameters:
        m1 - A vector, not null
        m2 - A vector, not null
        Returns:
        The outer product
        Throws:
        IllegalArgumentException - If the vectors are not the same size
      • getNorm1

        public abstract double getNorm1​(Matrix m)
        For a vector, returns the $L_1$ norm (also known as the Taxicab norm or Manhattan norm), i.e. $\Sigma |x_i|$.

        For a matrix, returns the maximum absolute column sum norm of the matrix.

        Parameters:
        m - A vector or matrix, not null
        Returns:
        The $L_1$ norm
      • getNorm2

        public abstract double getNorm2​(Matrix m)
        For a vector, returns $L_2$ norm (also known as the Euclidean norm).

        For a matrix, returns the spectral norm

        Parameters:
        m - A vector or matrix, not null
        Returns:
        the norm
      • getNormInfinity

        public abstract double getNormInfinity​(Matrix m)
        For a vector, returns the $L_\infty$ norm. $L_\infty$ norm is the maximum of the absolute values of the elements.

        For a matrix, returns the maximum absolute row sum norm

        Parameters:
        m - a vector or a matrix, not null
        Returns:
        the norm
      • getPower

        public abstract DoubleMatrix getPower​(Matrix m,
                                              int p)
        Returns a matrix raised to an integer power, e.g. $\mathbf{A}^3 = \mathbf{A}\mathbf{A}\mathbf{A}$.
        Parameters:
        m - A square matrix, not null
        p - An integer power
        Returns:
        The result
      • getPower

        public abstract DoubleMatrix getPower​(Matrix m,
                                              double p)
        Returns a matrix raised to a power, $\mathbf{A}^3 = \mathbf{A}\mathbf{A}\mathbf{A}$.
        Parameters:
        m - A square matrix, not null
        p - The power
        Returns:
        The result
      • getTrace

        public abstract double getTrace​(Matrix m)
        Returns the trace (i.e. sum of diagonal elements) of a matrix.
        Parameters:
        m - A matrix, not null. The matrix must be square.
        Returns:
        The trace
      • getTranspose

        public abstract DoubleMatrix getTranspose​(Matrix m)
        Returns the transpose of a matrix.
        Parameters:
        m - A matrix, not null
        Returns:
        The transpose matrix
      • matrixTransposeMultiplyMatrix

        public DoubleMatrix matrixTransposeMultiplyMatrix​(DoubleMatrix a)
        Compute $A^T A$, where A is a matrix.
        Parameters:
        a - The matrix
        Returns:
        The result of $A^T A$