SuanShu, a Java numerical and statistical library

com.numericalmethod.suanshu.optimization.unconstrained.hessian
Class MatthewsDavies

java.lang.Object
  extended by com.numericalmethod.suanshu.matrix.doubles.matrixtype.MatrixMathImpl<T>
      extended by com.numericalmethod.suanshu.matrix.doubles.matrixtype.MatrixStorageImpl<DenseMatrix>
          extended by com.numericalmethod.suanshu.matrix.doubles.matrixtype.dense.DenseMatrix
              extended by com.numericalmethod.suanshu.optimization.unconstrained.hessian.MatthewsDavies
All Implemented Interfaces:
DeepCopyable, AbelianGroup<Matrix>, Monoid<Matrix>, Ring<Matrix>, Matrix, MatrixAccessor, MatrixRing, Densifiable, MatrixDimension

public class MatthewsDavies
extends DenseMatrix

Matthews and Davies propose the following way to coerce a non-positive definite Hessian matrix to become positive definite.

The LDL decomposition is performed on the non-positive definite matrix. The zero and negative entries are then replaced by the smallest positive entry in the diagonal matrix.

See Also:
"Algorithm 5.4. Practical Optimization: Algorithms and Engineering Applications. Andreas Antoniou and Wu-Sheng Lu."

Constructor Summary
MatthewsDavies(Matrix H)
          Construct a MatthewsDavies instance.
 
Method Summary
 DiagonalMatrix D()
          Get a copy of the diagonal matrix D in the LDL decomposition.
 DiagonalMatrix Dhat()
          Get a copy of the modified diagonal matrix which is positive definite.
 LowerTriangularMatrix L()
          Get a copy of the lower triangular matrix L in the LDL decomposition.
 UpperTriangularMatrix Lt()
          Get the transpose of the lower triangular matrix L in the LDL decomposition.
 
Methods inherited from class com.numericalmethod.suanshu.matrix.doubles.matrixtype.dense.DenseMatrix
add, deepCopy, getColumn, getColumn, getMatrixData, getRow, getRow, getSample, minus, multiply, multiply, ONE, overwrite, scaled, t, toDense, ZERO
 
Methods inherited from class com.numericalmethod.suanshu.matrix.doubles.matrixtype.MatrixStorageImpl
equals, get, hashCode, set, setMatrixData
 
Methods inherited from class com.numericalmethod.suanshu.matrix.doubles.matrixtype.MatrixMathImpl
add, call, minus, multiply, nCols, nRows, opposite, setColumn, setColumn, setRow, setRow, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

MatthewsDavies

public MatthewsDavies(Matrix H)
Construct a MatthewsDavies instance. In this particular implementation, any zero or negative element is replaced by the smallest positive entry in D.

If all entries in D is < 0, D is replaced by an identity matrix.

Parameters:
H - a non-positive definite matrix
Method Detail

L

public LowerTriangularMatrix L()
Get a copy of the lower triangular matrix L in the LDL decomposition.

Returns:
a copy of L

Lt

public UpperTriangularMatrix Lt()
Get the transpose of the lower triangular matrix L in the LDL decomposition.

The transpose is upper triangular.

Returns:
a copy of Lt

D

public DiagonalMatrix D()
Get a copy of the diagonal matrix D in the LDL decomposition.

Returns:
a copy of D

Dhat

public DiagonalMatrix Dhat()
Get a copy of the modified diagonal matrix which is positive definite.

Returns:
a copy of D^

SuanShu, a Java numerical and statistical library

Copyright © 2011 Numerical Method Inc. Ltd. All Rights Reserved.