maspack.matrix
Class Matrix4dBase

java.lang.Object
  extended by maspack.matrix.MatrixBase
      extended by maspack.matrix.DenseMatrixBase
          extended by maspack.matrix.Matrix4dBase
All Implemented Interfaces:
java.lang.Cloneable, DenseMatrix, LinearTransformNd, Matrix, Clonable
Direct Known Subclasses:
Matrix4d

public abstract class Matrix4dBase
extends DenseMatrixBase
implements Clonable

Base class for 4 x 4 matrices in which the elements are stored as explicit fields. A primary motivation for such objects is computational speed.


Nested Class Summary
 
Nested classes/interfaces inherited from interface maspack.matrix.Matrix
Matrix.Partition, Matrix.WriteFormat
 
Field Summary
 double m00
          Matrix element (0,0)
 double m01
          Matrix element (0,1)
 double m02
          Matrix element (0,2)
 double m03
          Matrix element (0,3)
 double m10
          Matrix element (1,0)
 double m11
          Matrix element (1,1)
 double m12
          Matrix element (1,2)
 double m13
          Matrix element (1,3)
 double m20
          Matrix element (2,0)
 double m21
          Matrix element (2,1)
 double m22
          Matrix element (2,2)
 double m23
          Matrix element (2,3)
 double m30
          Matrix element (3,0)
 double m31
          Matrix element (3,1)
 double m32
          Matrix element (3,2)
 double m33
          Matrix element (3,3)
 
Fields inherited from interface maspack.matrix.Matrix
INDEFINITE, POSITIVE_DEFINITE, SPD, SYMMETRIC
 
Constructor Summary
Matrix4dBase()
           
 
Method Summary
 java.lang.Object clone()
           
 int colSize()
          Returns the number of columns in this matrix (which is always 4).
 double determinant()
          Returns the determinant of this matrix
 boolean epsilonEquals(Matrix4dBase M1, double epsilon)
          Returns true if the elements of this matrix equal those of matrix M1within a prescribed tolerance epsilon.
 boolean equals(Matrix4dBase M1)
          Returns true if the elements of this matrix exactly equal those of matrix M1.
 double frobeniusNorm()
          Returns the Frobenius norm of this matrix.
 void get(double[] values)
          Copies the elements of this matrix into an array of doubles.
 double get(int i, int j)
          Gets a single element of this matrix.
 void getColumn(int j, double[] values)
          Copies a column of this matrix into an array of doubles.
 void getColumn(int j, double[] values, int off)
          Copies a column of this matrix into an array of doubles, starting at a specified offset.
 void getColumn(int j, Vector4d col)
          Copies a column of this matrix into a 4-vector.
 void getRow(int i, double[] values)
          Copies a row of this matrix into an array of doubles.
 void getRow(int i, double[] values, int off)
          Copies a row of this matrix into an array of doubles, starting at a specified offset.
 void getRow(int i, Vector4d row)
          Copies a row of this matrix into a 4-vector.
 double infinityNorm()
          Returns the infinity norm of this matrix.
 boolean invert()
          Inverts this matrix in place, returning false if the matrix is detected to be singular.
 void mul(Vector4d vr)
          Multiplies this matrix by the column vector vr and places the result back into vr.
 void mul(Vector4d vr, Vector4d v1)
          Multiplies this matrix by the column vector v1 and places the result in the vector vr.
 void mul(VectorNd vr, VectorNd v1)
          Multiplies this matrix by the column vector v1 and places the result in the vector vr.
 boolean mulInverse(Vector4d vr)
          Multiplies the column vector vr by the inverse of this matrix and places the result back in vr.
 boolean mulInverse(Vector4d vr, Vector4d v1)
          Multiplies the column vector v1 by the inverse of this matrix and places the result in vr.
 boolean mulInverseTranspose(Vector4d vr)
          Multiplies the column vector vr by the inverse transpose of this matrix and places the result back in vr.
 boolean mulInverseTranspose(Vector4d vr, Vector4d v1)
          Multiplies the column vector v1 by the inverse transpose of this matrix and places the result in vr.
 void mulTranspose(Vector4d vr)
          Multiplies the transpose of this matrix by the vector vr and places the result back in vr.
 void mulTranspose(Vector4d vr, Vector4d v1)
          Multiplies the transpose of this matrix by the vector v1 and places the result in vr.
 void negate()
          Negates this matrix in place.
 double oneNorm()
          Returns the 1 norm of this matrix.
 int rowSize()
          Returns the number of rows in this matrix (which is always 4).
 void set(double[] vals)
          Sets the elements of this matrix from an array of doubles.
 void set(int i, int j, double value)
          Sets a single element of this matrix.
 void set(Matrix4dBase M)
          Sets the values of this matrix to those of matrix M.
 void setColumn(int j, double[] values)
          Sets a column of this matrix from an array of doubles.
 void setColumn(int j, Vector4d col)
          Sets a column of this matrix to the specified 4-vector.
 void setIdentity()
          Sets this matrix to the identity.
 void setRow(int i, double[] values)
          Set a row of this matrix from an array of doubles.
 void setRow(int i, Vector4d row)
          Sets a row of this matrix to the specified 4-vector.
 void transpose()
          Transposes this matrix in place.
 
Methods inherited from class maspack.matrix.DenseMatrixBase
add, checkConsistency, set, set, set, set, setCCSValues, setColumn, setCRSValues, setRow, setSubMatrix
 
Methods inherited from class maspack.matrix.MatrixBase
containsNaN, epsilonEquals, equals, get, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getDefaultFormat, getRow, getSize, getSubMatrix, hasNaN, idString, isFixedSize, isSymmetric, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, scan, setCRSValues, setDefaultFormat, setSize, toString, toString, toString, trace, write, write, write, write, write, writeToFile
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface maspack.matrix.Matrix
epsilonEquals, equals, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getRow, getSize, getSubMatrix, isFixedSize, isSymmetric, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, scan, setSize, toString, trace, write, write, write
 

Field Detail

m00

public double m00
Matrix element (0,0)


m01

public double m01
Matrix element (0,1)


m02

public double m02
Matrix element (0,2)


m03

public double m03
Matrix element (0,3)


m10

public double m10
Matrix element (1,0)


m11

public double m11
Matrix element (1,1)


m12

public double m12
Matrix element (1,2)


m13

public double m13
Matrix element (1,3)


m20

public double m20
Matrix element (2,0)


m21

public double m21
Matrix element (2,1)


m22

public double m22
Matrix element (2,2)


m23

public double m23
Matrix element (2,3)


m30

public double m30
Matrix element (3,0)


m31

public double m31
Matrix element (3,1)


m32

public double m32
Matrix element (3,2)


m33

public double m33
Matrix element (3,3)

Constructor Detail

Matrix4dBase

public Matrix4dBase()
Method Detail

rowSize

public final int rowSize()
Returns the number of rows in this matrix (which is always 4).

Specified by:
rowSize in interface LinearTransformNd
Specified by:
rowSize in interface Matrix
Specified by:
rowSize in class MatrixBase
Returns:
4

colSize

public final int colSize()
Returns the number of columns in this matrix (which is always 4).

Specified by:
colSize in interface LinearTransformNd
Specified by:
colSize in interface Matrix
Specified by:
colSize in class MatrixBase
Returns:
4

get

public double get(int i,
                  int j)
Gets a single element of this matrix.

Specified by:
get in interface Matrix
Specified by:
get in class MatrixBase
Parameters:
i - element row index
j - element column index
Returns:
element value

get

public void get(double[] values)
Copies the elements of this matrix into an array of doubles. The elements are stored using row-major order, so that element (i,j) is stored at location i*colSize()+j.

Specified by:
get in interface Matrix
Overrides:
get in class MatrixBase
Parameters:
values - array into which values are copied

getColumn

public void getColumn(int j,
                      double[] values)
Copies a column of this matrix into an array of doubles.

Specified by:
getColumn in interface Matrix
Overrides:
getColumn in class MatrixBase
Parameters:
j - column index
values - array into which the column is copied

getColumn

public void getColumn(int j,
                      double[] values,
                      int off)
Copies a column of this matrix into an array of doubles, starting at a specified offset.

Specified by:
getColumn in interface Matrix
Overrides:
getColumn in class MatrixBase
Parameters:
j - column index
values - array into which the column is copied
off - offset in values where copying should begin

getColumn

public void getColumn(int j,
                      Vector4d col)
Copies a column of this matrix into a 4-vector.

Parameters:
j - column index
col - 4-vector into which the column is copied

getRow

public void getRow(int i,
                   double[] values)
Copies a row of this matrix into an array of doubles.

Specified by:
getRow in interface Matrix
Overrides:
getRow in class MatrixBase
Parameters:
i - row index
values - array into which the row is copied

getRow

public void getRow(int i,
                   double[] values,
                   int off)
Copies a row of this matrix into an array of doubles, starting at a specified offset.

Specified by:
getRow in interface Matrix
Overrides:
getRow in class MatrixBase
Parameters:
i - row index
values - array into which the row is copied
off - offset in values where copying should begin

getRow

public void getRow(int i,
                   Vector4d row)
Copies a row of this matrix into a 4-vector.

Parameters:
i - row index
row - 4-vector into which the row is copied

set

public final void set(int i,
                      int j,
                      double value)
Sets a single element of this matrix.

Specified by:
set in interface DenseMatrix
Specified by:
set in class DenseMatrixBase
Parameters:
i - element row index
j - element column index
value - element value

set

public void set(double[] vals)
Sets the elements of this matrix from an array of doubles. The elements in the array should be stored using row-major order, so that element (i,j) is stored at location i*colSize()+j.

Specified by:
set in interface DenseMatrix
Overrides:
set in class DenseMatrixBase
Parameters:
vals - array from which values are copied

setColumn

public void setColumn(int j,
                      double[] values)
Sets a column of this matrix from an array of doubles.

Specified by:
setColumn in interface DenseMatrix
Overrides:
setColumn in class DenseMatrixBase
Parameters:
j - column index
values - array from which column values are copied

setColumn

public void setColumn(int j,
                      Vector4d col)
Sets a column of this matrix to the specified 4-vector.

Parameters:
j - column index
col - 4-vector from which the column is copied

setRow

public void setRow(int i,
                   double[] values)
Set a row of this matrix from an array of doubles.

Specified by:
setRow in interface DenseMatrix
Overrides:
setRow in class DenseMatrixBase
Parameters:
i - row index
values - array from which the row is copied

setRow

public void setRow(int i,
                   Vector4d row)
Sets a row of this matrix to the specified 4-vector.

Parameters:
i - row index
row - 4-vector from which the row is copied

set

public void set(Matrix4dBase M)
Sets the values of this matrix to those of matrix M.

Parameters:
M - matrix whose values are to be copied

mul

public void mul(Vector4d vr,
                Vector4d v1)
Multiplies this matrix by the column vector v1 and places the result in the vector vr. If M represents this matrix, this is equivalent to computing
  vr = M v1
 

Parameters:
vr - result vector
v1 - vector to multiply by

mul

public void mul(VectorNd vr,
                VectorNd v1)
Multiplies this matrix by the column vector v1 and places the result in the vector vr. If M represents this matrix, this is equivalent to computing
  vr = M v1
 

Specified by:
mul in interface LinearTransformNd
Specified by:
mul in interface Matrix
Overrides:
mul in class MatrixBase
Parameters:
vr - result vector
v1 - vector to multiply by

mul

public void mul(Vector4d vr)
Multiplies this matrix by the column vector vr and places the result back into vr. If M represents this matrix, this is equivalent to computing
  vr = M vr
 

Parameters:
vr - vector to multiply (in place)

mulTranspose

public void mulTranspose(Vector4d vr,
                         Vector4d v1)
Multiplies the transpose of this matrix by the vector v1 and places the result in vr. If M represents this matrix, this is equivalent to computing
  vr = v1 M
 

Parameters:
vr - result vector
v1 - vector to multiply by

mulTranspose

public void mulTranspose(Vector4d vr)
Multiplies the transpose of this matrix by the vector vr and places the result back in vr. If M represents this matrix, this is equivalent to computing
  vr = vr M
 

Parameters:
vr - vector to multiply by (in place)

mulInverse

public boolean mulInverse(Vector4d vr,
                          Vector4d v1)
Multiplies the column vector v1 by the inverse of this matrix and places the result in vr.

Parameters:
vr - result vector
v1 - vector to multiply by
Returns:
false if this matrix is singular

mulInverse

public boolean mulInverse(Vector4d vr)
Multiplies the column vector vr by the inverse of this matrix and places the result back in vr.

Parameters:
vr - vector to multiply by (in place)
Returns:
false if this matrix is singular

mulInverseTranspose

public boolean mulInverseTranspose(Vector4d vr,
                                   Vector4d v1)
Multiplies the column vector v1 by the inverse transpose of this matrix and places the result in vr.

Parameters:
vr - result vector
v1 - vector to multiply by
Returns:
false if this matrix is singular

mulInverseTranspose

public boolean mulInverseTranspose(Vector4d vr)
Multiplies the column vector vr by the inverse transpose of this matrix and places the result back in vr.

Parameters:
vr - vector to multiply by (in place)
Returns:
false if this matrix is singular

negate

public void negate()
Negates this matrix in place.


transpose

public void transpose()
Transposes this matrix in place.


setIdentity

public void setIdentity()
Sets this matrix to the identity.


epsilonEquals

public boolean epsilonEquals(Matrix4dBase M1,
                             double epsilon)
Returns true if the elements of this matrix equal those of matrix M1within a prescribed tolerance epsilon.

Parameters:
M1 - matrix to compare with
epsilon - comparison tolerance
Returns:
false if the matrices are not equal within the specified tolerance

equals

public boolean equals(Matrix4dBase M1)
Returns true if the elements of this matrix exactly equal those of matrix M1.

Parameters:
M1 - matrix to compare with
Returns:
false if the matrices are not equal

infinityNorm

public double infinityNorm()
Returns the infinity norm of this matrix. This is equal to the maximum of the vector 1-norm of each row.

Specified by:
infinityNorm in interface Matrix
Overrides:
infinityNorm in class MatrixBase
Returns:
infinity norm of this matrix

oneNorm

public double oneNorm()
Returns the 1 norm of this matrix. This is equal to the maximum of the vector 1-norm of each column.

Specified by:
oneNorm in interface Matrix
Overrides:
oneNorm in class MatrixBase
Returns:
1 norm of this matrix

frobeniusNorm

public double frobeniusNorm()
Returns the Frobenius norm of this matrix. This is equal to the square root of the sum of the squares of each element.

Specified by:
frobeniusNorm in interface Matrix
Overrides:
frobeniusNorm in class MatrixBase
Returns:
Frobenius norm of this matrix

invert

public boolean invert()
Inverts this matrix in place, returning false if the matrix is detected to be singular. The inverse is computed using an LU decomposition with partial pivoting.


determinant

public double determinant()
                   throws ImproperSizeException
Returns the determinant of this matrix

Specified by:
determinant in interface Matrix
Overrides:
determinant in class MatrixBase
Returns:
matrix determinant
Throws:
ImproperSizeException - if the matrix is not square

clone

public java.lang.Object clone()
Specified by:
clone in interface Clonable
Overrides:
clone in class java.lang.Object