# Class BidiagonalMatrix

java.lang.Object
dev.nm.algebra.linear.matrix.doubles.matrixtype.dense.diagonal.BidiagonalMatrix
All Implemented Interfaces:
Matrix, MatrixAccess, MatrixRing, MatrixTable, Densifiable, AbelianGroup<Matrix>, Monoid<Matrix>, Ring<Matrix>, Table, DeepCopyable

public class BidiagonalMatrix extends Object
A bi-diagonal matrix is either upper or lower diagonal. It has non-zero entries only on the main, and either the super-diagonal (upper) or sub-diagonal (lower).
• ## Constructor Details

• ### BidiagonalMatrix

public BidiagonalMatrix(double[][] data)
Constructs a bi-diagonal matrix from a 2D double[][] array. There are always two rows. The longer row is the main diagonal and has one more element. If the first row is shorter, it is an upper bi-diagonal matrix. If the second row is shorter, it is a lower bi-diagonal matrix. For example,

new double[][]{
{2, 5, 8, 11},
{1, 4, 7, 10, 13}
}

gives $\begin{bmatrix} 1 invalid input: '&' 2 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0\\ 0 invalid input: '&' 4 invalid input: '&' 5 invalid input: '&' 0 invalid input: '&' 0\\ 0 invalid input: '&' 0 invalid input: '&' 7 invalid input: '&' 8 invalid input: '&' 0\\ 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 10 invalid input: '&' 11\\ 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 13 \end{bmatrix}$ We allow null input when a diagonal is 0s, except for the main diagonal. For example,

new double[][]{
{1, 4, 7, 10, 13},
null
}

gives $\begin{bmatrix} 1 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0\\ 0 invalid input: '&' 4 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0\\ 0 invalid input: '&' 0 invalid input: '&' 7 invalid input: '&' 0 invalid input: '&' 0\\ 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 10 invalid input: '&' 0\\ 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 0 invalid input: '&' 13 \end{bmatrix}$ The following is not allowed because the dimension cannot be determined.

new double[][]{
null,
null
}

This implementation treats a diagonal matrix as an upper bi-diagonal matrix.
Parameters:
data - the 2D array input
• ### BidiagonalMatrix

public BidiagonalMatrix(int dim, BidiagonalMatrix.BidiagonalMatrixType type)
Constructs a 0 bi-diagonal matrix of dimension dim * dim.
Parameters:
dim - the dimension of the matrix
type - the type of bi-diagonal matrix to create
• ### BidiagonalMatrix

public BidiagonalMatrix(BidiagonalMatrix that)
Copy constructor.
Parameters:
that - a bi-diagonal matrix
• ## Method Details

• ### deepCopy

public BidiagonalMatrix deepCopy()
Description copied from interface: DeepCopyable
The implementation returns an instance created from this by the copy constructor of the class, or just this if the instance itself is immutable.
Returns:
an independent (deep) copy of the instance
• ### getType

Gets the bi-diagonal matrix type.
Returns:
the bi-diagonal matrix type
• ### isUnreduced

public boolean isUnreduced(double epsilon)
A bi-diagonal matrix is unreduced if it has no 0 on both the super and main diagonals.
Parameters:
epsilon - a precision parameter: when a number |x| ≤ ε, it is considered 0
Returns:
true if this is unreduced

Description copied from interface: MatrixRing
this + that
Specified by:
Specified by:
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)
this * that

When the two matrices have opposite types, i.e., one is BidiagonalMatrix.BidiagonalMatrixType.UPPER and one is BidiagonalMatrix.BidiagonalMatrixType.LOWER, the product of the two bi-diagonal matrices is a tridiagonal matrix.

Specified by:
multiply in interface MatrixRing
Specified by:
multiply in interface Monoid<Matrix>
Parameters:
that - a matrix
Returns:
this * that
• ### scaled

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

public BidiagonalMatrix opposite()
Description copied from interface: MatrixRing
Get the opposite of this matrix.
Returns:
-this
• ### t

public BidiagonalMatrix t()
Description copied from interface: MatrixRing
Get the transpose of this matrix. This is the involution on the matrix ring.
Returns:
the transpose of this matrix
• ### ZERO

public BidiagonalMatrix ZERO()
Description copied from interface: MatrixRing
Get a zero matrix that has the same dimension as this matrix.
Returns:
the 0 matrix
• ### ONE

public BidiagonalMatrix 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).
Returns:
an identity matrix
• ### toDense

public DenseMatrix toDense()
Description copied from interface: Densifiable
Densify a matrix, i.e., convert a matrix implementation to the standard dense matrix, DenseMatrix.
Specified by:
toDense in interface Densifiable
Returns:
a matrix representation in DenseMatrix
• ### getDiagonal

public DenseVector getDiagonal()
Gets the main diagonal of the matrix.
Returns:
the main diagonal
• ### getSuperDiagonal

public DenseVector getSuperDiagonal()
Gets the super-diagonal of the matrix.
Returns:
the super-diagonal
• ### getSubDiagonal

public DenseVector getSubDiagonal()
Gets the sub-diagonal of the matrix.
Returns:
the sub-diagonal
• ### 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
• ### set

public void set(int i, int j, 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:
i - the row index
j - the column index
value - the value to set A[i,j] to
Throws:
MatrixAccessException - if i or j is out of range
• ### 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)
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, ]
• ### getColumn

public Vector getColumn(int j)
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]
• ### 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
• ### 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