no.uib.cipr.matrix
Class DenseMatrix

java.lang.Object
  extended by no.uib.cipr.matrix.AbstractMatrix
      extended by no.uib.cipr.matrix.DenseMatrix
All Implemented Interfaces:
java.lang.Iterable<MatrixEntry>, Matrix

public class DenseMatrix
extends AbstractMatrix

Dense matrix. It is a good all-round matrix structure, with fast access and efficient algebraic operations. The matrix

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

is stored column major in a single array, as follows:

a11 a21 a31 a41 a12 a22 a32 a42 a13 a23 a33 a43 a14 a24 a34 a44


Nested Class Summary
 
Nested classes/interfaces inherited from interface no.uib.cipr.matrix.Matrix
Matrix.Norm
 
Field Summary
 
Fields inherited from class no.uib.cipr.matrix.AbstractMatrix
numColumns, numRows
 
Constructor Summary
DenseMatrix(double[][] values)
          Constructor for DenseMatrix.
DenseMatrix(int numRows, int numColumns)
          Constructor for DenseMatrix
DenseMatrix(Matrix A)
          Constructor for DenseMatrix
DenseMatrix(Matrix A, boolean deep)
          Constructor for DenseMatrix
DenseMatrix(MatrixVectorReader r)
          Constructor for DenseMatrix
DenseMatrix(Vector x)
          Constructor for DenseMatrix.
DenseMatrix(Vector[] x)
          Constructor for DenseMatrix.
DenseMatrix(Vector x, boolean deep)
          Constructor for DenseMatrix.
 
Method Summary
 void add(int row, int column, double value)
          A(row,column) += value
 DenseMatrix copy()
          Creates a deep copy of the matrix
 double get(int row, int column)
          Returns A(row,column)
 double[] getData()
          Returns the matrix contents.
 Matrix multAdd(double alpha, Matrix B, Matrix C)
          C = alpha*A*B + C
 Vector multAdd(double alpha, Vector x, Vector y)
          y = alpha*A*x + y
 Matrix rank1(double alpha, Vector x, Vector y)
          A = alpha*x*yT + A.
 void set(int row, int column, double value)
          A(row,column) = value
 Matrix set(Matrix B)
          A=B.
 Matrix solve(Matrix B, Matrix X)
          X = A\B.
 Vector solve(Vector b, Vector x)
          x = A\b.
 Matrix transABmultAdd(double alpha, Matrix B, Matrix C)
          C = alpha*AT*BT + C
 Matrix transAmultAdd(double alpha, Matrix B, Matrix C)
          C = alpha*AT*B + C
 Matrix transBmultAdd(double alpha, Matrix B, Matrix C)
          C = alpha*A*BT + C
 Vector transMultAdd(double alpha, Vector x, Vector y)
          y = alpha*AT*x + y
 Matrix transSolve(Matrix B, Matrix X)
          X = AT\B.
 Vector transSolve(Vector b, Vector x)
          x = AT\b.
 Matrix zero()
          Zeros all the entries in the matrix, while preserving any underlying structure.
 
Methods inherited from class no.uib.cipr.matrix.AbstractMatrix
add, add, check, checkMultAdd, checkMultAdd, checkRank1, checkRank1, checkRank2, checkRank2, checkSize, checkSolve, checkSolve, checkTransABmultAdd, checkTransAmultAdd, checkTransBmultAdd, checkTransMultAdd, checkTranspose, checkTranspose, checkTransRank1, checkTransRank2, isSquare, iterator, max, max, mult, mult, mult, mult, multAdd, multAdd, norm, norm1, normF, normInf, numColumns, numRows, rank1, rank1, rank1, rank1, rank1, rank2, rank2, rank2, rank2, scale, set, toString, transABmult, transABmult, transABmultAdd, transAmult, transAmult, transAmultAdd, transBmult, transBmult, transBmultAdd, transMult, transMult, transMultAdd, transpose, transpose, transRank1, transRank1, transRank2, transRank2
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DenseMatrix

public DenseMatrix(MatrixVectorReader r)
            throws java.io.IOException
Constructor for DenseMatrix

Parameters:
r - Reader to get the matrix from
Throws:
java.io.IOException

DenseMatrix

public DenseMatrix(int numRows,
                   int numColumns)
Constructor for DenseMatrix

Parameters:
numRows - Number of rows
numColumns - Number of columns

DenseMatrix

public DenseMatrix(Matrix A)
Constructor for DenseMatrix

Parameters:
A - Matrix to copy. A deep copy is made

DenseMatrix

public DenseMatrix(Matrix A,
                   boolean deep)
Constructor for DenseMatrix

Parameters:
A - Matrix to copy contents from
deep - If true, A is copied, else a shallow copy is made and the matrices share underlying storage. For this, A must be a dense matrix

DenseMatrix

public DenseMatrix(Vector x,
                   boolean deep)
Constructor for DenseMatrix. Builds the matrix from a vector

Parameters:
x - Vector to copy from. This will form this matrix' single column
deep - If true, x is copied, if false, the internal storage of this matrix is the same as that of the vector. In that case, x must be a DenseVector

DenseMatrix

public DenseMatrix(Vector x)
Constructor for DenseMatrix. Builds the matrix from a vector

Parameters:
x - The vector which forms this matrix' single column. It is copied, not referenced

DenseMatrix

public DenseMatrix(Vector[] x)
Constructor for DenseMatrix. Builds the matrix from vectors. Each vector will correspond to a column of the matrix

Parameters:
x - Vectors which forms the columns of this matrix. Every vector must have the same size

DenseMatrix

public DenseMatrix(double[][] values)
Constructor for DenseMatrix. Copies from the passed array

Parameters:
values - Arrays to copy from. Every sub-array must have the same size
Method Detail

copy

public DenseMatrix copy()
Description copied from interface: Matrix
Creates a deep copy of the matrix

Specified by:
copy in interface Matrix
Overrides:
copy in class AbstractMatrix
Returns:
A

multAdd

public Matrix multAdd(double alpha,
                      Matrix B,
                      Matrix C)
Description copied from interface: Matrix
C = alpha*A*B + C

Specified by:
multAdd in interface Matrix
Overrides:
multAdd in class AbstractMatrix
B - Matrix such that B.numRows() == A.numColumns() and B.numColumns() == C.numColumns()
C - Matrix such that C.numRows() == A.numRows() and B.numColumns() == C.numColumns()
Returns:
C

transAmultAdd

public Matrix transAmultAdd(double alpha,
                            Matrix B,
                            Matrix C)
Description copied from interface: Matrix
C = alpha*AT*B + C

Specified by:
transAmultAdd in interface Matrix
Overrides:
transAmultAdd in class AbstractMatrix
B - Matrix such that B.numRows() == A.numRows() and B.numColumns() == C.numColumns()
C - Matrix such that C.numRows() == A.numColumns() and B.numColumns() == C.numColumns()
Returns:
C

transBmultAdd

public Matrix transBmultAdd(double alpha,
                            Matrix B,
                            Matrix C)
Description copied from interface: Matrix
C = alpha*A*BT + C

Specified by:
transBmultAdd in interface Matrix
Overrides:
transBmultAdd in class AbstractMatrix
B - Matrix such that B.numRows() == A.numRows() and B.numColumns() == C.numColumns()
C - Matrix such that C.numRows() == A.numColumns() and B.numColumns() == C.numColumns()
Returns:
C

transABmultAdd

public Matrix transABmultAdd(double alpha,
                             Matrix B,
                             Matrix C)
Description copied from interface: Matrix
C = alpha*AT*BT + C

Specified by:
transABmultAdd in interface Matrix
Overrides:
transABmultAdd in class AbstractMatrix
B - Matrix such that B.numColumns() == A.numRows() and B.numRows() == C.numColumns()
C - Matrix such that C.numRows() == A.numColumns() and B.numRows() == C.numColumns()
Returns:
C

rank1

public Matrix rank1(double alpha,
                    Vector x,
                    Vector y)
Description copied from interface: Matrix
A = alpha*x*yT + A. The matrix must be square, and the vectors of the same length

Specified by:
rank1 in interface Matrix
Overrides:
rank1 in class AbstractMatrix
Returns:
A

multAdd

public Vector multAdd(double alpha,
                      Vector x,
                      Vector y)
Description copied from interface: Matrix
y = alpha*A*x + y

Specified by:
multAdd in interface Matrix
Overrides:
multAdd in class AbstractMatrix
x - Vector of size A.numColumns()
y - Vector of size A.numRows()
Returns:
y

transMultAdd

public Vector transMultAdd(double alpha,
                           Vector x,
                           Vector y)
Description copied from interface: Matrix
y = alpha*AT*x + y

Specified by:
transMultAdd in interface Matrix
Overrides:
transMultAdd in class AbstractMatrix
x - Vector of size A.numRows()
y - Vector of size A.numColumns()
Returns:
y

solve

public Matrix solve(Matrix B,
                    Matrix X)
Description copied from interface: Matrix
X = A\B. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated solver

Specified by:
solve in interface Matrix
Overrides:
solve in class AbstractMatrix
Parameters:
B - Matrix with the same number of rows as A, and the same number of columns as X
X - Matrix with a number of rows equal A.numColumns(), and the same number of columns as B
Returns:
X

solve

public Vector solve(Vector b,
                    Vector x)
Description copied from interface: Matrix
x = A\b. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated solver

Specified by:
solve in interface Matrix
Overrides:
solve in class AbstractMatrix
Parameters:
b - Vector of size A.numRows()
x - Vector of size A.numColumns()
Returns:
x

transSolve

public Matrix transSolve(Matrix B,
                         Matrix X)
Description copied from interface: Matrix
X = AT\B. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated transpose solver

Specified by:
transSolve in interface Matrix
Overrides:
transSolve in class AbstractMatrix
Parameters:
B - Matrix with a number of rows equal A.numColumns(), and the same number of columns as X
X - Matrix with the same number of rows as A, and the same number of columns as B
Returns:
X

transSolve

public Vector transSolve(Vector b,
                         Vector x)
Description copied from interface: Matrix
x = AT\b. Not all matrices support this operation, those that do not throw UnsupportedOperationException. Note that it is often more efficient to use a matrix decomposition and its associated solver

Specified by:
transSolve in interface Matrix
Overrides:
transSolve in class AbstractMatrix
Parameters:
b - Vector of size A.numColumns()
x - Vector of size A.numRows()
Returns:
x

getData

public double[] getData()
Returns the matrix contents. Ordering depends on the underlying storage assumptions


add

public void add(int row,
                int column,
                double value)
Description copied from interface: Matrix
A(row,column) += value

Specified by:
add in interface Matrix
Overrides:
add in class AbstractMatrix

set

public void set(int row,
                int column,
                double value)
Description copied from interface: Matrix
A(row,column) = value

Specified by:
set in interface Matrix
Overrides:
set in class AbstractMatrix

get

public double get(int row,
                  int column)
Description copied from interface: Matrix
Returns A(row,column)

Specified by:
get in interface Matrix
Overrides:
get in class AbstractMatrix

set

public Matrix set(Matrix B)
Description copied from interface: Matrix
A=B. The matrices must be of the same size

Specified by:
set in interface Matrix
Overrides:
set in class AbstractMatrix
Returns:
A

zero

public Matrix zero()
Description copied from interface: Matrix
Zeros all the entries in the matrix, while preserving any underlying structure. Useful for general, unstructured matrices.

Specified by:
zero in interface Matrix
Overrides:
zero in class AbstractMatrix
Returns:
A