public class DoubleMatrixMath
extends java.lang.Object
Some algorithms are from:
[1] Embree, Paul M. and Bruce Kimble. "C Language Algorithms for Digital Signal Processing," Prentice Hall, Englewood Cliffs, NJ, 1991.
Modifier and Type | Method and Description |
---|---|
protected static void |
_checkSameDimension(java.lang.String caller,
double[][] matrix1,
double[][] matrix2)
Check that the two matrix arguments are of the same dimension.
|
protected static int |
_checkSquare(java.lang.String caller,
double[][] matrix)
Check that the argument matrix is a square matrix.
|
protected static int |
_columns(double[][] matrix)
Return the number of columns of a matrix.
|
protected static java.lang.String |
_dimensionString(double[][] matrix)
Return a string that describes the number of rows and columns.
|
protected static java.lang.Object[] |
_orthogonalizeRows(double[][] rowArrays)
Given a set of row vectors rowArrays[0] ... rowArrays[n-1], compute :
A new set of row vectors out[0] ... out[n-1] which are the
orthogonalized versions of each input row vector.
|
protected static int |
_rows(double[][] matrix)
Return the number of rows of a matrix.
|
static double[][] |
add(double[][] matrix,
double z)
Return a new matrix that is constructed from the argument by
adding the second argument to every element.
|
static double[][] |
add(double[][] matrix1,
double[][] matrix2)
Return a new matrix that is constructed from the argument by
adding the second matrix to the first one.
|
static double[][] |
allocCopy(double[][] matrix)
Return a new matrix that is a copy of the matrix argument.
|
static double[][] |
applyBinaryOperation(DoubleBinaryOperation op,
double[][] matrix,
double z)
Return a new array that is formed by applying an instance of a
DoubleBinaryOperation to each element in the input matrix,
using the matrix elements as the left operands and z as the right
operand in all cases (op.operate(matrix[i][j], z)).
|
static double[][] |
applyBinaryOperation(DoubleBinaryOperation op,
double[][] matrix1,
double[][] matrix2)
Return a new array that is formed by applying an instance of a
DoubleBinaryOperation to the two matrices, element by element,
using the elements of the first matrix as the left operands
and the elements of the second matrix as the right operands.
|
static double[][] |
applyBinaryOperation(DoubleBinaryOperation op,
double z,
double[][] matrix)
Return a new array that is formed by applying an instance of a
DoubleBinaryOperation to each element in the input matrix,
using z as the left operand in all cases and the matrix elements
as the right operands (op.operate(z, matrix[i][j])).
|
static double[][] |
applyUnaryOperation(DoubleUnaryOperation op,
double[][] matrix)
Return a new array that is formed by applying an instance of a
DoubleUnaryOperation to each element in the input matrix
(op.operate(matrix[i][j])).
|
static double[][] |
crop(double[][] matrix,
int rowStart,
int colStart,
int rowSpan,
int colSpan)
Return a new matrix that is a sub-matrix of the input
matrix argument.
|
static double |
determinant(double[][] matrix)
Return the determinant of a square matrix.
|
static double[][] |
diag(double[] array)
Return a new matrix that is constructed by placing the
elements of the input array on the diagonal of the square
matrix, starting from the top left corner down to the bottom
right corner.
|
static double[][] |
divide(double[][] matrix,
double z)
Return a new matrix that is constructed from the argument by
dividing the second argument to every element.
|
static double[][] |
divideElements(double[][] matrix1,
double[][] matrix2)
Return a new matrix that is constructed by element by element
division of the two matrix arguments.
|
static double[] |
fromMatrixToArray(double[][] matrix)
Return a new array that is filled with the contents of the matrix.
|
static double[] |
fromMatrixToArray(double[][] matrix,
int maxRow,
int maxCol)
Return a new array that is filled with the contents of the matrix.
|
static double[][] |
hilbert(int dim)
Return a new matrix, which is defined by Aij = 1/(i+j+1),
the Hilbert matrix.
|
static double[][] |
identity(int dim)
Return an new identity matrix with the specified dimension.
|
static double[][] |
identityMatrixDouble(int dim)
Return an new identity matrix with the specified dimension.
|
static double[][] |
inverse(double[][] A)
Return a new matrix that is constructed by inverting the input
matrix.
|
static void |
matrixCopy(double[][] sourceMatrix,
double[][] destinationMatrix)
Replace the destinationMatrix argument elements with the values of
the sourceMatrix argument.
|
static void |
matrixCopy(double[][] sourceMatrix,
int sourceRowStart,
int sourceColStart,
double[][] destinationMatrix,
int destinationRowStart,
int destinationColumnStart,
int rowSpan,
int columnSpan)
Replace the destinationMatrix argument's values, in the specified row
and column range, with the sourceMatrix argument's values, starting
from specified row and column of the second matrix.
|
static double[][] |
modulo(double[][] matrix,
double z)
Return a new matrix that is constructed from the argument after
performing modulo operation by the second argument to every element.
|
static double[][] |
multiply(double[][] matrix,
double scaleFactor)
Return a new matrix that is constructed by multiplying the matrix
by a scaleFactor.
|
static double[] |
multiply(double[][] matrix,
double[] array)
Return a new array that is constructed from the argument by
pre-multiplying the array (treated as a row vector) by a matrix.
|
static double[][] |
multiply(double[][] matrix1,
double[][] matrix2)
Return a new matrix that is constructed from the argument by
multiplying the first matrix by the second one.
|
static double[] |
multiply(double[] array,
double[][] matrix)
Return a new array that is constructed from the argument by
post-multiplying the matrix by an array (treated as a row vector).
|
static double[][] |
multiplyElements(double[][] matrix1,
double[][] matrix2)
Return a new matrix that is constructed by element by element
multiplication of the two matrix arguments.
|
static double[][] |
negative(double[][] matrix)
Return a new matrix that is the additive inverse of the
argument matrix.
|
static double[][] |
orthogonalizeColumns(double[][] matrix)
Return a new matrix that is formed by orthogonalizing the
columns of the input matrix (the column vectors are
orthogonal).
|
static double[][] |
orthogonalizeRows(double[][] matrix)
Return a new matrix that is formed by orthogonalizing the rows of the
input matrix (the row vectors are orthogonal).
|
static double[][] |
orthonormalizeColumns(double[][] matrix)
Return a new matrix that is formed by orthonormalizing the
columns of the input matrix (the column vectors are orthogonal
and have norm 1).
|
static double[][] |
orthonormalizeRows(double[][] matrix)
Return a new matrix that is formed by orthonormalizing the
rows of the input matrix (the row vectors are orthogonal and
have norm 1).
|
static double[][][] |
qr(double[][] matrix)
Return a pair of matrices that are the decomposition of the
input matrix (which must have linearly independent column
vectors), which is m x n, into the matrix product of Q, which
is m x n with orthonormal column vectors, and R, which is an
invertible n x n upper triangular matrix.
|
static double[][] |
subtract(double[][] matrix1,
double[][] matrix2)
Return a new matrix that is constructed from the argument by
subtracting the second matrix from the first one.
|
static double |
sum(double[][] matrix)
Return the sum of the elements of a matrix.
|
static Complex[][] |
toComplexMatrix(double[][] matrix)
Return a new matrix that is formed by converting the doubles
in the argument matrix to complex numbers.
|
static float[][] |
toFloatMatrix(double[][] matrix)
Return a new matrix that is formed by converting the doubles in
the argument matrix to floats.
|
static int[][] |
toIntegerMatrix(double[][] matrix)
Return a new matrix that is formed by converting the doubles in
the argument matrix to integers.
|
static long[][] |
toLongMatrix(double[][] matrix)
Return a new matrix that is formed by converting the doubles in
the argument matrix to longs.
|
static double[][] |
toMatrixFromArray(double[] array,
int rows,
int cols)
Return a new matrix of doubles that is initialized from a 1-D array.
|
static java.lang.String |
toString(double[][] matrix)
Return a new String representing the matrix, formatted as
in Java array initializers.
|
static java.lang.String |
toString(double[][] matrix,
java.lang.String elementDelimiter,
java.lang.String matrixBegin,
java.lang.String matrixEnd,
java.lang.String vectorBegin,
java.lang.String vectorDelimiter,
java.lang.String vectorEnd)
Return a new String representing the matrix, formatted as
specified by the ArrayStringFormat argument.
|
static double |
trace(double[][] matrix)
Return the trace of a square matrix, which is the sum of the
diagonal entries A11 + A22 + ... + Ann
Throw an IllegalArgumentException if the matrix is not square.
|
static double[][] |
transpose(double[][] matrix)
Return a new matrix that is constructed by transposing the input
matrix.
|
static boolean |
within(double[][] matrix1,
double[][] matrix2,
double distance)
Return true if the elements of the two matrices differ by no more
than the specified distance.
|
static boolean |
within(double[][] matrix1,
double[][] matrix2,
double[][] errorMatrix)
Return true if the elements of the two matrices differ by no more
than the specified distances.
|
public static final double[][] add(double[][] matrix, double z)
matrix
- A matrix of doubles.z
- The double number to add.public static final double[][] add(double[][] matrix1, double[][] matrix2)
matrix1
- The first matrix of doubles.matrix2
- The second matrix of doubles.public static final double[][] allocCopy(double[][] matrix)
matrix
- A matrix of doubles.public static final double[][] applyBinaryOperation(DoubleBinaryOperation op, double z, double[][] matrix)
public static final double[][] applyBinaryOperation(DoubleBinaryOperation op, double[][] matrix, double z)
public static final double[][] applyBinaryOperation(DoubleBinaryOperation op, double[][] matrix1, double[][] matrix2)
public static final double[][] applyUnaryOperation(DoubleUnaryOperation op, double[][] matrix)
public static final double[][] crop(double[][] matrix, int rowStart, int colStart, int rowSpan, int colSpan)
matrix
- A matrix of doubles.rowStart
- An int specifying which row to start on.colStart
- An int specifying which column to start on.rowSpan
- An int specifying how many rows to copy.colSpan
- An int specifying how many columns to copy.public static final double determinant(double[][] matrix)
public static final double[][] diag(double[] array)
public static final double[][] divide(double[][] matrix, double z)
matrix
- A matrix of doubles.z
- The double number to divide.public static final double[][] divideElements(double[][] matrix1, double[][] matrix2)
public static final double[] fromMatrixToArray(double[][] matrix)
matrix
- A matrix of doubles.public static final double[] fromMatrixToArray(double[][] matrix, int maxRow, int maxCol)
matrix
- A matrix of doubles.public static final double[][] hilbert(int dim)
public static final double[][] identity(int dim)
public static final double[][] identityMatrixDouble(int dim)
public static final double[][] inverse(double[][] A)
java.lang.IllegalArgumentException
- If the matrix is singular.public static final void matrixCopy(double[][] sourceMatrix, double[][] destinationMatrix)
destinationMatrix
- A matrix of doubles, used as the destination.sourceMatrix
- A matrix of doubles, used as the source.public static final void matrixCopy(double[][] sourceMatrix, int sourceRowStart, int sourceColStart, double[][] destinationMatrix, int destinationRowStart, int destinationColumnStart, int rowSpan, int columnSpan)
sourceMatrix
- A matrix of doubles, used as the destination.sourceRowStart
- An int specifying the starting row of the source.sourceColStart
- An int specifying the starting column of the
source.destinationMatrix
- A matrix of doubles, used as the destination.destinationRowStart
- An int specifying the starting row of the
destination.destinationColumnStart
- An int specifying the starting column
of the destination.rowSpan
- An int specifying how many rows to copy.columnSpan
- An int specifying how many columns to copy.public static final double[][] modulo(double[][] matrix, double z)
matrix
- A matrix of doubles.z
- The double number to divide.public static final double[][] multiply(double[][] matrix, double scaleFactor)
public static final double[] multiply(double[][] matrix, double[] array)
public static final double[] multiply(double[] array, double[][] matrix)
public static final double[][] multiply(double[][] matrix1, double[][] matrix2)
Note that this method is different from the other multiply() methods in that this method does not do pointwise multiplication.
matrix1
- The first matrix of doubles.matrix2
- The second matrix of doubles.multiplyElements(double[][], double[][])
public static final double[][] multiplyElements(double[][] matrix1, double[][] matrix2)
Note that this method does pointwise matrix multiplication.
See multiply(double[][], double[][])
for standard
matrix multiplication.
public static final double[][] negative(double[][] matrix)
public static final double[][] orthogonalizeColumns(double[][] matrix)
public static final double[][] orthogonalizeRows(double[][] matrix)
public static final double[][] orthonormalizeColumns(double[][] matrix)
public static final double[][] orthonormalizeRows(double[][] matrix)
public static final double[][][] qr(double[][] matrix)
matrix
- The input matrix of doubles.java.lang.IllegalArgumentException
- if the columns vectors of the input
matrix are not linearly independent.public static final double[][] subtract(double[][] matrix1, double[][] matrix2)
public static final double sum(double[][] matrix)
public static final Complex[][] toComplexMatrix(double[][] matrix)
matrix
- An matrix of double.public static final float[][] toFloatMatrix(double[][] matrix)
matrix
- An matrix of double.public static final int[][] toIntegerMatrix(double[][] matrix)
matrix
- An matrix of double.public static final long[][] toLongMatrix(double[][] matrix)
matrix
- An matrix of double.public static final double[][] toMatrixFromArray(double[] array, int rows, int cols)
array
- An array of doubles.rows
- An integer representing the number of rows of the
new matrix.cols
- An integer representing the number of columns of the
new matrix.public static final java.lang.String toString(double[][] matrix)
public static final java.lang.String toString(double[][] matrix, java.lang.String elementDelimiter, java.lang.String matrixBegin, java.lang.String matrixEnd, java.lang.String vectorBegin, java.lang.String vectorDelimiter, java.lang.String vectorEnd)
public static final double trace(double[][] matrix)
public static final double[][] transpose(double[][] matrix)
public static final boolean within(double[][] matrix1, double[][] matrix2, double distance)
matrix1
- The first matrix.matrix2
- The second matrix.distance
- The distance to use for comparison.java.lang.IllegalArgumentException
- If the matrices do not have the same dimension.
This is a run-time exception, so it need not be declared explicitly.public static final boolean within(double[][] matrix1, double[][] matrix2, double[][] errorMatrix)
matrix1
- The first matrix.matrix2
- The second matrix.errorMatrix
- The distance to use for comparison.
Note that if errorMatrix contains an element that is negative,
then this method will return false.java.lang.IllegalArgumentException
- If the matrices do not have the same dimension.
This is a run-time exception, so it need not be declared explicitly.protected static final void _checkSameDimension(java.lang.String caller, double[][] matrix1, double[][] matrix2) throws java.lang.IllegalArgumentException
caller
- A string representing the caller method name.matrix1
- A matrix of doubles.matrix2
- A matrix of doubles.java.lang.IllegalArgumentException
- If the arguments do not
have the same dimension. This is a run-time exception, so it
need not be declared explicitly.protected static final int _checkSquare(java.lang.String caller, double[][] matrix) throws java.lang.IllegalArgumentException
caller
- A string representing the caller method name.matrix
- A matrix of doubles.java.lang.IllegalArgumentException
- If the argument is not square.
This is a run-time exception, so it need not be declared explicitly.protected static final int _columns(double[][] matrix)
matrix
- The matrix.protected static final java.lang.String _dimensionString(double[][] matrix)
matrix
- The matrix that is to be described.protected static final java.lang.Object[] _orthogonalizeRows(double[][] rowArrays)
protected static final int _rows(double[][] matrix)
matrix
- The matrix.