|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.commons.math.linear.RealMatrixImpl
Implementation for RealMatrix using a double[][] array to store entries and LU decompostion to support linear system solution and inverse.
The LU decompostion is performed as needed, to support the following operations:
Usage notes:
getDataRef()
, then the stored LU decomposition will not be
discarded. In this case, you need to explicitly invoke
LUDecompose()
to recompute the decomposition
before using any of the methods above.RealMatrix
interface, matrix element indexing
is 0-based -- e.g., getEntry(0, 0)
returns the element in the first row, first column of the matrix.
Field Summary | |
(package private) static long |
serialVersionUID
Serializable version identifier |
protected static double |
TOO_SMALL
Bound to determine effective singularity in LU decomposition |
Constructor Summary | |
RealMatrixImpl()
Creates a matrix with no data |
|
RealMatrixImpl(double[] v)
Create a new (column) RealMatrix using v as the
data for the unique column of the v.length x 1 matrix
created. |
|
RealMatrixImpl(double[][] d)
Create a new RealMatrix using the input array as the underlying data array. |
|
RealMatrixImpl(int rowDimension,
int columnDimension)
Create a new RealMatrix with the supplied row and column dimensions. |
Method Summary | |
RealMatrix |
add(RealMatrix m)
Compute the sum of this and m . |
RealMatrix |
copy()
Create a new RealMatrix which is a copy of this. |
boolean |
equals(Object object)
Returns true iff object is a
RealMatrixImpl instance with the same dimensions as this
and all corresponding matrix entries are equal. |
double[] |
getColumn(int col)
Returns the entries in column number col as an array. |
int |
getColumnDimension()
Returns the number of columns in the matrix. |
RealMatrix |
getColumnMatrix(int column)
Returns the entries in column number column
as a column matrix. |
double[][] |
getData()
Returns matrix entries as a two-dimensional array. |
double[][] |
getDataRef()
Returns a reference to the underlying data array. |
double |
getDeterminant()
Returns the determinant of this matrix. |
double |
getEntry(int row,
int column)
Returns the entry in the specified row and column. |
protected RealMatrix |
getIdentity(int dimension)
Returns dimension x dimension identity matrix. |
protected RealMatrix |
getLUMatrix()
Returns the LU decomposition as a RealMatrix. |
double |
getNorm()
Returns the maximum absolute row sum norm of the matrix. |
protected int[] |
getPermutation()
Returns the permutation associated with the lu decomposition. |
double[] |
getRow(int row)
Returns the entries in row number row as an array. |
int |
getRowDimension()
Returns the number of rows in the matrix. |
RealMatrix |
getRowMatrix(int row)
Returns the entries in row number row
as a row matrix. |
RealMatrix |
getSubMatrix(int[] selectedRows,
int[] selectedColumns)
Gets a submatrix. |
RealMatrix |
getSubMatrix(int startRow,
int endRow,
int startColumn,
int endColumn)
Gets a submatrix. |
double |
getTrace()
Returns the trace of the matrix (the sum of the elements on the main diagonal). |
int |
hashCode()
Computes a hashcode for the matrix. |
RealMatrix |
inverse()
Returns the inverse matrix if this matrix is invertible. |
boolean |
isSingular()
Is this a singular matrix? |
boolean |
isSquare()
Is this a square matrix? |
void |
luDecompose()
Computes a new LU decompostion for this matrix, storing the result for use by other methods. |
RealMatrix |
multiply(RealMatrix m)
Returns the result of postmultiplying this by m . |
double[] |
operate(double[] v)
Returns the result of multiplying this by the vector v . |
double[] |
preMultiply(double[] v)
Returns the (row) vector result of premultiplying this by the vector v . |
RealMatrix |
preMultiply(RealMatrix m)
Returns the result premultiplying this by m . |
RealMatrix |
scalarAdd(double d)
Returns the result of adding d to each entry of this. |
RealMatrix |
scalarMultiply(double d)
Returns the result multiplying each entry of this by d |
double[] |
solve(double[] b)
Returns a matrix of (column) solution vectors for linear systems with coefficient matrix = this and constant vectors = columns of b . |
RealMatrix |
solve(RealMatrix b)
Returns a matrix of (column) solution vectors for linear systems with coefficient matrix = this and constant vectors = columns of b . |
RealMatrix |
subtract(RealMatrix m)
Compute this minus m . |
String |
toString()
|
RealMatrix |
transpose()
Returns the transpose matrix. |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
static final long serialVersionUID
protected static double TOO_SMALL
Constructor Detail |
public RealMatrixImpl()
public RealMatrixImpl(int rowDimension, int columnDimension)
rowDimension
- the number of rows in the new matrixcolumnDimension
- the number of columns in the new matrixpublic RealMatrixImpl(double[][] d)
The input array is copied, not referenced.
d
- data for new matrix
IllegalArgumentException
- if data
is not rectangular
(not all rows have the same length) or empty
NullPointerException
- if data
is nullpublic RealMatrixImpl(double[] v)
v
as the
data for the unique column of the v.length x 1
matrix
created.
The input array is copied, not referenced.
v
- column vector holding data for new matrixMethod Detail |
public RealMatrix copy()
copy
in interface RealMatrix
public RealMatrix add(RealMatrix m) throws IllegalArgumentException
m
.
add
in interface RealMatrix
m
- matrix to be added
IllegalArgumentException
- if m is not the same size as thispublic RealMatrix subtract(RealMatrix m) throws IllegalArgumentException
m
.
subtract
in interface RealMatrix
m
- matrix to be subtracted
IllegalArgumentException
- if m is not the same size as *thispublic RealMatrix scalarAdd(double d)
scalarAdd
in interface RealMatrix
d
- value to be added to each entry
public RealMatrix scalarMultiply(double d)
d
scalarMultiply
in interface RealMatrix
d
- value to multiply all entries by
public RealMatrix multiply(RealMatrix m) throws IllegalArgumentException
m
.
multiply
in interface RealMatrix
m
- matrix to postmultiply by
IllegalArgumentException
- if columnDimension(this) != rowDimension(m)public RealMatrix preMultiply(RealMatrix m) throws IllegalArgumentException
m
.
preMultiply
in interface RealMatrix
m
- matrix to premultiply by
IllegalArgumentException
- if rowDimension(this) != columnDimension(m)public double[][] getData()
Makes a fresh copy of the underlying data.
getData
in interface RealMatrix
public double[][] getDataRef()
Does not make a fresh copy of the underlying data.
public double getNorm()
RealMatrix
getNorm
in interface RealMatrix
public RealMatrix getSubMatrix(int startRow, int endRow, int startColumn, int endColumn) throws MatrixIndexException
getSubMatrix
in interface RealMatrix
startRow
- Initial row indexendRow
- Final row indexstartColumn
- Initial column indexendColumn
- Final column index
MatrixIndexException
- if row or column selections are not validpublic RealMatrix getSubMatrix(int[] selectedRows, int[] selectedColumns) throws MatrixIndexException
getSubMatrix
in interface RealMatrix
selectedRows
- Array of row indices must be non-emptyselectedColumns
- Array of column indices must be non-empty
MatrixIndexException
- if supplied row or column index arrays
are not validpublic RealMatrix getRowMatrix(int row) throws MatrixIndexException
row
as a row matrix. Row indices start at 0.
getRowMatrix
in interface RealMatrix
row
- the row to be fetched
MatrixIndexException
- if the specified row index is invalidpublic RealMatrix getColumnMatrix(int column) throws MatrixIndexException
column
as a column matrix. Column indices start at 0.
getColumnMatrix
in interface RealMatrix
column
- the column to be fetched
MatrixIndexException
- if the specified column index is invalidpublic double[] getRow(int row) throws MatrixIndexException
row
as an array.
Row indices start at 0. A MatrixIndexException
is thrown
unless 0 <= row < rowDimension.
getRow
in interface RealMatrix
row
- the row to be fetched
MatrixIndexException
- if the specified row index is not validpublic double[] getColumn(int col) throws MatrixIndexException
col
as an array.
Column indices start at 0. A MatrixIndexException
is thrown
unless 0 <= column < columnDimension.
getColumn
in interface RealMatrix
col
- the column to be fetched
MatrixIndexException
- if the specified column index is not validpublic double getEntry(int row, int column) throws MatrixIndexException
Row and column indices start at 0 and must satisfy
0 <= row < rowDimension
0 <= column < columnDimension
MatrixIndexException
is thrown.
getEntry
in interface RealMatrix
row
- row location of entry to be fetchedcolumn
- column location of entry to be fetched
MatrixIndexException
- if the row or column index is not validpublic RealMatrix transpose()
transpose
in interface RealMatrix
public RealMatrix inverse() throws InvalidMatrixException
inverse
in interface RealMatrix
InvalidMatrixException
- if this is not invertiblepublic double getDeterminant() throws InvalidMatrixException
RealMatrix
getDeterminant
in interface RealMatrix
InvalidMatrixException
- if matrix is not squarepublic boolean isSquare()
RealMatrix
isSquare
in interface RealMatrix
public boolean isSingular()
RealMatrix
isSingular
in interface RealMatrix
public int getRowDimension()
RealMatrix
getRowDimension
in interface RealMatrix
public int getColumnDimension()
RealMatrix
getColumnDimension
in interface RealMatrix
public double getTrace() throws IllegalArgumentException
RealMatrix
getTrace
in interface RealMatrix
IllegalArgumentException
- if the matrix is not squarepublic double[] operate(double[] v) throws IllegalArgumentException
RealMatrix
v
.
operate
in interface RealMatrix
v
- vector to operate on
IllegalArgumentException
- if columnDimension != v.lengthpublic double[] preMultiply(double[] v) throws IllegalArgumentException
RealMatrix
v
.
preMultiply
in interface RealMatrix
v
- vector to premultiply by
IllegalArgumentException
- if rowDimension != v.lengthpublic double[] solve(double[] b) throws IllegalArgumentException, InvalidMatrixException
b
.
solve
in interface RealMatrix
b
- array of constant forming RHS of linear systems to
to solve
IllegalArgumentException
- if this.rowDimension != row dimension
InvalidMatrixException
- if this matrix is not square or is singularpublic RealMatrix solve(RealMatrix b) throws IllegalArgumentException, InvalidMatrixException
b
.
solve
in interface RealMatrix
b
- matrix of constant vectors forming RHS of linear systems to
to solve
IllegalArgumentException
- if this.rowDimension != row dimension
InvalidMatrixException
- if this matrix is not square or is singularpublic void luDecompose() throws InvalidMatrixException
Implementation Note:
Uses
Crout's algortithm, with partial pivoting.
Usage Note:
This method should rarely be invoked directly. Its only use is
to force recomputation of the LU decomposition when changes have been
made to the underlying data using direct array references. Changes
made using setXxx methods will trigger recomputation when needed
automatically.
InvalidMatrixException
- if the matrix is non-square or singular.public String toString()
Object.toString()
public boolean equals(Object object)
object
is a
RealMatrixImpl
instance with the same dimensions as this
and all corresponding matrix entries are equal.
object
- the object to test equality against.
public int hashCode()
protected RealMatrix getIdentity(int dimension)
dimension x dimension
identity matrix.
dimension
- dimension of identity matrix to generate
protected RealMatrix getLUMatrix() throws InvalidMatrixException
The matrix returned is a compact representation of the LU decomposition. Elements below the main diagonal correspond to entries of the "L" matrix; elements on and above the main diagonal correspond to entries of the "U" matrix.
Example:
Returned matrix L U 2 3 1 1 0 0 2 3 1 5 4 6 5 1 0 0 4 6 1 7 8 1 7 1 0 0 8The L and U matrices satisfy the matrix equation LU = permuteRows(this),
InvalidMatrixException
- if the matrix is non-square or singular.protected int[] getPermutation()
Example: permutation = [1, 2, 0] means current 2nd row is first, current third row is second and current first row is last.
Returns a fresh copy of the array.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |