spectra

Class DenseGenMatProd

Description

This class defines the matrix-vector multiplication operation on a general real matrix $A$, i.e., calculating $y=Ax$ for any vector $x$. It is mainly used in the GenEigsSolver and SymEigsSolver eigen solvers.

Examples

//
//

Methods Summary

DenseGenMatProd Constructor to create the matrix operation object.
rows Return the number of rows of the underlying matrix.
cols Return the number of columns of the underlying matrix.
perform_op Perform the matrix-vector multiplication operation $y=Ax$.

Source

From lines 30-77 in include/MatOp/DenseGenMatProd.h

class DenseGenMatProd
{
private:
    typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> Matrix;
    typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> Vector;
    typedef Eigen::Map<const Matrix> MapMat;
    typedef Eigen::Map< Eigen::Matrix<Scalar, Eigen::Dynamic, 1> > MapVec;

    typedef const Eigen::Ref<const Matrix> ConstGenericMatrix;

    const MapMat m_mat;

public:
    ///
    /// Constructor to create the matrix operation object.
    ///
    /// \param mat_ An **Eigen** matrix object, whose type can be
    /// `Eigen::Matrix<Scalar, ...>` (e.g. `Eigen::MatrixXd` and
    /// `Eigen::MatrixXf`), or its mapped version
    /// (e.g. `Eigen::Map<Eigen::MatrixXd>`).
    ///
    DenseGenMatProd(ConstGenericMatrix& mat_) :
        m_mat(mat_.data(), mat_.rows(), mat_.cols())
    {}

    ///
    /// Return the number of rows of the underlying matrix.
    ///
    int rows() const { return m_mat.rows(); }
    ///
    /// Return the number of columns of the underlying matrix.
    ///
    int cols() const { return m_mat.cols(); }

    ///
    /// Perform the matrix-vector multiplication operation \f$y=Ax\f$.
    ///
    /// \param x_in  Pointer to the \f$x\f$ vector.
    /// \param y_out Pointer to the \f$y\f$ vector.
    ///
    // y_out = A * x_in
    void perform_op(Scalar* x_in, Scalar* y_out) const
    {
        MapVec x(x_in, m_mat.cols());
        MapVec y(y_out, m_mat.rows());
        y.noalias() = m_mat * x;
    }
};


Discussions

There are 0 discussions relevant for this page, and 0 discussions in the whole project.




Add Discussion

Log in to comment