glucat 0.12.0
|
A matrix_multi<Scalar_T,LO,HI,Tune_P> is a matrix approximation to a multivector. More...
#include <matrix_multi.h>
Public Types | |
using | multivector_t = matrix_multi |
using | matrix_multi_t = multivector_t |
using | scalar_t = Scalar_T |
using | tune_p = Tune_P |
using | index_set_t = index_set<LO, HI> |
using | term_t = std::pair<const index_set_t, Scalar_T> |
using | vector_t = std::vector<Scalar_T> |
using | error_t = error<multivector_t> |
using | framed_multi_t = framed_multi<Scalar_T,LO,HI,Tune_P> |
![]() | |
using | scalar_t |
using | index_set_t |
using | multivector_t |
using | pair_t |
using | vector_t |
Public Member Functions | |
~matrix_multi () override=default | |
Destructor. | |
matrix_multi () | |
Default constructor. | |
template<typename Other_Scalar_T > | |
matrix_multi (const matrix_multi< Other_Scalar_T, LO, HI, Tune_P > &val) | |
Construct a multivector from a multivector with a different scalar type. | |
template<typename Other_Scalar_T > | |
matrix_multi (const matrix_multi< Other_Scalar_T, LO, HI, Tune_P > &val, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a given multivector. | |
matrix_multi (const multivector_t &val, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a given multivector. | |
matrix_multi (const index_set_t ist, const Scalar_T &crd=Scalar_T(1)) | |
Construct a multivector from an index set and a scalar coordinate. | |
matrix_multi (const index_set_t ist, const Scalar_T &crd, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from an index set and a scalar coordinate. | |
matrix_multi (const Scalar_T &scr, const index_set_t frm=index_set_t()) | |
Construct a multivector from a scalar (within a frame, if given) | |
matrix_multi (const int scr, const index_set_t frm=index_set_t()) | |
Construct a multivector from an int (within a frame, if given) | |
matrix_multi (const vector_t &vec, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a given vector. | |
matrix_multi (const std::string &str) | |
Construct a multivector from a string: eg: "3+2{1,2}-6.1e-2{2,3}". | |
matrix_multi (const std::string &str, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a string: eg: "3+2{1,2}-6.1e-2{2,3}". | |
matrix_multi (const char *str) | |
Construct a multivector from a char*: eg: "3+2{1,2}-6.1e-2{2,3}". | |
matrix_multi (const char *str, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a char*: eg: "3+2{1,2}-6.1e-2{2,3}". | |
template<typename Other_Scalar_T > | |
matrix_multi (const framed_multi< Other_Scalar_T, LO, HI, Tune_P > &val) | |
Construct a multivector from a framed_multi_t. | |
template<typename Other_Scalar_T > | |
matrix_multi (const framed_multi< Other_Scalar_T, LO, HI, Tune_P > &val, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a framed_multi_t. | |
auto | fast_matrix_multi (const index_set_t frm) const -> const matrix_multi_t |
Use generalized FFT to construct a matrix_multi_t. | |
template<typename Other_Scalar_T > | |
auto | fast_framed_multi () const -> const framed_multi< Other_Scalar_T, LO, HI, Tune_P > |
Use inverse generalized FFT to construct a framed_multi_t. | |
_GLUCAT_CLIFFORD_ALGEBRA_OPERATIONS auto | operator= (const multivector_t &rhs) -> multivector_t & |
Assignment operator. | |
auto | operator+= (const term_t &rhs) -> multivector_t & |
Add a term, if non-zero. | |
![]() | |
virtual | ~clifford_algebra ()=default |
virtual auto | operator== (const multivector_t &val) const -> bool=0 |
Test for equality of multivectors. | |
virtual auto | operator== (const double &scr) const -> bool=0 |
Test for equality of multivector and scalar. | |
virtual auto | operator+= (const multivector_t &rhs) -> multivector_t &=0 |
Geometric sum. | |
virtual auto | operator+= (const double &scr) -> multivector_t &=0 |
Geometric sum of multivector and scalar. | |
virtual auto | operator-= (const multivector_t &rhs) -> multivector_t &=0 |
Geometric difference. | |
virtual auto | operator-= (const double &scr) -> multivector_t &=0 |
Geometric difference of multivector and scalar. | |
virtual auto | operator- () const -> const multivector_t=0 |
Unary -. | |
virtual auto | operator*= (const double &scr) -> multivector_t &=0 |
Product of multivector and scalar. | |
virtual auto | operator*= (const multivector_t &rhs) -> multivector_t &=0 |
Geometric product. | |
virtual auto | operator%= (const multivector_t &rhs) -> multivector_t &=0 |
Contraction. | |
virtual auto | operator&= (const multivector_t &rhs) -> multivector_t &=0 |
Inner product. | |
virtual auto | operator^= (const multivector_t &rhs) -> multivector_t &=0 |
Outer product. | |
virtual auto | operator/= (const double &scr) -> multivector_t &=0 |
Quotient of multivector and scalar. | |
virtual auto | operator/= (const multivector_t &rhs) -> multivector_t &=0 |
Geometric quotient. | |
virtual auto | operator|= (const multivector_t &rhs) -> multivector_t &=0 |
Transformation via twisted adjoint action. | |
virtual auto | inv () const -> const multivector_t=0 |
Geometric multiplicative inverse. | |
virtual auto | pow (int m) const -> const multivector_t=0 |
*this to the m | |
virtual auto | outer_pow (int m) const -> const multivector_t=0 |
Outer product power. | |
virtual auto | frame () const -> const index_set_t=0 |
Subalgebra generated by all generators of terms of given multivector. | |
virtual auto | grade () const -> index_t=0 |
Maximum of the grades of each term. | |
virtual auto | operator[] (const index_set_t ist) const -> double=0 |
Subscripting: map from index set to scalar coordinate. | |
virtual auto | operator() (index_t grade) const -> const multivector_t=0 |
Pure grade-vector part. | |
virtual auto | scalar () const -> double=0 |
Scalar part. | |
virtual auto | pure () const -> const multivector_t=0 |
Pure part. | |
virtual auto | even () const -> const multivector_t=0 |
Even part of multivector, sum of even grade terms. | |
virtual auto | odd () const -> const multivector_t=0 |
Odd part of multivector, sum of odd grade terms. | |
virtual auto | vector_part () const -> const vector_t=0 |
Vector part of multivector, as a vector_t with respect to frame() | |
virtual auto | vector_part (const index_set_t frm, const bool prechecked) const -> const vector_t=0 |
Vector part of multivector, as a vector_t with respect to frm. | |
virtual auto | involute () const -> const multivector_t=0 |
Main involution, each {i} is replaced by -{i} in each term, eg. {1} -> -{1}. | |
virtual auto | reverse () const -> const multivector_t=0 |
Reversion, eg. {1}*{2} -> {2}*{1}. | |
virtual auto | conj () const -> const multivector_t=0 |
Conjugation, reverse o involute == involute o reverse. | |
virtual auto | quad () const -> double=0 |
Scalar_T quadratic form == (rev(x)*x)(0) | |
virtual auto | norm () const -> double=0 |
Scalar_T norm == sum of norm of coordinates. | |
virtual auto | max_abs () const -> double=0 |
Maximum of absolute values of components of multivector: multivector infinity norm. | |
virtual auto | truncated (const double &limit=default_truncation) const -> const multivector_t=0 |
Remove all terms with relative size smaller than limit. | |
virtual auto | isinf () const -> bool=0 |
Check if a multivector contains any infinite values. | |
virtual auto | isnan () const -> bool=0 |
Check if a multivector contains any IEEE NaN values. | |
virtual void | write (const std::string &msg="") const=0 |
Write formatted multivector to output. | |
virtual void | write (std::ofstream &ofile, const std::string &msg="") const=0 |
Write formatted multivector to file. | |
Static Public Member Functions | |
static auto | classname () -> const std::string |
Class name used in messages. | |
static auto | random (const index_set_t frm, Scalar_T fill=Scalar_T(1)) -> const matrix_multi_t |
Random multivector within a frame. | |
![]() | |
static auto | classname () -> const std::string |
Private Types | |
using | orientation_t = ublas::row_major |
using | basis_matrix_t = ublas::compressed_matrix<int, orientation_t> |
using | matrix_t = ublas::matrix<Scalar_T, orientation_t> |
using | matrix_index_t = typename matrix_t::size_type |
Private Member Functions | |
template<typename Matrix_T > | |
matrix_multi (const Matrix_T &mtx, const index_set_t frm) | |
Construct a multivector within a given frame from a given matrix. | |
matrix_multi (const matrix_t &mtx, const index_set_t frm) | |
Construct a multivector within a given frame from a given matrix. | |
auto | basis_element (const index_set< LO, HI > &ist) const -> const basis_matrix_t |
Create a basis element matrix within the current frame. | |
Private Attributes | |
index_set_t | m_frame |
Index set representing the frame for the subalgebra which contains the multivector. | |
matrix_t | m_matrix |
Matrix value representing the multivector within the folded frame. | |
Friends | |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI, typename Other_Tune_P > | |
class | framed_multi |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI, typename Other_Tune_P > | |
class | matrix_multi |
auto | operator* (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | operator^ (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | operator& (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | operator% (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | star (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> Scalar_T |
auto | operator/ (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | operator| (const matrix_multi_t &lhs, const matrix_multi_t &rhs) -> const matrix_multi_t |
auto | operator>> (std::istream &s, multivector_t &val) -> std::istream & |
auto | operator<< (std::ostream &os, const multivector_t &val) -> std::ostream & |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI, typename Other_Tune_P > | |
auto | reframe (const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &lhs, const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &rhs, matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &lhs_reframed, matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &rhs_reframed) -> const index_set< Other_LO, Other_HI > |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI, typename Other_Tune_P > | |
auto | matrix_sqrt (const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &val, const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &i, const index_t level) -> const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI, typename Other_Tune_P > | |
auto | matrix_log (const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &val, const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > &i, const index_t level) -> const matrix_multi< Other_Scalar_T, Other_LO, Other_HI, Other_Tune_P > |
Additional Inherited Members | |
![]() | |
static const index_t | v_lo |
static const index_t | v_hi |
static const double | default_truncation |
Default for truncation. | |
A matrix_multi<Scalar_T,LO,HI,Tune_P> is a matrix approximation to a multivector.
Definition at line 137 of file matrix_multi.h.
|
private |
Definition at line 157 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::error_t = error<multivector_t> |
Definition at line 148 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::framed_multi_t = framed_multi<Scalar_T,LO,HI,Tune_P> |
Definition at line 149 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::index_set_t = index_set<LO, HI> |
Definition at line 145 of file matrix_multi.h.
|
private |
Definition at line 159 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi_t = multivector_t |
Definition at line 142 of file matrix_multi.h.
|
private |
Definition at line 158 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::multivector_t = matrix_multi |
Definition at line 141 of file matrix_multi.h.
|
private |
Definition at line 156 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::scalar_t = Scalar_T |
Definition at line 143 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::term_t = std::pair<const index_set_t, Scalar_T> |
Definition at line 146 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::tune_p = Tune_P |
Definition at line 144 of file matrix_multi.h.
using glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::vector_t = std::vector<Scalar_T> |
Definition at line 147 of file matrix_multi.h.
|
overridedefault |
Destructor.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | ) |
Default constructor.
Definition at line 106 of file matrix_multi_imp.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const matrix_multi< Other_Scalar_T, LO, HI, Tune_P > & | val | ) |
Construct a multivector from a multivector with a different scalar type.
Definition at line 115 of file matrix_multi_imp.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const matrix_multi< Other_Scalar_T, LO, HI, Tune_P > & | val, |
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from a given multivector.
Definition at line 134 of file matrix_multi_imp.h.
References glucat::folded_dim(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_frame, glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix, and glucat::numeric_traits< Scalar_T >::to_scalar_t().
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const multivector_t & | val, |
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from a given multivector.
Definition at line 159 of file matrix_multi_imp.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_frame, and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const index_set_t | ist, |
const Scalar_T & | crd = Scalar_T(1) ) |
Construct a multivector from an index set and a scalar coordinate.
Definition at line 171 of file matrix_multi_imp.h.
References glucat::folded_dim(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_frame, and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const index_set_t | ist, |
const Scalar_T & | crd, | ||
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from an index set and a scalar coordinate.
Definition at line 183 of file matrix_multi_imp.h.
References glucat::folded_dim(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const Scalar_T & | scr, |
const index_set_t | frm = index_set_t() ) |
Construct a multivector from a scalar (within a frame, if given)
Definition at line 197 of file matrix_multi_imp.h.
References glucat::folded_dim(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const int | scr, |
const index_set_t | frm = index_set_t() ) |
Construct a multivector from an int (within a frame, if given)
Definition at line 209 of file matrix_multi_imp.h.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const vector_t & | vec, |
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from a given vector.
Definition at line 215 of file matrix_multi_imp.h.
References glucat::index_set< LO, HI >::count(), glucat::folded_dim(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix, glucat::index_set< LO, HI >::max(), and glucat::index_set< LO, HI >::min().
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const std::string & | str | ) |
Construct a multivector from a string: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 240 of file matrix_multi_imp.h.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const std::string & | str, |
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from a string: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 246 of file matrix_multi_imp.h.
|
inline |
Construct a multivector from a char*: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 196 of file matrix_multi.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi.
|
inline |
Construct a multivector, within a given frame, from a char*: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 199 of file matrix_multi.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const framed_multi< Other_Scalar_T, LO, HI, Tune_P > & | val | ) |
Construct a multivector from a framed_multi_t.
Definition at line 253 of file matrix_multi_imp.h.
References glucat::folded_dim(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_frame, and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi | ( | const framed_multi< Other_Scalar_T, LO, HI, Tune_P > & | val, |
const index_set_t | frm, | ||
const bool | prechecked = false ) |
Construct a multivector, within a given frame, from a framed_multi_t.
Definition at line 277 of file matrix_multi_imp.h.
References glucat::folded_dim(), and glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::truncated().
|
private |
Construct a multivector within a given frame from a given matrix.
Definition at line 303 of file matrix_multi_imp.h.
References glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::m_matrix.
|
private |
Construct a multivector within a given frame from a given matrix.
Definition at line 322 of file matrix_multi_imp.h.
|
private |
Create a basis element matrix within the current frame.
Definition at line 1186 of file matrix_multi_imp.h.
References glucat::gen::generator_table< Matrix_T >::generator(), glucat::matrix::mono_prod(), glucat::offset_level(), and glucat::matrix::unit().
Referenced by glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::framed_multi().
|
static |
Class name used in messages.
Definition at line 78 of file matrix_multi_imp.h.
auto glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::fast_framed_multi | ( | ) | const -> const framed_multi<Other_Scalar_T,LO,HI,Tune_P> |
Use inverse generalized FFT to construct a framed_multi_t.
Definition at line 1109 of file matrix_multi_imp.h.
References glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::centre_pm4_qp4(), glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::centre_pp4_qm4(), glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::centre_qp1_pm1(), glucat::fast(), glucat::gen::offset_to_super, glucat::pos_mod(), and glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::unfold().
|
inline |
Use generalized FFT to construct a matrix_multi_t.
Definition at line 1096 of file matrix_multi_imp.h.
|
inline |
Add a term, if non-zero.
Geometric sum.
Geometric sum of multivector and scalar.
Definition at line 416 of file matrix_multi_imp.h.
auto glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::operator= | ( | const multivector_t & | rhs | ) | -> multivector_t& |
Assignment operator.
Definition at line 330 of file matrix_multi_imp.h.
|
static |
Random multivector within a frame.
Definition at line 926 of file matrix_multi_imp.h.
References glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::random().
|
friend |
Definition at line 151 of file matrix_multi.h.
|
friend |
|
friend |
Definition at line 153 of file matrix_multi.h.
Referenced by glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi().
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
private |
Index set representing the frame for the subalgebra which contains the multivector.
Definition at line 278 of file matrix_multi.h.
Referenced by glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi().
|
private |
Matrix value representing the multivector within the folded frame.
Definition at line 280 of file matrix_multi.h.
Referenced by glucat::framed_multi< Scalar_T, LO, HI, Tune_P >::framed_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi(), and glucat::matrix_multi< Scalar_T, LO, HI, Tune_P >::matrix_multi().