DNA Calib 1.1
Project brief
Functions
tdm::impl Namespace Reference

Functions

template<dim_t N, typename T >
void minor (const mat< N, N, T > &input, dim_t dimensions, dim_t i, dim_t j, mat< N, N, T > &output)
 
template<dim_t N, typename T >
determinant (const mat< N, N, T > &m, dim_t dimensions)
 
template<dim_t N, typename T >
mat< N, N, T > adjoint (const mat< N, N, T > &m)
 

Function Documentation

◆ adjoint()

template<dim_t N, typename T >
mat< N, N, T > tdm::impl::adjoint ( const mat< N, N, T > &  m)
inline
107 {
108 if (m.rows() == static_cast<dim_t>(1)) {
109 return mat<N, N, T>{static_cast<T>(1)};
110 }
111
112 mat<N, N, T> result;
113 mat<N, N, T> temp;
114 for (dim_t row{}; row < m.rows(); ++row) {
115 for (dim_t col{}; col < m.columns(); ++col) {
116 minor(m, N, row, col, temp);
117 const T sign = static_cast<T>((row + col) % 2u == 0u ? 1 : -1);
118 result(col, row) = (sign * determinant(temp, N - 1));
119 }
120 }
121 return result;
122}
void minor(const mat< N, N, T > &input, dim_t dimensions, dim_t i, dim_t j, mat< N, N, T > &output)
Definition: Computations.h:72
std::size_t dim_t
Definition: Types.h:22
T determinant(const mat< N, N, T > &m)
Definition: Computations.h:129
Definition: Mat.h:17

References determinant(), and minor().

Referenced by tdm::inverse().

◆ determinant()

template<dim_t N, typename T >
T tdm::impl::determinant ( const mat< N, N, T > &  m,
dim_t  dimensions 
)
inline
88 {
89 if (dimensions == static_cast<dim_t>(1)) {
90 return m(0, 0);
91 }
92
93 T result{};
94 mat<N, N, T> temp;
95 auto sign = static_cast<T>(1);
96 const dim_t i{};
97 for (dim_t j{}; j < dimensions; ++j) {
98 minor(m, dimensions, i, j, temp);
99 result += (sign * m(i, j) * determinant(temp, dimensions - 1));
100 sign = -sign;
101 }
102
103 return result;
104}

References determinant(), and minor().

Referenced by adjoint(), tdm::determinant(), and determinant().

◆ minor()

template<dim_t N, typename T >
void tdm::impl::minor ( const mat< N, N, T > &  input,
dim_t  dimensions,
dim_t  i,
dim_t  j,
mat< N, N, T > &  output 
)
inline
72 {
73 for (dim_t outRow{}, inRow{}; inRow < dimensions; ++inRow) {
74 for (dim_t outCol{}, inCol{}; inCol < dimensions; ++inCol) {
75 if ((inRow != i) && (inCol != j)) {
76 output(outRow, outCol) = input(inRow, inCol);
77 ++outCol;
78 if (outCol == (dimensions - static_cast<dim_t>(1))) {
79 outCol = {};
80 ++outRow;
81 }
82 }
83 }
84 }
85}

Referenced by adjoint(), and determinant().