SOPT
Sparse OPTimisation
Public Types | Public Member Functions | List of all members
sopt::LinearTransform< VECTOR > Class Template Reference

Joins together direct and indirect operators. More...

#include <linear_transform.h>

+ Inheritance diagram for sopt::LinearTransform< VECTOR >:
+ Collaboration diagram for sopt::LinearTransform< VECTOR >:

Public Types

using t_Function = OperatorFunction< VECTOR >
 Type of the wrapped functions. More...
 
- Public Types inherited from sopt::details::WrapFunction< VECTOR >
using t_Function = OperatorFunction< VECTOR >
 Type of function wrapped here. More...
 

Public Member Functions

 LinearTransform (t_Function const &direct, t_Function const &indirect, std::array< t_int, 3 > sizes={{1, 1, 0}})
 
 LinearTransform (t_Function const &direct, std::array< t_int, 3 > dsizes, t_Function const &indirect, std::array< t_int, 3 > isizes)
 
 LinearTransform (details::WrapFunction< VECTOR > const &direct, details::WrapFunction< VECTOR > const &indirect)
 
 LinearTransform (LinearTransform const &c)
 
 LinearTransform (LinearTransform &&c)
 
void operator= (LinearTransform const &c)
 
void operator= (LinearTransform &&c)
 
LinearTransform< VECTOR > adjoint () const
 Indirect transform. More...
 
void set_norm (t_real n)
 
sopt::t_real norm () const
 
sopt::t_real sq_norm () const
 
- Public Member Functions inherited from sopt::details::WrapFunction< VECTOR >
 WrapFunction (t_Function const &func, std::array< t_int, 3 > sizes={{1, 1, 0}})
 
 WrapFunction (WrapFunction const &c)
 
 WrapFunction (WrapFunction const &&c)
 
void operator= (WrapFunction const &c)
 
void operator= (WrapFunction &&c)
 
template<typename T0 >
AppliedFunction< t_Function const &, Eigen::ArrayBase< T0 > > operator() (Eigen::ArrayBase< T0 > const &x) const
 Function application form. More...
 
template<typename T0 >
AppliedFunction< t_Function const &, Eigen::ArrayBase< T0 > > operator* (Eigen::ArrayBase< T0 > const &x) const
 Multiplication application form. More...
 
template<typename T0 >
AppliedFunction< t_Function const &, Eigen::MatrixBase< T0 > > operator() (Eigen::MatrixBase< T0 > const &x) const
 Function application form. More...
 
template<typename T0 >
AppliedFunction< t_Function const &, Eigen::MatrixBase< T0 > > operator* (Eigen::MatrixBase< T0 > const &x) const
 Multiplication application form. More...
 
std::array< t_int, 3 > const & sizes () const
 Defines relation-ship between input and output sizes. More...
 
template<typename T >
std::enable_if< std::is_integral< T >::value, T >::type rows (T xsize) const
 Output vector size for a input with xsize elements. More...
 

Detailed Description

template<typename VECTOR>
class sopt::LinearTransform< VECTOR >

Joins together direct and indirect operators.

Definition at line 30 of file linear_transform.h.

Member Typedef Documentation

◆ t_Function

template<typename VECTOR >
using sopt::LinearTransform< VECTOR >::t_Function = OperatorFunction<VECTOR>

Type of the wrapped functions.

Definition at line 33 of file linear_transform.h.

Constructor & Destructor Documentation

◆ LinearTransform() [1/5]

template<typename VECTOR >
sopt::LinearTransform< VECTOR >::LinearTransform ( t_Function const &  direct,
t_Function const &  indirect,
std::array< t_int, 3 >  sizes = {{1, 1, 0}} 
)
inline

Constructor

Parameters
[in]directfunction with signature void(VECTOR&, VECTOR const&) which applies a linear operator to a vector.
[in]indirectfunction with signature void(VECTOR&, VECTOR const&) which applies a the conjugate transpose linear operator to a vector.
[in]sizes3 integer elements (a, b, c) such that if the input to linear operator is of size N, then the output is of size (a * N) / b + c. A similar quantity is deduced for the indirect operator.

Definition at line 43 of file linear_transform.h.

44  {{1, 1, 0}})
46  direct, sizes, indirect,
47  {{sizes[1], sizes[0], sizes[0] == 0 ? 0 : -(sizes[2] * sizes[1]) / sizes[0]}}) {
48  assert(sizes[0] != 0);
49  }
LinearTransform(t_Function const &direct, t_Function const &indirect, std::array< t_int, 3 > sizes={{1, 1, 0}})
std::array< t_int, 3 > const & sizes() const
Defines relation-ship between input and output sizes.
Definition: wrapper.h:106

◆ LinearTransform() [2/5]

template<typename VECTOR >
sopt::LinearTransform< VECTOR >::LinearTransform ( t_Function const &  direct,
std::array< t_int, 3 >  dsizes,
t_Function const &  indirect,
std::array< t_int, 3 >  isizes 
)
inline

Constructor

Parameters
[in]directfunction with signature void(VECTOR&, VECTOR const&) which applies a linear operator to a vector.
[in]dsizes3 integer elements (a, b, c) such that if the input to the linear operator is of size N, then the output is of size (a * N) / b + c.
[in]indirectfunction with signature void(VECTOR&, VECTOR const&) which applies a the conjugate transpose linear operator to a vector.
[in]dsizes3 integer elements (a, b, c) such that if the input to the indirect linear operator is of size N, then the output is of size (a * N) / b + c.

Definition at line 59 of file linear_transform.h.

61  : LinearTransform(details::wrap(direct, dsizes), details::wrap(indirect, isizes)) {}
WrapFunction< VECTOR > wrap(OperatorFunction< VECTOR > const &func, std::array< t_int, 3 > sizes={{1, 1, 0}})
Helper function to wrap functor into expression-able object.
Definition: wrapper.h:131

◆ LinearTransform() [3/5]

template<typename VECTOR >
sopt::LinearTransform< VECTOR >::LinearTransform ( details::WrapFunction< VECTOR > const &  direct,
details::WrapFunction< VECTOR > const &  indirect 
)
inline

Definition at line 62 of file linear_transform.h.

64  : details::WrapFunction<VECTOR>(direct), indirect_(indirect) {}

◆ LinearTransform() [4/5]

template<typename VECTOR >
sopt::LinearTransform< VECTOR >::LinearTransform ( LinearTransform< VECTOR > const &  c)
inline

Definition at line 65 of file linear_transform.h.

66  : details::WrapFunction<VECTOR>(c), indirect_(c.indirect_), norm_(c.norm_), sq_norm_(c.sq_norm_) {}

◆ LinearTransform() [5/5]

template<typename VECTOR >
sopt::LinearTransform< VECTOR >::LinearTransform ( LinearTransform< VECTOR > &&  c)
inline

Definition at line 67 of file linear_transform.h.

68  : details::WrapFunction<VECTOR>(std::move(c)), indirect_(std::move(c.indirect_)), norm_(c.norm_), sq_norm_(c.sq_norm_) {}

Member Function Documentation

◆ adjoint()

template<typename VECTOR >
LinearTransform<VECTOR> sopt::LinearTransform< VECTOR >::adjoint ( ) const
inline

◆ norm()

template<typename VECTOR >
sopt::t_real sopt::LinearTransform< VECTOR >::norm ( ) const
inline

Definition at line 97 of file linear_transform.h.

98  {
99  return norm_;
100  }

◆ operator=() [1/2]

template<typename VECTOR >
void sopt::LinearTransform< VECTOR >::operator= ( LinearTransform< VECTOR > &&  c)
inline

Definition at line 75 of file linear_transform.h.

75  {
77  indirect_ = std::move(c.indirect_);
78  norm_ = c.norm_;
79  sq_norm_ = c.sq_norm_;
80  }
void operator=(WrapFunction const &c)
Definition: wrapper.h:63

References sopt::details::WrapFunction< VECTOR >::operator=().

◆ operator=() [2/2]

template<typename VECTOR >
void sopt::LinearTransform< VECTOR >::operator= ( LinearTransform< VECTOR > const &  c)
inline

Definition at line 69 of file linear_transform.h.

69  {
71  indirect_ = c.indirect_;
72  norm_ = c.norm_;
73  sq_norm_ = c.sq_norm_;
74  }

References sopt::details::WrapFunction< VECTOR >::operator=().

◆ set_norm()

template<typename VECTOR >
void sopt::LinearTransform< VECTOR >::set_norm ( t_real  n)
inline

Definition at line 91 of file linear_transform.h.

92  {
93  norm_ = n;
94  sq_norm_ = n*n;
95  }
constexpr auto n
Definition: wavelets.cc:56

References n.

◆ sq_norm()

template<typename VECTOR >
sopt::t_real sopt::LinearTransform< VECTOR >::sq_norm ( ) const
inline

Definition at line 102 of file linear_transform.h.

103  {
104  return sq_norm_;
105  }

Referenced by sopt::algorithm::ProximalADMM< SCALAR >::initial_guess(), and sopt::algorithm::PrimalDual< SCALAR >::initial_guess().


The documentation for this class was generated from the following file: