18#ifndef itkMatrixExponential_h
19#define itkMatrixExponential_h
23#include "itkeigen/unsupported/Eigen/MatrixFunctions"
42template <
unsigned int VRows,
unsigned int VColumns,
typename TReal>
46 using RowMajorMatrix = Eigen::Matrix<TReal, VRows, VColumns, Eigen::RowMajor>;
47 Eigen::Map<const RowMajorMatrix> inMap(inData);
48 Eigen::Map<RowMajorMatrix> outMap(outData);
52template <
typename TReal>
56 using RowMajorMatrix = Eigen::Matrix<TReal, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
57 Eigen::Map<const RowMajorMatrix> inMap(inData, n, n);
58 Eigen::Map<RowMajorMatrix> outMap(outData, n, n);
64template <
typename T,
unsigned int VRows,
unsigned int VColumns>
68 static_assert(VRows == VColumns,
"MatrixExponential requires a square matrix");
75template <
typename T,
unsigned int VRows,
unsigned int VColumns>
76vnl_matrix_fixed<T, VRows, VColumns>
79 static_assert(VRows == VColumns,
"MatrixExponential requires a square matrix");
80 vnl_matrix_fixed<T, VRows, VColumns> result;
90 itkAssertOrThrowMacro(A.rows() == A.cols(),
"MatrixExponential requires a square matrix");
91 const unsigned int n = A.rows();
92 vnl_matrix<T> result(n, n);
A templated class holding a M x N size Matrix.
InternalMatrixType & GetVnlMatrix()
Cholesky-based linear algebra for symmetric matrices, backed by Eigen.
void MatrixExponentialEigen(const TReal *inData, TReal *outData)
Matrix< T, VRows, VColumns > MatrixExponential(const Matrix< T, VRows, VColumns > &A)
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....