Prev Next

Invert an LU Factored Equation

Syntax
# include <cppad/lu_invert.hpp>

LuInvert(ipjpLUX)

Description
Solves the matrix equation A * X = B using an LU factorization computed by LuFactor .

Include
The file cppad/lu_invert.hpp is included by cppad/cppad.hpp but it can also be included separately with out the rest of the CppAD routines.

Matrix Storage
All matrices are stored in row major order. To be specific, if  Y is a vector that contains a  p by  q matrix, the size of  Y must be equal to   p * q  and for  i = 0 , \ldots , p-1 ,  j = 0 , \ldots , q-1 ,  \[
     Y_{i,j} = Y[ i * q + j ]
\] 


ip
The argument ip has prototype
     const 
SizeVector &ip
(see description for SizeVector in LuFactor specifications). The size of ip is referred to as n in the specifications below. The elements of ip determine the order of the rows in the permuted matrix.

jp
The argument jp has prototype
     const 
SizeVector &jp
(see description for SizeVector in LuFactor specifications). The size of jp must be equal to n. The elements of jp determine the order of the columns in the permuted matrix.

LU
The argument LU has the prototype
     const 
FloatVector &LU
and the size of LU must equal  n * n (see description for FloatVector in LuFactor specifications).

L
We define the lower triangular matrix L in terms of LU. The matrix L is zero above the diagonal and the rest of the elements are defined by
     
L(ij) = LUip[i] * n + jp[j] ]
for  i = 0 , \ldots , n-1 and  j = 0 , \ldots , i .

U
We define the upper triangular matrix U in terms of LU. The matrix U is zero below the diagonal, one on the diagonal, and the rest of the elements are defined by
     
U(ij) = LUip[i] * n + jp[j] ]
for  i = 0 , \ldots , n-2 and  j = i+1 , \ldots , n-1 .

P
We define the permuted matrix P in terms of the matrix L and the matrix U by P = L * U.

A
The matrix A, which defines the linear equations that we are solving, is given by
     
P(ij) = Aip[i] * n + jp[j] ]
(Hence LU contains a permuted factorization of the matrix A.)

X
The argument X has prototype
     
FloatVector &X
(see description for FloatVector in LuFactor specifications). The matrix X must have the same number of rows as the matrix A. The input value of X is the matrix B and the output value solves the matrix equation A * X = B.

Example
The file lu_solve.hpp is a good example usage of LuFactor with LuInvert. The file LuInvert.cpp contains an example and test of using LuInvert by itself. It returns true if it succeeds and false otherwise.

Source
The file lu_invert.hpp contains the current source code that implements these specifications.
Input File: cppad/lu_invert.hpp