# 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.