g2o
Loading...
Searching...
No Matches
matrix_operations.h
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above copyright
12// notice, this list of conditions and the following disclaimer in the
13// documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef G2O_CORE_MATRIX_OPERATIONS_H
28#define G2O_CORE_MATRIX_OPERATIONS_H
29
30#include <Eigen/Core>
31
33
34namespace g2o {
35namespace internal {
36
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);
42}
43
44template <int t>
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()) +=
49 A *
50 x.segment<Eigen::Matrix<double, Eigen::Dynamic, t>::ColsAtCompileTime>(
51 xoff);
52}
53
54template <>
55inline void axpy<MatrixX>(const MatrixX& A, const Eigen::Map<const VectorX>& x,
56 int xoff, Eigen::Map<VectorX>& y, int yoff) {
57 y.segment(yoff, A.rows()) += A * x.segment(xoff, A.cols());
58}
59
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);
65}
66
67template <int t>
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());
73}
74
75template <>
76inline void atxpy<MatrixX>(const MatrixX& A, const Eigen::Map<const VectorX>& x,
77 int xoff, Eigen::Map<VectorX>& y, int yoff) {
78 y.segment(yoff, A.cols()) += A.transpose() * x.segment(xoff, A.rows());
79}
80
81} // end namespace internal
82} // end namespace g2o
83
84#endif
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
Definition eigen_types.h:74