![]() |
Prev | Next |
# include <cppad/cppad.hpp>
sign = LuRatio(
ip,
jp,
LU,
ratio)
LuRatio
are
used as part of an ADFun
object.
cppad/cppad.hpp
file to be included.
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 ]
\]
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.
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.
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.
ADvector &
LU
and the size of LU must equal
n * n
(see description of ADvector
below).
P(
i,
j) =
A[
ip[
i] *
n +
jp[
j] ]
L(
i,
j) =
LU[
ip[
i] *
n +
jp[
j] ]
for
i = 0 , \ldots , n-1
and
j = 0 , \ldots , i
.
U(
i,
j) =
LU[
ip[
i] *
n +
jp[
j] ]
for
i = 0 , \ldots , n-2
and
j = i+1 , \ldots , n-1
.
L *
U =
P
If the return value of sign is zero,
the contents of L and U are not defined.
sign *
LU[
ip[0],
jp[0]] *
... *
LU[
ip[
n-1],
jp[
n-1]]
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.
AD<
Base>
.
The type Base must be
float
, double
, or any type in the
AD levels above
above float
or double
.
AD<
Base>
.
The routine CheckSimpleVector
will generate an error message
if this is not the case.
LuRatio
.
It returns true if it succeeds and false otherwise.