Determinant of a Minor
Keywords: determinant minor det_of_minor matrix syntax inclusion purpose m n r c d scalar example source code

| Prev | Next |  |  |  |  |  |  |

Determinant of a Minor
Syntax
`# include <cppad/speed/det_of_minor.hpp>
` `d = det_of_minor(a, m, n, r, c)`
Inclusion
The template function `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). It is only intended for example and testing purposes, so it is not automatically included by cppad.hpp .
Purpose
This template function returns the determinant of a minor of the matrix A using expansion by minors. The elements of the n × n minor M of the matrix A are defined, for i = 0 , … , n -1 and j = 0 , … , n -1 , by M i , j = A R ( i ) , C ( j ) where the functions R ( i ) is defined by the argument r and C ( j ) is defined by the argument c . `
` 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.
Determinant of A
If the following conditions hold, the minor is the entire matrix A and hence `det_of_minor` will return the determinant of A :

1. n = m .
2. for i = 0 , … , m -1 , r [ i ] = i + 1 , and r [ m ] = 0 .
3. for j = 0 , … , m -1 , c [ j ] = j + 1 , and c [ m ] = 0 .

a
The argument `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 × m matrix A are defined, for i = 0 , … , m -1 and j = 0 , … , m -1 , by A i , j = a [ i * m + j ]
m
The argument `m` has prototype `
size_t m
` and is the number of rows (and columns) in the square matrix A .
n
The argument `n` has prototype `
size_t n
` and is the number of rows (and columns) in the square minor M .
r
The argument `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 , … , n -1 is defined by R ( 0 ) = r [ m ] R ( i + 1 ) = r [ R ( i ) ] 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
The argument `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 , … , n -1 is defined by C ( 0 ) = c [ m ] C ( j + 1 ) = c [ C ( j ) ] 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
The result `d` has prototype `
Scalar d
` and is equal to the determinant of the minor M .
Scalar
If `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`

Example
The file det_of_minor.cpp contains an example and test of `det_of_minor.hpp`. It returns true if it succeeds and false otherwise.
Source Code
The file det_of_minor.hpp contains the source for this template function.

Input File: cppad/speed/det_of_minor.hpp