Jama

Class Matrix

Implemented Interfaces:
Cloneable, java.io.Serializable

public class Matrix
extends java.lang.Object
implements Cloneable, java.io.Serializable

Jama = Java Matrix class.

The Java Matrix Class provides the fundamental operations of numerical linear algebra. Various constructors create Matrices from two dimensional arrays of double precision floating point numbers. Various "gets" and "sets" provide access to submatrices and matrix elements. Several methods implement basic matrix arithmetic, including matrix addition and multiplication, matrix norms, and element-by-element array operations. Methods for reading and printing matrices are also included. All the operations in this version of the Matrix Class involve real matrices. Complex matrices may be handled in a future version.

Five fundamental matrix decompositions, which consist of pairs or triples of matrices, permutation vectors, and the like, produce results in five decomposition classes. These decompositions are accessed by the Matrix class to compute solutions of simultaneous linear equations, determinants, inverses and other matrix functions. The five decompositions are:

Example of use:

double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
Matrix A = new Matrix(vals);
Matrix b = Matrix.random(3,1);
Matrix x = A.solve(b);
Matrix r = A.times(x).minus(b);
double rnorm = r.normInf();
Version:
5 August 1998
Author:
The MathWorks, Inc. and the National Institute of Standards and Technology.
See Also:
Serialized Form

Constructor Summary

Matrix(double[][] A)
Construct a matrix from a 2-D array.
Matrix(double[][] A, int m, int n)
Construct a matrix quickly without checking arguments.
Matrix(int m, int n)
Construct an m-by-n matrix of zeros.
Matrix(int m, int n, double s)
Construct an m-by-n constant matrix.
Matrix(vals[] , int m)
Construct a matrix from a one-dimensional packed array

Method Summary

Matrix
arrayLeftDivide(Matrix B)
Element-by-element left division, C = A.\B
Matrix
arrayLeftDivideEquals(Matrix B)
Element-by-element left division in place, A = A.\B
Matrix
arrayRightDivide(Matrix B)
Element-by-element right division, C = A./B
Matrix
arrayRightDivideEquals(Matrix B)
Element-by-element right division in place, A = A./B
Matrix
arrayTimes(Matrix B)
Element-by-element multiplication, C = A.*B
Matrix
arrayTimesEquals(Matrix B)
Element-by-element multiplication in place, A = A.*B
CholeskyDecomposition
chol()
Cholesky Decomposition
Object
clone()
Clone the Matrix object.
double
cond()
Matrix condition (2 norm)
static Matrix
constructWithCopy(double[][] A)
Construct a matrix from a copy of a 2-D array.
Matrix
copy()
Make a deep copy of a matrix
double
det()
Matrix determinant
EigenvalueDecomposition
eig()
Eigenvalue Decomposition
double
get(int i, int j)
Get a single element.
double[][]
getArray()
Access the internal two-dimensional array.
double[][]
getArrayCopy()
Copy the internal two-dimensional array.
int
getColumnDimension()
Get column dimension.
double[]
getColumnPackedCopy()
Make a one-dimensional column packed copy of the internal array.
Matrix
getMatrix(int i0, int i1, int j0, int j1)
Get a submatrix.
Matrix
getMatrix(int i0, int i1, int[] c)
Get a submatrix.
Matrix
getMatrix(int[] r, int j0, int j1)
Get a submatrix.
Matrix
getMatrix(int[] r, int[] c)
Get a submatrix.
int
getRowDimension()
Get row dimension.
double[]
getRowPackedCopy()
Make a one-dimensional row packed copy of the internal array.
static Matrix
identity(int m, int n)
Generate identity matrix
Matrix
inverse()
Matrix inverse or pseudoinverse
LUDecomposition
lu()
LU Decomposition
Matrix
minus(Matrix B)
C = A - B
Matrix
minusEquals(Matrix B)
A = A - B
double
norm1()
One norm
double
norm2()
Two norm
double
normF()
Frobenius norm
double
normInf()
Infinity norm
Matrix
plus(Matrix B)
C = A + B
Matrix
plusEquals(Matrix B)
A = A + B
void
print(NumberFormat format, int width)
Print the matrix to stdout.
void
print(PrintWriter output, NumberFormat format, int width)
Print the matrix to the output stream.
void
print(PrintWriter output, int w, int d)
Print the matrix to the output stream.
void
print(int w, int d)
Print the matrix to stdout.
QRDecomposition
qr()
QR Decomposition
static Matrix
random(int m, int n)
Generate matrix with random elements
int
rank()
Matrix rank
static Matrix
read(BufferedReader input)
Read a matrix from a stream.
void
set(int i, int j, double s)
Set a single element.
void
setMatrix(int i0, int i1, int j0, int j1, Matrix X)
Set a submatrix.
void
setMatrix(int i0, int i1, int[] c, Matrix X)
Set a submatrix.
void
setMatrix(int[] r, int j0, int j1, Matrix X)
Set a submatrix.
void
setMatrix(int[] r, int[] c, Matrix X)
Set a submatrix.
Matrix
solve(Matrix B)
Solve A*X = B
Matrix
solveTranspose(Matrix B)
Solve X*A = B, which is also A'*X' = B'
SingularValueDecomposition
svd()
Singular Value Decomposition
Matrix
times(Matrix B)
Linear algebraic matrix multiplication, A * B
Matrix
times(double s)
Multiply a matrix by a scalar, C = s*A
Matrix
timesEquals(double s)
Multiply a matrix by a scalar in place, A = s*A
double
trace()
Matrix trace.
Matrix
transpose()
Matrix transpose.
Matrix
uminus()
Unary minus

Constructor Details

Matrix

public Matrix(double[][] A)
Construct a matrix from a 2-D array.
Parameters:
A - Two-dimensional array of doubles.

Matrix

public Matrix(double[][] A,
              int m,
              int n)
Construct a matrix quickly without checking arguments.
Parameters:
A - Two-dimensional array of doubles.
m - Number of rows.
n - Number of colums.

Matrix

public Matrix(int m,
              int n)
Construct an m-by-n matrix of zeros.
Parameters:
m - Number of rows.
n - Number of colums.

Matrix

public Matrix(int m,
              int n,
              double s)
Construct an m-by-n constant matrix.
Parameters:
m - Number of rows.
n - Number of colums.
s - Fill the matrix with this scalar value.

Matrix

public Matrix(vals[] ,
              int m)
Construct a matrix from a one-dimensional packed array
Parameters:
m - Number of rows.

Method Details

arrayLeftDivide

public Matrix arrayLeftDivide(Matrix B)
Element-by-element left division, C = A.\B
Parameters:
B - another matrix
Returns:
A.\B

arrayLeftDivideEquals

public Matrix arrayLeftDivideEquals(Matrix B)
Element-by-element left division in place, A = A.\B
Parameters:
B - another matrix
Returns:
A.\B

arrayRightDivide

public Matrix arrayRightDivide(Matrix B)
Element-by-element right division, C = A./B
Parameters:
B - another matrix
Returns:
A./B

arrayRightDivideEquals

public Matrix arrayRightDivideEquals(Matrix B)
Element-by-element right division in place, A = A./B
Parameters:
B - another matrix
Returns:
A./B

arrayTimes

public Matrix arrayTimes(Matrix B)
Element-by-element multiplication, C = A.*B
Parameters:
B - another matrix
Returns:
A.*B

arrayTimesEquals

public Matrix arrayTimesEquals(Matrix B)
Element-by-element multiplication in place, A = A.*B
Parameters:
B - another matrix
Returns:
A.*B

chol

public CholeskyDecomposition chol()
Cholesky Decomposition
Returns:
CholeskyDecomposition

clone

public Object clone()
Clone the Matrix object.

cond

public double cond()
Matrix condition (2 norm)
Returns:
ratio of largest to smallest singular value.

constructWithCopy

public static Matrix constructWithCopy(double[][] A)
Construct a matrix from a copy of a 2-D array.
Parameters:
A - Two-dimensional array of doubles.

copy

public Matrix copy()
Make a deep copy of a matrix

det

public double det()
Matrix determinant
Returns:
determinant

eig

public EigenvalueDecomposition eig()
Eigenvalue Decomposition
Returns:
EigenvalueDecomposition

get

public double get(int i,
                  int j)
Get a single element.
Parameters:
i - Row index.
j - Column index.
Returns:
A(i,j)

getArray

public double[][] getArray()
Access the internal two-dimensional array.
Returns:
Pointer to the two-dimensional array of matrix elements.

getArrayCopy

public double[][] getArrayCopy()
Copy the internal two-dimensional array.
Returns:
Two-dimensional array copy of matrix elements.

getColumnDimension

public int getColumnDimension()
Get column dimension.
Returns:
n, the number of columns.

getColumnPackedCopy

public double[] getColumnPackedCopy()
Make a one-dimensional column packed copy of the internal array.
Returns:
Matrix elements packed in a one-dimensional array by columns.

getMatrix

public Matrix getMatrix(int i0,
                        int i1,
                        int j0,
                        int j1)
Get a submatrix.
Parameters:
i0 - Initial row index
i1 - Final row index
j0 - Initial column index
j1 - Final column index
Returns:
A(i0:i1,j0:j1)

getMatrix

public Matrix getMatrix(int i0,
                        int i1,
                        int[] c)
Get a submatrix.
Parameters:
i0 - Initial row index
i1 - Final row index
c - Array of column indices.
Returns:
A(i0:i1,c(:))

getMatrix

public Matrix getMatrix(int[] r,
                        int j0,
                        int j1)
Get a submatrix.
Parameters:
r - Array of row indices.
Returns:
A(r(:),j0:j1)

getMatrix

public Matrix getMatrix(int[] r,
                        int[] c)
Get a submatrix.
Parameters:
r - Array of row indices.
c - Array of column indices.
Returns:
A(r(:),c(:))

getRowDimension

public int getRowDimension()
Get row dimension.
Returns:
m, the number of rows.

getRowPackedCopy

public double[] getRowPackedCopy()
Make a one-dimensional row packed copy of the internal array.
Returns:
Matrix elements packed in a one-dimensional array by rows.

identity

public static Matrix identity(int m,
                              int n)
Generate identity matrix
Parameters:
m - Number of rows.
n - Number of colums.
Returns:
An m-by-n matrix with ones on the diagonal and zeros elsewhere.

inverse

public Matrix inverse()
Matrix inverse or pseudoinverse
Returns:
inverse(A) if A is square, pseudoinverse otherwise.

lu

public LUDecomposition lu()
LU Decomposition
Returns:
LUDecomposition

minus

public Matrix minus(Matrix B)
C = A - B
Parameters:
B - another matrix
Returns:
A - B

minusEquals

public Matrix minusEquals(Matrix B)
A = A - B
Parameters:
B - another matrix
Returns:
A - B

norm1

public double norm1()
One norm
Returns:
maximum column sum.

norm2

public double norm2()
Two norm
Returns:
maximum singular value.

normF

public double normF()
Frobenius norm
Returns:
sqrt of sum of squares of all elements.

normInf

public double normInf()
Infinity norm
Returns:
maximum row sum.

plus

public Matrix plus(Matrix B)
C = A + B
Parameters:
B - another matrix
Returns:
A + B

plusEquals

public Matrix plusEquals(Matrix B)
A = A + B
Parameters:
B - another matrix
Returns:
A + B

print

public void print(NumberFormat format,
                  int width)
Print the matrix to stdout. Line the elements up in columns. Use the format object, and right justify within columns of width characters. Note that is the matrix is to be read back in, you probably will want to use a NumberFormat that is set to US Locale.
Parameters:
format - A Formatting object for individual elements.
width - Field width for each column.
See Also:
java.text.DecimalFormat.setDecimalFormatSymbols

print

public void print(PrintWriter output,
                  NumberFormat format,
                  int width)
Print the matrix to the output stream. Line the elements up in columns. Use the format object, and right justify within columns of width characters. Note that is the matrix is to be read back in, you probably will want to use a NumberFormat that is set to US Locale.
Parameters:
output - the output stream.
format - A formatting object to format the matrix elements
width - Column width.
See Also:
java.text.DecimalFormat.setDecimalFormatSymbols

print

public void print(PrintWriter output,
                  int w,
                  int d)
Print the matrix to the output stream. Line the elements up in columns with a Fortran-like 'Fw.d' style format.
Parameters:
output - Output stream.
w - Column width.
d - Number of digits after the decimal.

print

public void print(int w,
                  int d)
Print the matrix to stdout. Line the elements up in columns with a Fortran-like 'Fw.d' style format.
Parameters:
w - Column width.
d - Number of digits after the decimal.

qr

public QRDecomposition qr()
QR Decomposition
Returns:
QRDecomposition

random

public static Matrix random(int m,
                            int n)
Generate matrix with random elements
Parameters:
m - Number of rows.
n - Number of colums.
Returns:
An m-by-n matrix with uniformly distributed random elements.

rank

public int rank()
Matrix rank
Returns:
effective numerical rank, obtained from SVD.

read

public static Matrix read(BufferedReader input)
            throws java.io.IOException
Read a matrix from a stream. The format is the same the print method, so printed matrices can be read back in (provided they were printed using US Locale). Elements are separated by whitespace, all the elements for each row appear on a single line, the last row is followed by a blank line.
Parameters:
input - the input stream.

set

public void set(int i,
                int j,
                double s)
Set a single element.
Parameters:
i - Row index.
j - Column index.
s - A(i,j).

setMatrix

public void setMatrix(int i0,
                      int i1,
                      int j0,
                      int j1,
                      Matrix X)
Set a submatrix.
Parameters:
i0 - Initial row index
i1 - Final row index
j0 - Initial column index
j1 - Final column index
X - A(i0:i1,j0:j1)

setMatrix

public void setMatrix(int i0,
                      int i1,
                      int[] c,
                      Matrix X)
Set a submatrix.
Parameters:
i0 - Initial row index
i1 - Final row index
c - Array of column indices.
X - A(i0:i1,c(:))

setMatrix

public void setMatrix(int[] r,
                      int j0,
                      int j1,
                      Matrix X)
Set a submatrix.
Parameters:
r - Array of row indices.
j0 - Initial column index
j1 - Final column index
X - A(r(:),j0:j1)

setMatrix

public void setMatrix(int[] r,
                      int[] c,
                      Matrix X)
Set a submatrix.
Parameters:
r - Array of row indices.
c - Array of column indices.
X - A(r(:),c(:))

solve

public Matrix solve(Matrix B)
Solve A*X = B
Parameters:
B - right hand side
Returns:
solution if A is square, least squares solution otherwise

solveTranspose

public Matrix solveTranspose(Matrix B)
Solve X*A = B, which is also A'*X' = B'
Parameters:
B - right hand side
Returns:
solution if A is square, least squares solution otherwise.

svd

public SingularValueDecomposition svd()
Singular Value Decomposition
Returns:
SingularValueDecomposition

times

public Matrix times(Matrix B)
Linear algebraic matrix multiplication, A * B
Parameters:
B - another matrix
Returns:
Matrix product, A * B

times

public Matrix times(double s)
Multiply a matrix by a scalar, C = s*A
Parameters:
s - scalar
Returns:
s*A

timesEquals

public Matrix timesEquals(double s)
Multiply a matrix by a scalar in place, A = s*A
Parameters:
s - scalar
Returns:
replace A by s*A

trace

public double trace()
Matrix trace.
Returns:
sum of the diagonal elements.

transpose

public Matrix transpose()
Matrix transpose.
Returns:
A'

uminus

public Matrix uminus()
Unary minus
Returns:
-A