1#ifndef IRLBA_MATRIX_CENTERED_HPP 
    2#define IRLBA_MATRIX_CENTERED_HPP 
   27template<
class EigenVector_, 
class Matrix_, 
class Center_>
 
   34        my_work(matrix.new_known_workspace()),
 
   42    I<decltype(std::declval<Matrix_>().new_known_workspace())> my_work;
 
   43    const Center_& my_center;
 
   46    void multiply(
const EigenVector_& right, EigenVector_& out) {
 
   47        my_work->multiply(right, out);
 
   48        const auto beta = right.dot(my_center);
 
 
 
   64template<
class EigenVector_, 
class Matrix_, 
class Center_>
 
   71        my_work(matrix.new_known_adjoint_workspace()),
 
   79    I<decltype(std::declval<Matrix_>().new_known_adjoint_workspace())> my_work;
 
   80    const Center_& my_center;
 
   83    void multiply(
const EigenVector_& right, EigenVector_& out) {
 
   84        my_work->multiply(right, out);
 
   85        const auto beta = right.sum();
 
   86        out -= beta * my_center;
 
 
 
   99template<
class EigenMatrix_, 
class Matrix_, 
class Center_>
 
  106        my_work(matrix.new_known_realize_workspace()),
 
  114    I<decltype(std::declval<Matrix_>().new_known_realize_workspace())> my_work;
 
  115    const Center_& my_center;
 
  118    const EigenMatrix_& 
realize(EigenMatrix_& buffer) {
 
  119        my_work->realize_copy(buffer);
 
  120        buffer.array().rowwise() -= my_center.adjoint().array();
 
 
 
  142    class MatrixPointer_ = 
const Matrix<EigenVector_, EigenMatrix_>*,
 
  143    class CenterPointer_ = 
const EigenVector_* 
 
  153        my_matrix(std::move(matrix)),
 
  154        my_center(std::move(center))
 
 
  158    MatrixPointer_ my_matrix;
 
  159    CenterPointer_ my_center;
 
  163        return my_matrix->rows();
 
 
  167        return my_matrix->cols();
 
 
  188        return std::make_unique<
CenteredWorkspace<EigenVector_, I<
decltype(*my_matrix)>, I<
decltype(*my_center)> > >(*my_matrix, *my_center);
 
 
  195        return std::make_unique<
CenteredAdjointWorkspace<EigenVector_, I<
decltype(*my_matrix)>, I<
decltype(*my_center)> > >(*my_matrix, *my_center);
 
 
  202        return std::make_unique<
CenteredRealizeWorkspace<EigenMatrix_, I<
decltype(*my_matrix)>, I<
decltype(*my_center)> > >(*my_matrix, *my_center);
 
 
 
Workspace class for multiplying a transposed Matrix.
Definition interface.hpp:61
 
Workspace class for multiplying a transposed CenteredMatrix.
Definition centered.hpp:65
 
void multiply(const EigenVector_ &right, EigenVector_ &out)
Definition centered.hpp:83
 
Deferred centering of a matrix.
Definition centered.hpp:145
 
std::unique_ptr< CenteredWorkspace< EigenVector_, I< decltype(*my_matrix)>, I< decltype(*my_center)> > > new_known_workspace() const
Definition centered.hpp:187
 
Eigen::Index cols() const
Definition centered.hpp:166
 
Eigen::Index rows() const
Definition centered.hpp:162
 
std::unique_ptr< Workspace< EigenVector_ > > new_workspace() const
Definition centered.hpp:171
 
std::unique_ptr< CenteredRealizeWorkspace< EigenMatrix_, I< decltype(*my_matrix)>, I< decltype(*my_center)> > > new_known_realize_workspace() const
Definition centered.hpp:201
 
CenteredMatrix(MatrixPointer_ matrix, CenterPointer_ center)
Definition centered.hpp:152
 
std::unique_ptr< CenteredAdjointWorkspace< EigenVector_, I< decltype(*my_matrix)>, I< decltype(*my_center)> > > new_known_adjoint_workspace() const
Definition centered.hpp:194
 
std::unique_ptr< RealizeWorkspace< EigenMatrix_ > > new_realize_workspace() const
Definition centered.hpp:179
 
std::unique_ptr< AdjointWorkspace< EigenVector_ > > new_adjoint_workspace() const
Definition centered.hpp:175
 
Workspace class for realizing a CenteredMatrix.
Definition centered.hpp:100
 
const EigenMatrix_ & realize(EigenMatrix_ &buffer)
Definition centered.hpp:118
 
Workspace class for multiplying a CenteredMatrix.
Definition centered.hpp:28
 
void multiply(const EigenVector_ &right, EigenVector_ &out)
Definition centered.hpp:46
 
Interface for a matrix to use in compute().
Definition interface.hpp:142
 
Workspace class for realizing a Matrix.
Definition interface.hpp:99
 
Workspace class for multiplying a Matrix.
Definition interface.hpp:24
 
Interfaces for matrix inputs.
 
Implements IRLBA for approximate SVD.
Definition compute.hpp:22