NDEVR
API Documentation
marginal_covariance_cholesky.h
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_MARGINAL_COVARIANCE_CHOLESKY_H
28#define G2O_MARGINAL_COVARIANCE_CHOLESKY_H
29
30#include "optimizable_graph.h"
31#include "sparse_block_matrix.h"
32
33#include <cassert>
34#include "Base/Headers/Buffer.hpp"
35#include <unordered_map>
36
37
38namespace NDEVR {
39
43 class MarginalCovarianceCholesky {
44 protected:
49
50 public:
51 MarginalCovarianceCholesky();
52
57 void computeCovariance(g_type** covBlocks, const Buffer<int>& blockIndices);
58
59
63 void computeCovariance(SparseBlockMatrix<MatrixX<g_type>>& spinv, const Buffer<int>& rowBlockIndices, const Buffer< std::pair<int, int> >& blockIndices);
64
65
73 void setCholeskyFactor(int n, int* Lp, int* Li, g_type* Lx, int* permInv);
74
75 protected:
76 // information about the cholesky factor (lower triangle)
77 int _n;
78 int* _Ap;
79 int* _Ai;
80 g_type* _Ax;
81 int* _perm;
82
85
87 int computeIndex(int r, int c) const { /*assert(r <= c);*/ return r*_n + c;}
92 g_type computeEntry(int r, int c);
93 };
94
95}
96
97#endif
The equivelent of std::vector but with a bit more control.
Definition Buffer.hpp:58
A hash-based key-value store, useful for quick associative lookups.
Definition Dictionary.h:64
void computeCovariance(g_type **covBlocks, const Buffer< int > &blockIndices)
compute the marginal cov for the given block indices, write the result to the covBlocks memory (which...
int * _Ap
column pointer of the CCS storage
g_type computeEntry(int r, int c)
compute one entry in the covariance, r and c are values after applying the permutation,...
g_type * _Ax
values of the cholesky factor
void setCholeskyFactor(int n, int *Lp, int *Li, g_type *Lx, int *permInv)
set the CCS representation of the cholesky factor along with the inverse permutation used to reduce t...
Buffer< g_type > _diag
cache 1 / H_ii to avoid recalculations
int computeIndex(int r, int c) const
compute the index used for hashing
int * _perm
permutation of the cholesky factor. Variable re-ordering for better fill-in
int * _Ai
row indices of the CCS storage
Dictionary< int, g_type > LookupMap
hash struct for storing the matrix elements needed to compute the covariance
void computeCovariance(SparseBlockMatrix< MatrixX< g_type > > &spinv, const Buffer< int > &rowBlockIndices, const Buffer< std::pair< int, int > > &blockIndices)
compute the marginal cov for the given block indices, write the result in spinv).
LookupMap _map
hash look up table for the already computed entries
Sparse matrix which uses blocks.
The primary namespace for the NDEVR SDK.