Prev | Next |
# include <cppad/speed/det_of_minor.hpp>
d = det_of_minor(a, m, n, r, c)
det_of_minor
is defined in the CppAD
namespace by including
the file cppad/speed/det_of_minor.hpp
(relative to the CppAD distribution directory).
This template function
is for example and testing purposes only.
Expansion by minors is chosen as an example because it uses
a lot of floating point operations yet does not require much source code
(on the order of
m
factorial floating point operations and
about 70 lines of source code including comments).
This is not an efficient method for computing a determinant;
for example, using an LU factorization would be better.
det_of_minor
will return the determinant of @(@
A
@)@:
a
has prototype
const std::vector<Scalar>& a
and is a vector with size @(@
m * m
@)@
(see description of Scalar
below).
The elements of the @(@
m \times m
@)@ matrix @(@
A
@)@ are defined,
for @(@
i = 0 , \ldots , m-1
@)@ and @(@
j = 0 , \ldots , m-1
@)@, by
@[@
A_{i,j} = a[ i * m + j]
@]@
m
has prototype
size_t m
and is the number of rows (and columns) in the square matrix @(@
A
@)@.
n
has prototype
size_t n
and is the number of rows (and columns) in the square minor @(@
M
@)@.
r
has prototype
std::vector<size_t>& r
and is a vector with @(@
m + 1
@)@ elements.
This vector defines the function @(@
R(i)
@)@
which specifies the rows of the minor @(@
M
@)@.
To be specific, the function @(@
R(i)
@)@
for @(@
i = 0, \ldots , n-1
@)@ is defined by
@[@
\begin{array}{rcl}
R(0) & = & r[m]
\\
R(i+1) & = & r[ R(i) ]
\end{array}
@]@
All the elements of
r
must have value
less than or equal
m
.
The elements of vector
r
are modified during the computation,
and restored to their original value before the return from
det_of_minor
.
c
has prototype
std::vector<size_t>& c
and is a vector with @(@
m + 1
@)@ elements
This vector defines the function @(@
C(i)
@)@
which specifies the rows of the minor @(@
M
@)@.
To be specific, the function @(@
C(i)
@)@
for @(@
j = 0, \ldots , n-1
@)@ is defined by
@[@
\begin{array}{rcl}
C(0) & = & c[m]
\\
C(j+1) & = & c[ C(j) ]
\end{array}
@]@
All the elements of
c
must have value
less than or equal
m
.
The elements of vector
c
are modified during the computation,
and restored to their original value before the return from
det_of_minor
.
d
has prototype
Scalar d
and is equal to the determinant of the minor @(@
M
@)@.
x
and
y
are objects of type
Scalar
and
i
is an object of type int
,
the
Scalar
must support the following operations:
Syntax | Description | Result Type |
Scalar x
|
default constructor for
Scalar
object.
| |
x = i
|
set value of
x
to current value of
i
| |
x = y
|
set value of
x
to current value of
y
| |
x + y
|
value of
x
plus
y
|
Scalar
|
x - y
|
value of
x
minus
y
|
Scalar
|
x * y
|
value of
x
times value of
y
|
Scalar
|
det_of_minor.hpp
.