public abstract class Matrix<F extends Field<F>> extends java.lang.Object implements VectorSpace<Matrix<F>,F>, Ring<Matrix<F>>, javolution.lang.ValueType, javolution.lang.Realtime
This class represents a rectangular table of elements of a ring-like algebraic structure.
Instances of this class can be used to resolve system of linear equations
involving any kind of Field
elements
(e.g. Real
,
Complex
,
Amount<?>
,
Function
, etc).
For example:[code]
// Creates a dense matrix (2x2) of Rational numbers.
DenseMatrix
Non-commutative field multiplication is supported. Invertible square matrices may form a non-commutative field (also called a division ring). In which case this class may be used to resolve system of linear equations with matrix coefficients.
Implementation Note: Matrices may use StackContext
and ConcurrentContext
in order to
minimize heap allocation and accelerate calculations on multi-core
systems.
Modifier and Type | Method and Description |
---|---|
abstract Matrix<F> |
adjoint()
Returns the adjoint of this matrix.
|
abstract F |
cofactor(int i,
int j)
Returns the cofactor of an element in this matrix.
|
abstract Matrix<F> |
copy()
Returns a copy of this matrix
allocated
by the calling thread (possibly on the stack). |
abstract F |
determinant()
Returns the determinant of this matrix.
|
Matrix<F> |
divide(Matrix<F> that)
Returns this matrix divided by the one specified.
|
boolean |
equals(Matrix<F> that,
java.util.Comparator<F> cmp)
Indicates if this matrix can be considered equals to the one
specified using the specified comparator when testing for
element equality.
|
boolean |
equals(java.lang.Object that)
Indicates if this matrix is strictly equal to the object specified.
|
abstract F |
get(int i,
int j)
Returns a single element from this matrix.
|
abstract Vector<F> |
getColumn(int j)
Returns the column identified by the specified index in this matrix.
|
abstract Vector<F> |
getDiagonal()
Returns the diagonal vector.
|
abstract int |
getNumberOfColumns()
Returns the number of columns
n for this matrix. |
abstract int |
getNumberOfRows()
Returns the number of rows
m for this matrix. |
abstract Vector<F> |
getRow(int i)
Returns the row identified by the specified index in this matrix.
|
int |
hashCode()
Returns a hash code value for this matrix.
|
abstract Matrix<F> |
inverse()
Returns the inverse of this matrix (must be square).
|
boolean |
isSquare()
Indicates if this matrix is square.
|
Matrix<F> |
minus(Matrix<F> that)
Returns the difference between this matrix and the one specified.
|
abstract Matrix<F> |
opposite()
Returns the negation of this matrix.
|
abstract Matrix<F> |
plus(Matrix<F> that)
Returns the sum of this matrix with the one specified.
|
Matrix<F> |
pow(int exp)
Returns this matrix raised at the specified exponent.
|
Matrix<F> |
pseudoInverse()
Returns the inverse or pseudo-inverse if this matrix if not square.
|
Matrix<F> |
solve(Matrix<F> y)
Solves this matrix for the specified matrix (returns
x
such as this · x = y ). |
Vector<F> |
solve(Vector<F> y)
Solves this matrix for the specified vector (returns
x
such as this · x = y ). |
abstract Matrix<F> |
tensor(Matrix<F> that)
Returns the linear algebraic matrix tensor product of this matrix
and another (Kronecker product).
|
abstract Matrix<F> |
times(F k)
Returns the product of this matrix by the specified factor.
|
abstract Matrix<F> |
times(Matrix<F> that)
Returns the product of this matrix with the one specified.
|
abstract Vector<F> |
times(Vector<F> v)
Returns the product of this matrix by the specified vector.
|
java.lang.String |
toString()
Returns the text representation of this matrix as a
java.lang.String . |
javolution.text.Text |
toText()
Returns the text representation of this matrix.
|
F |
trace()
Returns the trace of this matrix.
|
abstract Matrix<F> |
transpose()
Returns the transpose of this matrix.
|
abstract Vector<F> |
vectorization()
Returns the vectorization of this matrix.
|
public abstract int getNumberOfRows()
m
for this matrix.public abstract int getNumberOfColumns()
n
for this matrix.public abstract F get(int i, int j)
i
- the row index (range [0..m[).j
- the column index (range [0..n[).java.lang.IndexOutOfBoundsException
-
((i < 0) || (i >= m)) || ((j < 0) || (j >= n))
public abstract Vector<F> getRow(int i)
i
- the row index (range [0..m[).java.lang.IndexOutOfBoundsException
- (i < 0) || (i >= m)
public abstract Vector<F> getColumn(int j)
j
- the column index (range [0..n[).java.lang.IndexOutOfBoundsException
- (j < 0) || (j >= n)
public abstract Vector<F> getDiagonal()
public abstract Matrix<F> plus(Matrix<F> that)
plus
in interface GroupAdditive<Matrix<F extends Field<F>>>
that
- the matrix to be added.this + that
.DimensionException
- matrices's dimensions are different.public Matrix<F> minus(Matrix<F> that)
that
- the matrix to be subtracted.this - that
.DimensionException
- matrices's dimensions are different.public abstract Matrix<F> times(F k)
public abstract Vector<F> times(Vector<F> v)
v
- the vector.this · v
DimensionException
- if
v.getDimension() != this.getNumberOfColumns()
public abstract Matrix<F> times(Matrix<F> that)
public abstract Matrix<F> inverse()
1 / this
DimensionException
- if this matrix is not square.public Matrix<F> divide(Matrix<F> that)
that
- the matrix divisor.this / that
.DimensionException
- if that matrix is not square or dimensions
do not match.public Matrix<F> pseudoInverse()
Note: To resolve the equation A * X = B
,
it is usually faster to calculate A.lu().solve(B)
rather than A.inverse().times(B)
.
public abstract F determinant()
DimensionException
- if this matrix is not square.public abstract F cofactor(int i, int j)
i
- the row index.j
- the column index.THIS[i,j]
.DimensionException
- matrix is not square or its dimension
is less than 2.public abstract Matrix<F> adjoint()
DimensionException
- if this matrix is not square or if
its dimension is less than 2.public boolean isSquare()
getNumberOfRows() == getNumberOfColumns()
public Vector<F> solve(Vector<F> y)
x
such as this · x = y
).y
- the vector for which the solution is calculated.x
such as this · x = y
DimensionException
- if that matrix is not square or dimensions
do not match.public Matrix<F> solve(Matrix<F> y)
x
such as this · x = y
).y
- the matrix for which the solution is calculated.x
such as this · x = y
DimensionException
- if that matrix is not square or dimensions
do not match.public Matrix<F> pow(int exp)
exp
- the exponent.thisexp
DimensionException
- if this matrix is not square.public abstract Matrix<F> tensor(Matrix<F> that)
DenseMatrix
.that
- the second matrix.this ⊗ that
public abstract Vector<F> vectorization()
DenseVector
.public javolution.text.Text toText()
toText
in interface javolution.lang.Realtime
public final java.lang.String toString()
java.lang.String
.toString
in class java.lang.Object
toText().toString()
public boolean equals(Matrix<F> that, java.util.Comparator<F> cmp)
that
- the matrix to compare for equality.cmp
- the comparator to use when testing for element equality.true
if this matrix and the specified matrix are
both matrices with equal elements according to the specified
comparator; false
otherwise.public boolean equals(java.lang.Object that)
equals
in class java.lang.Object
that
- the object to compare for equality.true
if this matrix and the specified object are
both matrices with equal elements; false
otherwise.equals(Matrix, Comparator)
public int hashCode()
hashCode
in class java.lang.Object
equals(org.jscience.mathematics.vector.Matrix<F>, java.util.Comparator<F>)