JMSLTM Numerical Library 4.0

com.imsl.math
Class LU

java.lang.Object
  extended bycom.imsl.math.LU
All Implemented Interfaces:
Cloneable, Serializable

public class LU
extends Object
implements Serializable, Cloneable

LU factorization of a matrix of type double.

LU performs an LU factorization of a real general coefficient matrix. The condition method estimates the condition number of the matrix. The LU factorization is done using scaled partial pivoting. Scaled partial pivoting differs from partial pivoting in that the pivoting strategy is the same as if each row were scaled to have the same infinity norm.

The L_1 condition number of the matrix A is defined to be kappa(A)=||A||_1 ||A^{-1}||_1. Since it is expensive to compute ||A^{-1}||_1, the condition number is only estimated. The estimation algorithm is the same as used by LINPACK and is described in a paper by Cline et al. (1979).

An estimated condition number greater than 1/epsilon (where epsilon is machine precision) indicates that very small changes in A can cause very large changes in the solution x. Iterative refinement can sometimes find the solution to such a system.

LU fails if U, the upper triangular part of the factorization, has a zero diagonal element. This can occur only if A either is singular or is very close to a singular matrix.

Use the solve method to solve systems of equations. The determinant method can be called to compute the determinant of the coefficient matrix.

LU is based on the LINPACK routine SGECO; see Dongarra et al. (1979). SGECO uses unscaled partial pivoting.

See Also:
Example, Serialized Form

Field Summary
protected  double[][] factor
          LU factorization of A with partial pivoting
protected  int[] ipvt
          Pivot sequence for the factorization
 
Constructor Summary
LU(double[][] a)
          Creates the LU factorization of a square matrix of type double.
 
Method Summary
 double condition(double[][] a)
          Return an estimate of the reciprocal of the L1 condition number of a matrix.
 double determinant()
          Return the determinant of the matrix used to construct this instance.
 double[][] inverse()
          Returns the inverse of the matrix used to construct this instance.
 double[] solve(double[] b)
          Return the solution x of the linear system Ax = b using the LU factorization of A.
static double[] solve(double[][] a, double[] b)
          Solve ax=b for x using the LU factorization of a.
 double[] solveTranspose(double[] b)
          Return the solution x of the linear system A^T = b.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

factor

protected double[][] factor
LU factorization of A with partial pivoting


ipvt

protected int[] ipvt
Pivot sequence for the factorization

Constructor Detail

LU

public LU(double[][] a)
   throws SingularMatrixException
Creates the LU factorization of a square matrix of type double.

Parameters:
a - the double square matrix to be factored
Throws:
IllegalArgumentException - is thrown when the row lengths of input matrix are not equal (for example, the matrix edges are "jagged".)
SingularMatrixException - is thrown when the input matrix is singular.
Method Detail

condition

public double condition(double[][] a)
Return an estimate of the reciprocal of the L1 condition number of a matrix.

Parameters:
a - the double square matrix for which the reciprocal of the L1 condition number is desired
Returns:
a double value representing an estimate of the reciprocal of the L1 condition number of the matrix

determinant

public double determinant()
Return the determinant of the matrix used to construct this instance.

Returns:
a double scalar containing the determinant of the matrix used to construct this instance

inverse

public double[][] inverse()
Returns the inverse of the matrix used to construct this instance.

Returns:
a double matrix representing the inverse of the matrix used to construct this instance

solve

public double[] solve(double[] b)
Return the solution x of the linear system Ax = b using the LU factorization of A.

Parameters:
b - a double array containing the right-hand side of the linear system
Returns:
a double array containing the solution to the linear system of equations

solve

public static double[] solve(double[][] a,
                             double[] b)
                      throws SingularMatrixException
Solve ax=b for x using the LU factorization of a.

Parameters:
a - a double square matrix
b - a double column vector
Returns:
a double column vector containing the solution to the linear system of equations
Throws:
IllegalArgumentException - This exception is thrown when (1) the lengths of the rows of the input matrix are not uniform, and (2) the number of rows in the input matrix is not equal to the number of elements in x.
SingularMatrixException - is thrown when the matrix is singular.

solveTranspose

public double[] solveTranspose(double[] b)
Return the solution x of the linear system A^T = b.

Parameters:
b - double array containing the right-hand side of the linear system
Returns:
double array containing the solution to the linear system of equations

JMSLTM Numerical Library 4.0

Copyright 1970-2006 Visual Numerics, Inc.
Built June 1 2006.