Prev | Next |
# include <cppad/cppad.hpp>
sign = LuRatio(ip, jp, LU, ratio)
A
where
A
is a square matrix.
A measure of the numerical stability called
ratio
is calculated.
This ratio is useful when the results of LuRatio
are
used as part of an ADFun
object.
cppad/cppad.hpp
file to be included.
sign
has prototype
int sign
If
A
is invertible,
sign
is plus or minus one
and is the sign of the permutation corresponding to the row ordering
ip
and column ordering
jp
.
If
A
is not invertible,
sign
is zero.
ip
has prototype
SizeVector &ip
(see description of SizeVector
below).
The size of
ip
is referred to as
n
in the
specifications below.
The input value of the elements of
ip
does not matter.
The output value of the elements of
ip
determine
the order of the rows in the permuted matrix.
jp
has prototype
SizeVector &jp
(see description of SizeVector
below).
The size of
jp
must be equal to
n
.
The input value of the elements of
jp
does not matter.
The output value of the elements of
jp
determine
the order of the columns in the permuted matrix.
LU
has the prototype
ADvector &LU
and the size of
LU
must equal @(@
n * n
@)@
(see description of ADvector
below).
A
as the matrix corresponding to the input
value of
LU
.
P
in terms of
A
by
P(i, j) = A[ ip[i] * n + jp[j] ]
L
in terms of the
output value of
LU
.
The matrix
L
is zero above the diagonal
and the rest of the elements are defined by
L(i, j) = LU[ ip[i] * n + jp[j] ]
for @(@
i = 0 , \ldots , n-1
@)@ and @(@
j = 0 , \ldots , i
@)@.
U
in terms of the
output value of
LU
.
The matrix
U
is zero below the diagonal,
one on the diagonal,
and the rest of the elements are defined by
U(i, j) = LU[ ip[i] * n + jp[j] ]
for @(@
i = 0 , \ldots , n-2
@)@ and @(@
j = i+1 , \ldots , n-1
@)@.
sign
is non-zero,
L * U = P
If the return value of
sign
is zero,
the contents of
L
and
U
are not defined.
sign
is zero,
the determinant of
A
is zero.
If
sign
is non-zero,
using the output value of
LU
the determinant of the matrix
A
is equal to
sign * LU[ip[0], jp[0]] * ... * LU[ip[n-1], jp[n-1]]
ratio
has prototype
AD<Base> &ratio
On input, the value of
ratio
does not matter.
On output it is a measure of how good the choice of pivots is.
For @(@
p = 0 , \ldots , n-1
@)@,
the p
-th pivot element is the element of maximum absolute value of a
@(@
(n-p) \times (n-p)
@)@ sub-matrix.
The ratio of each element of sub-matrix divided by the pivot element
is computed.
The return value of
ratio
is the maximum absolute value of
such ratios over with respect to all elements and all the pivots.
LuRatio
is recorded in the
ADFun<Base>
object
F
.
Then a call to Forward
of the form
F.Forward(k, xk)
with
k
equal to zero will revaluate this Lu factorization
with the same pivots and a new value for
A
.
In this case, the resulting
ratio
may not be one.
If
ratio
is too large (the meaning of too large is up to you),
the current pivots do not yield a stable LU factorization of
A
.
A better choice for the pivots (for this value of
A
)
will be made if you recreate the ADFun
object
starting with the Independent
variable values
that correspond to the vector
xk
.
SizeVector
must be a SimpleVector
class with
elements of type size_t
.
The routine CheckSimpleVector
will generate an error message
if this is not the case.
ADvector
must be a
simple vector class
with elements of type
AD<Base>
.
The routine CheckSimpleVector
will generate an error message
if this is not the case.
LuRatio
.