glucat 0.12.0
matrix_multi_imp.h File Reference
#include "glucat/matrix_multi.h"
#include "glucat/scalar.h"
#include "glucat/generation.h"
#include "glucat/matrix.h"
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_expression.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/operation.hpp>
#include <boost/numeric/ublas/operation_sparse.hpp>
#include <boost/numeric/ublas/triangular.hpp>
#include <boost/numeric/ublas/lu.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <fstream>
#include <iomanip>
#include <array>
#include <iostream>
Include dependency graph for matrix_multi_imp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  glucat::basis_table< Scalar_T, LO, HI, Matrix_T >
 Table of basis elements used as a cache by basis_element() More...
 
struct  pade::pade_sqrt_numer< Scalar_T >
 Coefficients of numerator polynomials of Pade approximations produced by Pade1(sqrt(1+x),x,n,n) More...
 
struct  pade::pade_sqrt_denom< Scalar_T >
 Coefficients of denominator polynomials of Pade approximations produced by Pade1(sqrt(1+x),x,n,n) More...
 
struct  pade::pade_sqrt_numer< float >
 
struct  pade::pade_sqrt_denom< float >
 
struct  pade::pade_sqrt_numer< long double >
 
struct  pade::pade_sqrt_denom< long double >
 
struct  pade::pade_sqrt_numer< dd_real >
 
struct  pade::pade_sqrt_denom< dd_real >
 
struct  pade::pade_sqrt_numer< qd_real >
 
struct  pade::pade_sqrt_denom< qd_real >
 
struct  pade::pade_log_numer< Scalar_T >
 Coefficients of numerator polynomials of Pade approximations produced by Pade1(log(1+x),x,n,n) More...
 
struct  pade::pade_log_denom< Scalar_T >
 Coefficients of denominator polynomials of Pade approximations produced by Pade1(log(1+x),x,n,n) More...
 
struct  pade::pade_log_numer< float >
 
struct  pade::pade_log_denom< float >
 
struct  pade::pade_log_numer< long double >
 
struct  pade::pade_log_denom< long double >
 
struct  pade::pade_log_numer< dd_real >
 
struct  pade::pade_log_denom< dd_real >
 
struct  pade::pade_log_numer< qd_real >
 
struct  pade::pade_log_denom< qd_real >
 

Namespaces

namespace  glucat
 
namespace  pade
 

Functions

auto glucat::offset_level (const index_t p, const index_t q) -> index_t
 Determine the log2 dim corresponding to signature p, q.
 
template<typename Matrix_Index_T, const index_t LO, const index_t HI>
static auto glucat::folded_dim (const index_set< LO, HI > &sub) -> Matrix_Index_T
 Determine the matrix dimension of the fold of a subalegbra.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::reframe (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs, matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs_reframed, matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs_reframed) -> const index_set< LO, HI >
 Find a common frame for operands of a binary operator.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator* (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Geometric product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator^ (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Outer product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator& (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Inner product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator% (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Left contraction.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::star (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> Scalar_T
 Hestenes scalar product.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator/ (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Geometric quotient.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator| (const matrix_multi< Scalar_T, LO, HI, Tune_P > &lhs, const matrix_multi< Scalar_T, LO, HI, Tune_P > &rhs) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Transformation via twisted adjoint action.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator<< (std::ostream &os, const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::ostream &
 Write multivector to output.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::operator>> (std::istream &s, matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> std::istream &
 Read multivector from input.
 
template<typename Multivector_T, typename Matrix_T, typename Basis_Matrix_T>
static auto glucat::fast (const Matrix_T &X, index_t level) -> Multivector_T
 Inverse generalized Fast Fourier Transform.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P, const size_t Size>
static auto glucat::pade_approx (const std::array< Scalar_T, Size > &numer, const std::array< Scalar_T, Size > &denom, const matrix_multi< Scalar_T, LO, HI, Tune_P > &X) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Pade' approximation.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static void glucat::db_step (matrix_multi< Scalar_T, LO, HI, Tune_P > &M, matrix_multi< Scalar_T, LO, HI, Tune_P > &Y)
 Single step of product form of Denman-Beavers square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::db_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, Scalar_T norm_tol=std::pow(std::numeric_limits< Scalar_T >::epsilon(), 4)) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Product form of Denman-Beavers square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::cr_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, Scalar_T norm_Y_tol=std::pow(std::numeric_limits< Scalar_T >::epsilon(), 1)) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Cyclic reduction square root iteration.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::matrix_sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, const index_t level) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::sqrt (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Square root of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::pade_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Pade' approximation of log.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
static auto glucat::cascade_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Incomplete square root cascade and Pade' approximation of log.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::matrix_log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, const index_t level) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::log (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val, const matrix_multi< Scalar_T, LO, HI, Tune_P > &i, bool prechecked) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Natural logarithm of multivector with specified complexifier.
 
template<typename Scalar_T, const index_t LO, const index_t HI, typename Tune_P>
auto glucat::exp (const matrix_multi< Scalar_T, LO, HI, Tune_P > &val) -> const matrix_multi< Scalar_T, LO, HI, Tune_P >
 Exponential of multivector.
 

Variables

template<typename Scalar_T>
const pade_sqrt_numer< Scalar_T >::array pade::pade_sqrt_numer< Scalar_T >::numer
 
template<typename Scalar_T>
const pade_sqrt_denom< Scalar_T >::array pade::pade_sqrt_denom< Scalar_T >::denom
 
const pade_sqrt_numer< float >::array pade::pade_sqrt_numer< float >::numer
 
const pade_sqrt_denom< float >::array pade::pade_sqrt_denom< float >::denom
 
const pade_sqrt_numer< longdouble >::array pade::pade_sqrt_numer< longdouble >::numer
 
const pade_sqrt_denom< longdouble >::array pade::pade_sqrt_denom< longdouble >::denom
 
const pade_sqrt_numer< dd_real >::array pade::pade_sqrt_numer< dd_real >::numer
 
const pade_sqrt_denom< dd_real >::array pade::pade_sqrt_denom< dd_real >::denom
 
const pade_sqrt_numer< qd_real >::array pade::pade_sqrt_numer< qd_real >::numer
 
const pade_sqrt_denom< qd_real >::array pade::pade_sqrt_denom< qd_real >::denom
 
template<typename Scalar_T>
const pade_log_numer< Scalar_T >::array pade::pade_log_numer< Scalar_T >::numer
 
template<typename Scalar_T>
const pade_log_denom< Scalar_T >::array pade::pade_log_denom< Scalar_T >::denom
 
const pade_log_numer< float >::array pade::pade_log_numer< float >::numer
 
const pade_log_denom< float >::array pade::pade_log_denom< float >::denom
 
const pade_log_numer< longdouble >::array pade::pade_log_numer< longdouble >::numer
 
const pade_log_denom< longdouble >::array pade::pade_log_denom< longdouble >::denom
 
const pade_log_numer< dd_real >::array pade::pade_log_numer< dd_real >::numer
 
const pade_log_denom< dd_real >::array pade::pade_log_denom< dd_real >::denom
 
const pade_log_numer< qd_real >::array pade::pade_log_numer< qd_real >::numer
 
const pade_log_denom< qd_real >::array pade::pade_log_denom< qd_real >::denom