public class MatrixUtils extends Object
| Modifier and Type | Field and Description |
|---|---|
static RealMatrixFormat |
DEFAULT_FORMAT
The default format for
RealMatrix objects. |
static RealMatrixFormat |
OCTAVE_FORMAT
A format for
RealMatrix objects compatible with octave. |
| Modifier and Type | Method and Description |
|---|---|
static Array2DRowRealMatrix |
bigFractionMatrixToRealMatrix(FieldMatrix<BigFraction> m)
|
static RealMatrix |
blockInverse(RealMatrix m,
int splitIndex)
Computes the inverse of the given matrix by splitting it into
4 sub-matrices.
|
static void |
checkAdditionCompatible(AnyMatrix left,
AnyMatrix right)
Check if matrices are addition compatible.
|
static void |
checkColumnIndex(AnyMatrix m,
int column)
Check if a column index is valid.
|
static void |
checkMatrixIndex(AnyMatrix m,
int row,
int column)
Check if matrix indices are valid.
|
static void |
checkMultiplicationCompatible(AnyMatrix left,
AnyMatrix right)
Check if matrices are multiplication compatible
|
static void |
checkRowIndex(AnyMatrix m,
int row)
Check if a row index is valid.
|
static void |
checkSubMatrixIndex(AnyMatrix m,
int[] selectedRows,
int[] selectedColumns)
Check if submatrix ranges indices are valid.
|
static void |
checkSubMatrixIndex(AnyMatrix m,
int startRow,
int endRow,
int startColumn,
int endColumn)
Check if submatrix ranges indices are valid.
|
static void |
checkSubtractionCompatible(AnyMatrix left,
AnyMatrix right)
Check if matrices are subtraction compatible
|
static void |
checkSymmetric(RealMatrix matrix,
double eps)
Checks whether a matrix is symmetric.
|
static <T extends FieldElement<T>> |
createColumnFieldMatrix(T[] columnData)
Creates a column
FieldMatrix using the data from the input
array. |
static RealMatrix |
createColumnRealMatrix(double[] columnData)
Creates a column
RealMatrix using the data from the input
array. |
static <T extends FieldElement<T>> |
createFieldDiagonalMatrix(T[] diagonal)
Returns a diagonal matrix with specified elements.
|
static <T extends FieldElement<T>> |
createFieldIdentityMatrix(Field<T> field,
int dimension)
Returns
dimension x dimension identity matrix. |
static <T extends FieldElement<T>> |
createFieldMatrix(Field<T> field,
int rows,
int columns)
Returns a
FieldMatrix with specified dimensions. |
static <T extends FieldElement<T>> |
createFieldMatrix(T[][] data)
Returns a
FieldMatrix whose entries are the the values in the
the input array. |
static <T extends FieldElement<T>> |
createFieldVector(T[] data)
Creates a
FieldVector using the data from the input array. |
static RealMatrix |
createRealDiagonalMatrix(double[] diagonal)
Returns a diagonal matrix with specified elements.
|
static RealMatrix |
createRealIdentityMatrix(int dimension)
Returns
dimension x dimension identity matrix. |
static RealMatrix |
createRealMatrix(double[][] data)
Returns a
RealMatrix whose entries are the the values in the
the input array. |
static RealMatrix |
createRealMatrix(int rows,
int columns)
Returns a
RealMatrix with specified dimensions. |
static RealVector |
createRealVector(double[] data)
Creates a
RealVector using the data from the input array. |
static <T extends FieldElement<T>> |
createRowFieldMatrix(T[] rowData)
Create a row
FieldMatrix using the data from the input
array. |
static RealMatrix |
createRowRealMatrix(double[] rowData)
Create a row
RealMatrix using the data from the input
array. |
static void |
deserializeRealMatrix(Object instance,
String fieldName,
ObjectInputStream ois)
Deserialize a
RealMatrix field in a class. |
static void |
deserializeRealVector(Object instance,
String fieldName,
ObjectInputStream ois)
Deserialize a
RealVector field in a class. |
static Array2DRowRealMatrix |
fractionMatrixToRealMatrix(FieldMatrix<Fraction> m)
|
static RealMatrix |
inverse(RealMatrix matrix)
Computes the inverse of the given matrix.
|
static RealMatrix |
inverse(RealMatrix matrix,
double threshold)
Computes the inverse of the given matrix.
|
static boolean |
isSymmetric(RealMatrix matrix,
double eps)
Checks whether a matrix is symmetric.
|
static void |
serializeRealMatrix(RealMatrix matrix,
ObjectOutputStream oos)
Serialize a
RealMatrix. |
static void |
serializeRealVector(RealVector vector,
ObjectOutputStream oos)
Serialize a
RealVector. |
static void |
solveLowerTriangularSystem(RealMatrix rm,
RealVector b)
Solve a system of composed of a Lower Triangular Matrix
RealMatrix. |
static void |
solveUpperTriangularSystem(RealMatrix rm,
RealVector b)
Solver a system composed of an Upper Triangular Matrix
RealMatrix. |
public static final RealMatrixFormat DEFAULT_FORMAT
RealMatrix objects.public static final RealMatrixFormat OCTAVE_FORMAT
RealMatrix objects compatible with octave.public static RealMatrix createRealMatrix(int rows, int columns)
RealMatrix with specified dimensions.
The type of matrix returned depends on the dimension. Below
212 elements (i.e. 4096 elements or 64×64 for a
square matrix) which can be stored in a 32kB array, a Array2DRowRealMatrix instance is built. Above this threshold a BlockRealMatrix instance is built.
The matrix elements are all set to 0.0.
rows - number of rows of the matrixcolumns - number of columns of the matrixcreateRealMatrix(double[][])public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(Field<T> field, int rows, int columns)
FieldMatrix with specified dimensions.
The type of matrix returned depends on the dimension. Below
212 elements (i.e. 4096 elements or 64×64 for a
square matrix), a FieldMatrix instance is built. Above
this threshold a BlockFieldMatrix instance is built.
The matrix elements are all set to field.getZero().
T - the type of the field elementsfield - field to which the matrix elements belongrows - number of rows of the matrixcolumns - number of columns of the matrixcreateFieldMatrix(FieldElement[][])public static RealMatrix createRealMatrix(double[][] data) throws NullArgumentException, DimensionMismatchException, NoDataException
RealMatrix whose entries are the the values in the
the input array.
The type of matrix returned depends on the dimension. Below
212 elements (i.e. 4096 elements or 64×64 for a
square matrix) which can be stored in a 32kB array, a Array2DRowRealMatrix instance is built. Above this threshold a BlockRealMatrix instance is built.
The input array is copied, not referenced.
data - input arrayDimensionMismatchException - if data is not rectangular (not all rows have the same length).NoDataException - if a row or column is empty.NullArgumentException - if either data or data[0]
is null.DimensionMismatchException - if data is not rectangular.createRealMatrix(int, int)public static <T extends FieldElement<T>> FieldMatrix<T> createFieldMatrix(T[][] data) throws DimensionMismatchException, NoDataException, NullArgumentException
FieldMatrix whose entries are the the values in the
the input array.
The type of matrix returned depends on the dimension. Below
212 elements (i.e. 4096 elements or 64×64 for a
square matrix), a FieldMatrix instance is built. Above
this threshold a BlockFieldMatrix instance is built.
The input array is copied, not referenced.
T - the type of the field elementsdata - input arrayDimensionMismatchException - if data is not rectangular (not all rows have the same length).NoDataException - if a row or column is empty.NullArgumentException - if either data or data[0]
is null.createFieldMatrix(Field, int, int)public static RealMatrix createRealIdentityMatrix(int dimension)
dimension x dimension identity matrix.dimension - dimension of identity matrix to generateIllegalArgumentException - if dimension is not positivepublic static <T extends FieldElement<T>> FieldMatrix<T> createFieldIdentityMatrix(Field<T> field, int dimension)
dimension x dimension identity matrix.T - the type of the field elementsfield - field to which the elements belongdimension - dimension of identity matrix to generateIllegalArgumentException - if dimension is not positivepublic static RealMatrix createRealDiagonalMatrix(double[] diagonal)
diagonal - diagonal elements of the matrix (the array elements
will be copied)public static <T extends FieldElement<T>> FieldMatrix<T> createFieldDiagonalMatrix(T[] diagonal)
T - the type of the field elementsdiagonal - diagonal elements of the matrix (the array elements
will be copied)public static RealVector createRealVector(double[] data) throws NoDataException, NullArgumentException
RealVector using the data from the input array.data - the input dataNoDataException - if data is empty.NullArgumentException - if data is null.public static <T extends FieldElement<T>> FieldVector<T> createFieldVector(T[] data) throws NoDataException, NullArgumentException, ZeroException
FieldVector using the data from the input array.T - the type of the field elementsdata - the input dataNoDataException - if data is empty.NullArgumentException - if data is null.ZeroException - if data has 0 elementspublic static RealMatrix createRowRealMatrix(double[] rowData) throws NoDataException, NullArgumentException
RealMatrix using the data from the input
array.rowData - the input row dataNoDataException - if rowData is empty.NullArgumentException - if rowData is null.public static <T extends FieldElement<T>> FieldMatrix<T> createRowFieldMatrix(T[] rowData) throws NoDataException, NullArgumentException
FieldMatrix using the data from the input
array.T - the type of the field elementsrowData - the input row dataNoDataException - if rowData is empty.NullArgumentException - if rowData is null.public static RealMatrix createColumnRealMatrix(double[] columnData) throws NoDataException, NullArgumentException
RealMatrix using the data from the input
array.columnData - the input column dataNoDataException - if columnData is empty.NullArgumentException - if columnData is null.public static <T extends FieldElement<T>> FieldMatrix<T> createColumnFieldMatrix(T[] columnData) throws NoDataException, NullArgumentException
FieldMatrix using the data from the input
array.T - the type of the field elementscolumnData - the input column dataNoDataException - if data is empty.NullArgumentException - if columnData is null.public static void checkSymmetric(RealMatrix matrix, double eps)
matrix - Matrix to check.eps - Relative tolerance.NonSquareMatrixException - if the matrix is not square.NonSymmetricMatrixException - if the matrix is not symmetric.public static boolean isSymmetric(RealMatrix matrix, double eps)
matrix - Matrix to check.eps - Relative tolerance.true if matrix is symmetric.public static void checkMatrixIndex(AnyMatrix m, int row, int column) throws OutOfRangeException
m - Matrix.row - Row index to check.column - Column index to check.OutOfRangeException - if row or column is not
a valid index.public static void checkRowIndex(AnyMatrix m, int row) throws OutOfRangeException
m - Matrix.row - Row index to check.OutOfRangeException - if row is not a valid index.public static void checkColumnIndex(AnyMatrix m, int column) throws OutOfRangeException
m - Matrix.column - Column index to check.OutOfRangeException - if column is not a valid index.public static void checkSubMatrixIndex(AnyMatrix m, int startRow, int endRow, int startColumn, int endColumn) throws NumberIsTooSmallException, OutOfRangeException
n - 1.m - Matrix.startRow - Initial row index.endRow - Final row index.startColumn - Initial column index.endColumn - Final column index.OutOfRangeException - if the indices are invalid.NumberIsTooSmallException - if endRow < startRow or
endColumn < startColumn.public static void checkSubMatrixIndex(AnyMatrix m, int[] selectedRows, int[] selectedColumns) throws NoDataException, NullArgumentException, OutOfRangeException
m - Matrix.selectedRows - Array of row indices.selectedColumns - Array of column indices.NullArgumentException - if selectedRows or
selectedColumns are null.NoDataException - if the row or column selections are empty (zero
length).OutOfRangeException - if row or column selections are not valid.public static void checkAdditionCompatible(AnyMatrix left, AnyMatrix right) throws MatrixDimensionMismatchException
left - Left hand side matrix.right - Right hand side matrix.MatrixDimensionMismatchException - if the matrices are not addition
compatible.public static void checkSubtractionCompatible(AnyMatrix left, AnyMatrix right) throws MatrixDimensionMismatchException
left - Left hand side matrix.right - Right hand side matrix.MatrixDimensionMismatchException - if the matrices are not addition
compatible.public static void checkMultiplicationCompatible(AnyMatrix left, AnyMatrix right) throws DimensionMismatchException
left - Left hand side matrix.right - Right hand side matrix.DimensionMismatchException - if matrices are not multiplication
compatible.public static Array2DRowRealMatrix fractionMatrixToRealMatrix(FieldMatrix<Fraction> m)
m - Matrix to convert.public static Array2DRowRealMatrix bigFractionMatrixToRealMatrix(FieldMatrix<BigFraction> m)
m - Matrix to convert.public static void serializeRealVector(RealVector vector, ObjectOutputStream oos) throws IOException
RealVector.
This method is intended to be called from within a private
writeObject method (after a call to
oos.defaultWriteObject()) in a class that has a
RealVector field, which should be declared transient.
This way, the default handling does not serialize the vector (the RealVector interface is not serializable by default) but this method does
serialize it specifically.
The following example shows how a simple class with a name and a real vector should be written:
public class NamedVector implements Serializable {
private final String name;
private final transient RealVector coefficients;
// omitted constructors, getters ...
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject(); // takes care of name field
MatrixUtils.serializeRealVector(coefficients, oos);
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject(); // takes care of name field
MatrixUtils.deserializeRealVector(this, "coefficients", ois);
}
}
vector - real vector to serializeoos - stream where the real vector should be writtenIOException - if object cannot be written to streamdeserializeRealVector(Object, String, ObjectInputStream)public static void deserializeRealVector(Object instance, String fieldName, ObjectInputStream ois) throws ClassNotFoundException, IOException
RealVector field in a class.
This method is intended to be called from within a private
readObject method (after a call to
ois.defaultReadObject()) in a class that has a
RealVector field, which should be declared transient.
This way, the default handling does not deserialize the vector (the RealVector interface is not serializable by default) but this method does
deserialize it specifically.
instance - instance in which the field must be set upfieldName - name of the field within the class (may be private and final)ois - stream from which the real vector should be readClassNotFoundException - if a class in the stream cannot be foundIOException - if object cannot be read from the streamserializeRealVector(RealVector, ObjectOutputStream)public static void serializeRealMatrix(RealMatrix matrix, ObjectOutputStream oos) throws IOException
RealMatrix.
This method is intended to be called from within a private
writeObject method (after a call to
oos.defaultWriteObject()) in a class that has a
RealMatrix field, which should be declared transient.
This way, the default handling does not serialize the matrix (the RealMatrix interface is not serializable by default) but this method does
serialize it specifically.
The following example shows how a simple class with a name and a real matrix should be written:
public class NamedMatrix implements Serializable {
private final String name;
private final transient RealMatrix coefficients;
// omitted constructors, getters ...
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject(); // takes care of name field
MatrixUtils.serializeRealMatrix(coefficients, oos);
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject(); // takes care of name field
MatrixUtils.deserializeRealMatrix(this, "coefficients", ois);
}
}
matrix - real matrix to serializeoos - stream where the real matrix should be writtenIOException - if object cannot be written to streamdeserializeRealMatrix(Object, String, ObjectInputStream)public static void deserializeRealMatrix(Object instance, String fieldName, ObjectInputStream ois) throws ClassNotFoundException, IOException
RealMatrix field in a class.
This method is intended to be called from within a private
readObject method (after a call to
ois.defaultReadObject()) in a class that has a
RealMatrix field, which should be declared transient.
This way, the default handling does not deserialize the matrix (the RealMatrix interface is not serializable by default) but this method does
deserialize it specifically.
instance - instance in which the field must be set upfieldName - name of the field within the class (may be private and final)ois - stream from which the real matrix should be readClassNotFoundException - if a class in the stream cannot be foundIOException - if object cannot be read from the streamserializeRealMatrix(RealMatrix, ObjectOutputStream)public static void solveLowerTriangularSystem(RealMatrix rm, RealVector b) throws DimensionMismatchException, MathArithmeticException, NonSquareMatrixException
RealMatrix.
This method is called to solve systems of equations which are
of the lower triangular form. The matrix RealMatrix
is assumed, though not checked, to be in lower triangular form.
The vector RealVector is overwritten with the solution.
The matrix is checked that it is square and its dimensions match
the length of the vector.
rm - RealMatrix which is lower triangularb - RealVector this is overwrittenDimensionMismatchException - if the matrix and vector are not
conformableNonSquareMatrixException - if the matrix rm is not squareMathArithmeticException - if the absolute value of one of the diagonal
coefficient of rm is lower than Precision.SAFE_MINpublic static void solveUpperTriangularSystem(RealMatrix rm, RealVector b) throws DimensionMismatchException, MathArithmeticException, NonSquareMatrixException
RealMatrix.
This method is called to solve systems of equations which are
of the lower triangular form. The matrix RealMatrix
is assumed, though not checked, to be in upper triangular form.
The vector RealVector is overwritten with the solution.
The matrix is checked that it is square and its dimensions match
the length of the vector.
rm - RealMatrix which is upper triangularb - RealVector this is overwrittenDimensionMismatchException - if the matrix and vector are not
conformableNonSquareMatrixException - if the matrix rm is not
squareMathArithmeticException - if the absolute value of one of the diagonal
coefficient of rm is lower than Precision.SAFE_MINpublic static RealMatrix blockInverse(RealMatrix m, int splitIndex)
m - Matrix whose inverse must be computed.splitIndex - Index that determines the "split" line and
column.
The element corresponding to this index will part of the
upper-left sub-matrix.m.NonSquareMatrixException - if m is not square.public static RealMatrix inverse(RealMatrix matrix) throws NullArgumentException, SingularMatrixException, NonSquareMatrixException
By default, the inverse of the matrix is computed using the QR-decomposition, unless a more efficient method can be determined for the input matrix.
Note: this method will use a singularity threshold of 0,
use inverse(RealMatrix, double) if a different threshold is needed.
matrix - Matrix whose inverse shall be computedmatrixNullArgumentException - if matrix is nullSingularMatrixException - if m is singularNonSquareMatrixException - if matrix is not squarepublic static RealMatrix inverse(RealMatrix matrix, double threshold) throws NullArgumentException, SingularMatrixException, NonSquareMatrixException
By default, the inverse of the matrix is computed using the QR-decomposition, unless a more efficient method can be determined for the input matrix.
matrix - Matrix whose inverse shall be computedthreshold - Singularity thresholdmNullArgumentException - if matrix is nullSingularMatrixException - if matrix is singularNonSquareMatrixException - if matrix is not squareCopyright © 2003–2016 The Apache Software Foundation. All rights reserved.