27#ifndef G2O_CORE_MATRIX_OPERATIONS_H
28#define G2O_CORE_MATRIX_OPERATIONS_H
37template <
typename MatrixType>
38inline void axpy(
const MatrixType& A,
const Eigen::Map<const VectorX>& x,
39 int xoff, Eigen::Map<VectorX>& y,
int yoff) {
40 y.segment<MatrixType::RowsAtCompileTime>(yoff) +=
41 A * x.segment<MatrixType::ColsAtCompileTime>(xoff);
45inline void axpy(
const Eigen::Matrix<double, Eigen::Dynamic, t>& A,
46 const Eigen::Map<const VectorX>& x,
int xoff,
47 Eigen::Map<VectorX>& y,
int yoff) {
48 y.segment(yoff, A.rows()) +=
50 x.segment<Eigen::Matrix<double, Eigen::Dynamic, t>::ColsAtCompileTime>(
56 int xoff, Eigen::Map<VectorX>& y,
int yoff) {
57 y.segment(yoff, A.rows()) += A * x.segment(xoff, A.cols());
60template <
typename MatrixType>
61inline void atxpy(
const MatrixType& A,
const Eigen::Map<const VectorX>& x,
62 int xoff, Eigen::Map<VectorX>& y,
int yoff) {
63 y.segment<MatrixType::ColsAtCompileTime>(yoff) +=
64 A.transpose() * x.segment<MatrixType::RowsAtCompileTime>(xoff);
68inline void atxpy(
const Eigen::Matrix<double, Eigen::Dynamic, t>& A,
69 const Eigen::Map<const VectorX>& x,
int xoff,
70 Eigen::Map<VectorX>& y,
int yoff) {
71 y.segment<Eigen::Matrix<double, Eigen::Dynamic, t>::ColsAtCompileTime>(
72 yoff) += A.transpose() * x.segment(xoff, A.rows());
77 int xoff, Eigen::Map<VectorX>& y,
int yoff) {
78 y.segment(yoff, A.cols()) += A.transpose() * x.segment(xoff, A.rows());
void atxpy(const MatrixType &A, const Eigen::Map< const VectorX > &x, int xoff, Eigen::Map< VectorX > &y, int yoff)
void axpy(const MatrixType &A, const Eigen::Map< const VectorX > &x, int xoff, Eigen::Map< VectorX > &y, int yoff)
void axpy< MatrixX >(const MatrixX &A, const Eigen::Map< const VectorX > &x, int xoff, Eigen::Map< VectorX > &y, int yoff)
void atxpy< MatrixX >(const MatrixX &A, const Eigen::Map< const VectorX > &x, int xoff, Eigen::Map< VectorX > &y, int yoff)
MatrixN< Eigen::Dynamic > MatrixX