glucat
0.8.2
|
A framed_multi<Scalar_T,LO,HI> is a framed approximation to a multivector. More...
#include <framed_multi.h>
Classes | |
class | hash_size_t |
class | var_term |
Variable term. More... | |
Public Types | |
typedef framed_multi | multivector_t |
typedef multivector_t | framed_multi_t |
typedef Scalar_T | scalar_t |
typedef index_set< LO, HI > | index_set_t |
typedef std::pair< const index_set_t, Scalar_T > | term_t |
typedef std::vector< Scalar_T > | vector_t |
typedef error< multivector_t > | error_t |
typedef matrix_multi< Scalar_T, LO, HI > | matrix_multi_t |
![]() | |
typedef Scalar_T | scalar_t |
typedef index_set< LO, HI > | index_set_t |
typedef framed_multi< Scalar_T, LO, HI > | multivector_t |
typedef std::pair< const index_set_t, Scalar_T > | pair_t |
typedef std::vector< Scalar_T > | vector_t |
Public Member Functions | |
~framed_multi () | |
Destructor. More... | |
framed_multi () | |
Default constructor. More... | |
template<typename Other_Scalar_T > | |
framed_multi (const framed_multi< Other_Scalar_T, LO, HI > &val) | |
Construct a multivector from a multivector with a different scalar type. More... | |
template<typename Other_Scalar_T > | |
framed_multi (const framed_multi< Other_Scalar_T, LO, HI > &val, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a given multivector. More... | |
framed_multi (const framed_multi_t &val, const index_set_t frm, const bool prechecked=false) | |
Construct a multivector, within a given frame, from a given multivector. More... | |
framed_multi (const index_set_t ist, const Scalar_T &crd=Scalar_T(1)) | |
Construct a multivector from an index set and a scalar coordinate. More... | |
framed_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. More... | |
framed_multi (const Scalar_T &scr, const index_set_t frm=index_set_t()) | |
Construct a multivector from a scalar (within a frame, if given) More... | |
framed_multi (const int scr, const index_set_t frm=index_set_t()) | |
Construct a multivector from an int (within a frame, if given) More... | |
framed_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. More... | |
framed_multi (const std::string &str) | |
Construct a multivector from a string: eg: "3+2{1,2}-6.1e-2{2,3}". More... | |
framed_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}". More... | |
framed_multi (const char *str) | |
Construct a multivector from a char*: eg: "3+2{1,2}-6.1e-2{2,3}". More... | |
framed_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}". More... | |
template<typename Other_Scalar_T > | |
framed_multi (const matrix_multi< Other_Scalar_T, LO, HI > &val) | |
Construct a multivector from a matrix_multi_t. More... | |
template<typename Other_Scalar_T > | |
const matrix_multi< Other_Scalar_T, LO, HI > | fast_matrix_multi (const index_set_t frm) const |
Use generalized FFT to construct a matrix_multi_t. More... | |
const framed_multi_t | fast_framed_multi () const |
Use inverse generalized FFT to construct a framed_multi_t. More... | |
_GLUCAT_CLIFFORD_ALGEBRA_OPERATIONS unsigned long | nbr_terms () const |
Number of terms. More... | |
multivector_t & | operator+= (const term_t &term) |
Add a term, if non-zero. More... | |
![]() | |
virtual | ~clifford_algebra () |
virtual bool | operator== (const multivector_t &val) const=0 |
Test for equality of multivectors. More... | |
virtual bool | operator== (const Scalar_T &scr) const=0 |
Test for equality of multivector and scalar. More... | |
virtual multivector_t & | operator+= (const multivector_t &rhs)=0 |
Geometric sum. More... | |
virtual multivector_t & | operator+= (const Scalar_T &scr)=0 |
Geometric sum of multivector and scalar. More... | |
virtual multivector_t & | operator-= (const multivector_t &rhs)=0 |
Geometric difference. More... | |
virtual const multivector_t | operator- () const=0 |
Unary -. More... | |
virtual multivector_t & | operator*= (const Scalar_T &scr)=0 |
Product of multivector and scalar. More... | |
virtual multivector_t & | operator*= (const multivector_t &rhs)=0 |
Geometric product. More... | |
virtual multivector_t & | operator%= (const multivector_t &rhs)=0 |
Contraction. More... | |
virtual multivector_t & | operator&= (const multivector_t &rhs)=0 |
Inner product. More... | |
virtual multivector_t & | operator^= (const multivector_t &rhs)=0 |
Outer product. More... | |
virtual multivector_t & | operator/= (const Scalar_T &scr)=0 |
Quotient of multivector and scalar. More... | |
virtual multivector_t & | operator/= (const multivector_t &rhs)=0 |
Geometric quotient. More... | |
virtual multivector_t & | operator|= (const multivector_t &rhs)=0 |
Transformation via twisted adjoint action. More... | |
virtual const multivector_t | inv () const=0 |
Geometric multiplicative inverse. More... | |
virtual const multivector_t | pow (int m) const=0 |
*this to the m More... | |
virtual const multivector_t | outer_pow (int m) const=0 |
Outer product power. More... | |
virtual const index_set_t | frame () const=0 |
Subalgebra generated by all generators of terms of given multivector. More... | |
virtual index_t | grade () const=0 |
Maximum of the grades of each term. More... | |
virtual Scalar_T | operator[] (const index_set_t ist) const=0 |
Subscripting: map from index set to scalar coordinate. More... | |
virtual const multivector_t | operator() (index_t grade) const=0 |
Pure grade-vector part. More... | |
virtual Scalar_T | scalar () const=0 |
Scalar part. More... | |
virtual const multivector_t | pure () const=0 |
Pure part. More... | |
virtual const multivector_t | even () const=0 |
Even part of multivector, sum of even grade terms. More... | |
virtual const multivector_t | odd () const=0 |
Odd part of multivector, sum of odd grade terms. More... | |
virtual const vector_t | vector_part () const=0 |
Vector part of multivector, as a vector_t with respect to frame() More... | |
virtual const vector_t | vector_part (const index_set_t frm, const bool prechecked) const=0 |
Vector part of multivector, as a vector_t with respect to frm. More... | |
virtual const multivector_t | involute () const=0 |
Main involution, each {i} is replaced by -{i} in each term, eg. {1} -> -{1}. More... | |
virtual const multivector_t | reverse () const=0 |
Reversion, eg. {1}*{2} -> {2}*{1}. More... | |
virtual const multivector_t | conj () const=0 |
Conjugation, reverse o involute == involute o reverse. More... | |
virtual Scalar_T | quad () const=0 |
Scalar_T quadratic form == (rev(x)*x)(0) More... | |
virtual Scalar_T | norm () const=0 |
Scalar_T norm == sum of norm of coordinates. More... | |
virtual Scalar_T | max_abs () const=0 |
Maximum of absolute values of components of multivector: multivector infinity norm. More... | |
virtual const multivector_t | truncated (const Scalar_T &limit=Scalar_T(DEFAULT_TRUNCATION)) const=0 |
Remove all terms with relative size smaller than limit. More... | |
virtual bool | isnan () const=0 |
Check if a multivector contains any IEEE NaN values. More... | |
virtual void | write (const std::string &msg="") const=0 |
Write formatted multivector to output. More... | |
virtual void | write (std::ofstream &ofile, const std::string &msg="") const=0 |
Write formatted multivector to file. More... | |
Static Public Member Functions | |
static const std::string | classname () |
Class name used in messages. More... | |
static const framed_multi_t | random (const index_set_t frm, Scalar_T fill=Scalar_T(1)) |
Random multivector within a frame. More... | |
![]() | |
static const std::string | classname () |
Private Types | |
typedef class var_term | var_term_t |
typedef matrix_multi_t::matrix_t | matrix_t |
typedef std::map< index_set_t, Scalar_T, std::less< const index_set_t > > | sorted_map_t |
typedef std::unordered_map< index_set_t, Scalar_T, index_set_hash< LO, HI > > | map_t |
typedef std::pair< const multivector_t, const multivector_t > | framed_pair_t |
typedef map_t::size_type | size_type |
typedef map_t::iterator | iterator |
typedef map_t::const_iterator | const_iterator |
Private Member Functions | |
framed_multi (const hash_size_t &hash_size) | |
Private constructor using hash_size. More... | |
multivector_t | fold (const index_set_t frm) const |
Subalgebra isomorphism: fold each term within the given frame. More... | |
multivector_t | unfold (const index_set_t frm) const |
Subalgebra isomorphism: unfold each term within the given frame. More... | |
multivector_t & | centre_pm4_qp4 (index_t &p, index_t &q) |
Subalgebra isomorphism: R_{p,q} to R_{p-4,q+4}. More... | |
multivector_t & | centre_pp4_qm4 (index_t &p, index_t &q) |
Subalgebra isomorphism: R_{p,q} to R_{p+4,q-4}. More... | |
multivector_t & | centre_qp1_pm1 (index_t &p, index_t &q) |
Subalgebra isomorphism: R_{p,q} to R_{q+1,p-1}. More... | |
const framed_pair_t | divide (const index_set_t ist) const |
Divide multivector into part divisible by index_set and remainder. More... | |
const matrix_t | fast (const index_t level, const bool odd) const |
Generalized FFT from framed_multi_t to matrix_t. More... | |
Friends | |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI> | |
class | matrix_multi |
template<typename Other_Scalar_T , const index_t Other_LO, const index_t Other_HI> | |
class | framed_multi |
const framed_multi_t | operator* (const framed_multi_t &lhs, const framed_multi_t &rhs) |
const framed_multi_t | operator^ (const framed_multi_t &lhs, const framed_multi_t &rhs) |
const framed_multi_t | operator & (const framed_multi_t &lhs, const framed_multi_t &rhs) |
const framed_multi_t | operator% (const framed_multi_t &lhs, const framed_multi_t &rhs) |
Scalar_T | star (const framed_multi_t &lhs, const framed_multi_t &rhs) |
const framed_multi_t | operator/ (const framed_multi_t &lhs, const framed_multi_t &rhs) |
const framed_multi_t | operator| (const framed_multi_t &lhs, const framed_multi_t &rhs) |
std::istream & | operator>> (std::istream &s, multivector_t &val) |
std::ostream & | operator<< (std::ostream &os, const multivector_t &val) |
std::ostream & | operator<< (std::ostream &os, const term_t &term) |
const framed_multi_t | exp (const framed_multi_t &val) |
A framed_multi<Scalar_T,LO,HI> is a framed approximation to a multivector.
Definition at line 65 of file framed_multi.h.
|
private |
Definition at line 196 of file framed_multi.h.
typedef error<multivector_t> glucat::framed_multi< Scalar_T, LO, HI >::error_t |
Definition at line 155 of file framed_multi.h.
typedef multivector_t glucat::framed_multi< Scalar_T, LO, HI >::framed_multi_t |
Definition at line 150 of file framed_multi.h.
|
private |
Definition at line 193 of file framed_multi.h.
typedef index_set<LO,HI> glucat::framed_multi< Scalar_T, LO, HI >::index_set_t |
Definition at line 152 of file framed_multi.h.
|
private |
Definition at line 195 of file framed_multi.h.
|
private |
Definition at line 175 of file framed_multi.h.
typedef matrix_multi<Scalar_T,LO,HI> glucat::framed_multi< Scalar_T, LO, HI >::matrix_multi_t |
Definition at line 156 of file framed_multi.h.
|
private |
Definition at line 165 of file framed_multi.h.
typedef framed_multi glucat::framed_multi< Scalar_T, LO, HI >::multivector_t |
Definition at line 149 of file framed_multi.h.
typedef Scalar_T glucat::framed_multi< Scalar_T, LO, HI >::scalar_t |
Definition at line 151 of file framed_multi.h.
|
private |
Definition at line 194 of file framed_multi.h.
|
private |
Definition at line 172 of file framed_multi.h.
typedef std::pair<const index_set_t, Scalar_T> glucat::framed_multi< Scalar_T, LO, HI >::term_t |
Definition at line 153 of file framed_multi.h.
|
private |
Definition at line 164 of file framed_multi.h.
typedef std::vector<Scalar_T> glucat::framed_multi< Scalar_T, LO, HI >::vector_t |
Definition at line 154 of file framed_multi.h.
|
inline |
Destructor.
Definition at line 202 of file framed_multi.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | ) |
Default constructor.
Definition at line 67 of file framed_multi_imp.h.
Referenced by glucat::framed_multi< Scalar_T, LO, HI >::framed_multi().
|
private |
Private constructor using hash_size.
Definition at line 74 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | const framed_multi< Other_Scalar_T, LO, HI > & | val | ) |
Construct a multivector from a multivector with a different scalar type.
Definition at line 82 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | const framed_multi< Other_Scalar_T, LO, HI > & | val, |
const index_set_t | frm, | ||
const bool | prechecked = false |
||
) |
Construct a multivector, within a given frame, from a given multivector.
Definition at line 97 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | const framed_multi_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 112 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 120 of file framed_multi_imp.h.
References PyClical::ist.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 130 of file framed_multi_imp.h.
References PyClical::ist.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 143 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 153 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 163 of file framed_multi_imp.h.
References glucat::index_set< LO, HI >::count(), glucat::index_set< LO, HI >::max(), and glucat::index_set< LO, HI >::min().
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | const std::string & | str | ) |
Construct a multivector from a string: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 186 of file framed_multi_imp.h.
glucat::framed_multi< Scalar_T, LO, HI >::framed_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 202 of file framed_multi_imp.h.
|
inline |
Construct a multivector from a char*: eg: "3+2{1,2}-6.1e-2{2,3}".
Definition at line 238 of file framed_multi.h.
References glucat::framed_multi< Scalar_T, LO, HI >::framed_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 241 of file framed_multi.h.
References glucat::framed_multi< Scalar_T, LO, HI >::framed_multi().
glucat::framed_multi< Scalar_T, LO, HI >::framed_multi | ( | const matrix_multi< Other_Scalar_T, LO, HI > & | val | ) |
Construct a multivector from a matrix_multi_t.
Definition at line 215 of file framed_multi_imp.h.
References _GLUCAT_HASH_SIZE_T, glucat::abs(), glucat::matrix_multi< Scalar_T, LO, HI >::basis_element(), glucat::index_set< LO, HI >::count(), PyClical::e(), glucat::clifford_algebra< Scalar_T, index_set< LO, HI >, matrix_multi< Scalar_T, LO, HI > >::frame(), glucat::tuning< Mult_Matrix_Threshold, Div_Max_Steps, Sqrt_Max_Steps, Log_Max_Outer_Steps, Log_Max_Inner_Steps, Basis_Max_Count, Fast_Size_Threshold, Inv_Fast_Dim_Threshold, Products_Size_Threshold, Function_Precision >::inv_fast_dim_threshold, PyClical::ist, glucat::matrix_multi< Scalar_T, LO, HI >::m_matrix, glucat::matrix::nnz(), and glucat::clifford_algebra< Scalar_T, index_set< LO, HI >, matrix_multi< Scalar_T, LO, HI > >::norm().
|
private |
Subalgebra isomorphism: R_{p,q} to R_{p-4,q+4}.
Definition at line 1655 of file framed_multi_imp.h.
References PyClical::ist.
Referenced by glucat::matrix_multi< Scalar_T, LO, HI >::fast_framed_multi(), and glucat::framed_multi< Scalar_T, LO, HI >::fast_matrix_multi().
|
private |
Subalgebra isomorphism: R_{p,q} to R_{p+4,q-4}.
Definition at line 1700 of file framed_multi_imp.h.
References PyClical::ist.
Referenced by glucat::matrix_multi< Scalar_T, LO, HI >::fast_framed_multi(), and glucat::framed_multi< Scalar_T, LO, HI >::fast_matrix_multi().
|
private |
Subalgebra isomorphism: R_{p,q} to R_{q+1,p-1}.
Definition at line 1745 of file framed_multi_imp.h.
References PyClical::ist.
Referenced by glucat::matrix_multi< Scalar_T, LO, HI >::fast_framed_multi(), and glucat::framed_multi< Scalar_T, LO, HI >::fast_matrix_multi().
|
static |
Class name used in messages.
Definition at line 53 of file framed_multi_imp.h.
|
private |
Divide multivector into part divisible by index_set and remainder.
Divide multivector into quotient with terms divisible by index set, and remainder.
Definition at line 1781 of file framed_multi_imp.h.
References PyClical::ist.
Referenced by glucat::framed_multi< Scalar_T, LO, HI >::fast().
|
private |
Generalized FFT from framed_multi_t to matrix_t.
Definition at line 1800 of file framed_multi_imp.h.
References glucat::framed_multi< Scalar_T, LO, HI >::divide(), glucat::framed_multi< Scalar_T, LO, HI >::fast(), glucat::matrix::kron(), glucat::odd(), and glucat::scalar().
Referenced by glucat::framed_multi< Scalar_T, LO, HI >::fast(), and glucat::framed_multi< Scalar_T, LO, HI >::fast_matrix_multi().
|
inline |
Use inverse generalized FFT to construct a framed_multi_t.
Definition at line 1898 of file framed_multi_imp.h.
const matrix_multi< Other_Scalar_T, LO, HI > glucat::framed_multi< Scalar_T, LO, HI >::fast_matrix_multi | ( | const index_set_t | frm | ) | const |
Use generalized FFT to construct a matrix_multi_t.
Definition at line 1866 of file framed_multi_imp.h.
References glucat::framed_multi< Scalar_T, LO, HI >::centre_pm4_qp4(), glucat::framed_multi< Scalar_T, LO, HI >::centre_pp4_qm4(), glucat::framed_multi< Scalar_T, LO, HI >::centre_qp1_pm1(), glucat::index_set< LO, HI >::count_neg(), glucat::index_set< LO, HI >::count_pos(), glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::even(), glucat::framed_multi< Scalar_T, LO, HI >::fast(), glucat::clifford_algebra< Scalar_T, Index_Set_T, Multivector_T >::odd(), glucat::gen::offset_to_super, and glucat::pos_mod().
|
private |
Subalgebra isomorphism: fold each term within the given frame.
Definition at line 1614 of file framed_multi_imp.h.
References glucat::index_set< LO, HI >::is_contiguous().
unsigned long glucat::framed_multi< Scalar_T, LO, HI >::nbr_terms | ( | ) | const |
Number of terms.
Definition at line 1545 of file framed_multi_imp.h.
|
inline |
Add a term, if non-zero.
Insert a term into a multivector, add terms with same index set.
Geometric sum.
Geometric sum of multivector and scalar.
Definition at line 329 of file framed_multi_imp.h.
|
static |
Random multivector within a frame.
Definition at line 1273 of file framed_multi_imp.h.
References glucat::index_set< LO, HI >::count(), PyClical::fill, and glucat::sqrt().
Referenced by glucat::matrix_multi< Scalar_T, LO, HI >::random().
|
private |
Subalgebra isomorphism: unfold each term within the given frame.
Definition at line 1634 of file framed_multi_imp.h.
References glucat::index_set< LO, HI >::is_contiguous().
Referenced by glucat::matrix_multi< Scalar_T, LO, HI >::fast_framed_multi().
|
friend |
|
friend |
Definition at line 160 of file framed_multi.h.
|
friend |
Definition at line 158 of file framed_multi.h.
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |
|
friend |