gtsam  3.2.1
gtsam
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Vector.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
19 // \callgraph
20 
21 #pragma once
22 
23 #include <list>
24 #include <vector>
25 #include <iostream>
26 #include <gtsam/global_includes.h>
27 #include <gtsam/3rdparty/gtsam_eigen_includes.h>
28 
29 namespace gtsam {
30 
31 // Vector is just a typedef of the Eigen dynamic vector type
32 
33 // Typedef arbitary length vector
34 typedef Eigen::VectorXd Vector;
35 
36 // Commonly used fixed size vectors
37 typedef Eigen::Vector2d Vector2;
38 typedef Eigen::Vector3d Vector3;
39 typedef Eigen::Matrix<double, 6, 1> Vector6;
40 
41 typedef Eigen::VectorBlock<Vector> SubVector;
42 typedef Eigen::VectorBlock<const Vector> ConstSubVector;
43 
49 GTSAM_EXPORT Vector repeat(size_t n, double value);
50 
59 GTSAM_EXPORT Vector delta(size_t n, size_t i, double value);
60 
68 inline Vector basis(size_t n, size_t i) { return delta(n, i, 1.0); }
69 
74 inline Vector zero(size_t n) { return Vector::Zero(n);}
75 
80 inline Vector ones(size_t n) { return Vector::Ones(n); }
81 
85 GTSAM_EXPORT bool zero(const Vector& v);
86 
90 inline size_t dim(const Vector& v) { return v.size(); }
91 
95 GTSAM_EXPORT void print(const Vector& v, const std::string& s = "", std::ostream& stream = std::cout);
96 
100 GTSAM_EXPORT void save(const Vector& A, const std::string &s, const std::string& filename);
101 
105 GTSAM_EXPORT bool operator==(const Vector& vec1,const Vector& vec2);
106 
112 GTSAM_EXPORT bool greaterThanOrEqual(const Vector& v1, const Vector& v2);
113 
117 GTSAM_EXPORT bool equal_with_abs_tol(const Vector& vec1, const Vector& vec2, double tol=1e-9);
118 GTSAM_EXPORT bool equal_with_abs_tol(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
119 
123 inline bool equal(const Vector& vec1, const Vector& vec2, double tol) {
124  return equal_with_abs_tol(vec1, vec2, tol);
125 }
126 
130 inline bool equal(const Vector& vec1, const Vector& vec2) {
131  return equal_with_abs_tol(vec1, vec2);
132 }
133 
141 GTSAM_EXPORT bool assert_equal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
142 
150 GTSAM_EXPORT bool assert_inequal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
151 
159 GTSAM_EXPORT bool assert_equal(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
160 GTSAM_EXPORT bool assert_equal(const ConstSubVector& vec1, const ConstSubVector& vec2, double tol=1e-9);
161 
169 GTSAM_EXPORT bool linear_dependent(const Vector& vec1, const Vector& vec2, double tol=1e-9);
170 
178 GTSAM_EXPORT ConstSubVector sub(const Vector &v, size_t i1, size_t i2);
179 
186 GTSAM_EXPORT void subInsert(Vector& fullVector, const Vector& subVector, size_t i);
187 
194 GTSAM_EXPORT Vector emul(const Vector &a, const Vector &b);
195 
202 GTSAM_EXPORT Vector ediv(const Vector &a, const Vector &b);
203 
210 GTSAM_EXPORT Vector ediv_(const Vector &a, const Vector &b);
211 
217 GTSAM_EXPORT double sum(const Vector &a);
218 
225 GTSAM_EXPORT double norm_2(const Vector& v);
226 
232 GTSAM_EXPORT Vector reciprocal(const Vector &a);
233 
239 GTSAM_EXPORT Vector esqrt(const Vector& v);
240 
246 GTSAM_EXPORT Vector abs(const Vector& v);
247 
253 GTSAM_EXPORT double max(const Vector &a);
254 
258 template<class V1, class V2>
259 inline double dot(const V1 &a, const V2& b) {
260  assert (b.size()==a.size());
261  return a.dot(b);
262 }
263 
265 template<class V1, class V2>
266 inline double inner_prod(const V1 &a, const V2& b) {
267  assert (b.size()==a.size());
268  return a.dot(b);
269 }
270 
275 inline void scal(double alpha, Vector& x) { x *= alpha; }
276 
281 template<class V1, class V2>
282 inline void axpy(double alpha, const V1& x, V2& y) {
283  assert (y.size()==x.size());
284  y += alpha * x;
285 }
286 inline void axpy(double alpha, const Vector& x, SubVector y) {
287  assert (y.size()==x.size());
288  y += alpha * x;
289 }
290 
296 GTSAM_EXPORT std::pair<double,Vector> house(const Vector &x);
297 
299 GTSAM_EXPORT double houseInPlace(Vector &x);
300 
311 GTSAM_EXPORT std::pair<Vector, double>
312 weightedPseudoinverse(const Vector& v, const Vector& weights);
313 
314 /*
315  * Fast version *no error checking* !
316  * Pass in initialized vector pseudo of size(weights) or will crash !
317  * @return the precision, pseudoinverse in third argument
318  */
319 GTSAM_EXPORT double weightedPseudoinverse(const Vector& a, const Vector& weights, Vector& pseudo);
320 
324 GTSAM_EXPORT Vector concatVectors(const std::list<Vector>& vs);
325 
329 GTSAM_EXPORT Vector concatVectors(size_t nrVectors, ...);
330 
331 } // namespace gtsam
332 
333 #include <boost/serialization/nvp.hpp>
334 #include <boost/serialization/array.hpp>
335 #include <boost/serialization/split_free.hpp>
336 
337 namespace boost {
338  namespace serialization {
339 
340  // split version - copies into an STL vector for serialization
341  template<class Archive>
342  void save(Archive & ar, const gtsam::Vector & v, unsigned int version) {
343  const size_t size = v.size();
344  ar << BOOST_SERIALIZATION_NVP(size);
345  ar << make_nvp("data", make_array(v.data(), v.size()));
346  }
347 
348  template<class Archive>
349  void load(Archive & ar, gtsam::Vector & v, unsigned int version) {
350  size_t size;
351  ar >> BOOST_SERIALIZATION_NVP(size);
352  v.resize(size);
353  ar >> make_nvp("data", make_array(v.data(), v.size()));
354  }
355 
356  // split version - copies into an STL vector for serialization
357  template<class Archive, int D>
358  void save(Archive & ar, const Eigen::Matrix<double,D,1> & v, unsigned int version) {
359  ar << make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
360  }
361 
362  template<class Archive, int D>
363  void load(Archive & ar, Eigen::Matrix<double,D,1> & v, unsigned int version) {
364  ar >> make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
365  }
366 
367  } // namespace serialization
368 } // namespace boost
369 
370 BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector)
371 BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2)
372 BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3)
373 BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6)
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition: Matrix.cpp:80
double dot(const V1 &a, const V2 &b)
Dot product.
Definition: Vector.h:259
Vector reciprocal(const Vector &a)
Elementwise reciprocal of vector elements.
Definition: Vector.cpp:219
double houseInPlace(Vector &v)
beta = house(x) computes the HouseHolder vector in place
Definition: Vector.cpp:244
double inner_prod(const V1 &a, const V2 &b)
compatibility version for ublas' inner_prod()
Definition: Vector.h:266
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition: Matrix.cpp:202
Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t j1, size_t j2)
extract submatrix, slice semantics, i.e.
Definition: Matrix.h:205
Vector abs(const Vector &v)
Absolute values of vector elements.
Definition: Vector.cpp:233
void axpy(double alpha, const V1 &x, V2 &y)
BLAS Level 1 axpy: y <- alpha*x + y.
Definition: Vector.h:282
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear dependent
Definition: Matrix.cpp:134
pair< double, Vector > house(const Vector &x)
house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding ...
Definition: Vector.cpp:269
Vector concatVectors(const std::list< Vector > &vs)
concatenate Vectors
Definition: Vector.cpp:330
Included from all GTSAM files.
Vector esqrt(const Vector &v)
Elementwise sqrt of vector elements.
Definition: Vector.cpp:228
size_t dim(const Vector &v)
dimensionality == size
Definition: Vector.h:90
Vector ediv(const Vector &a, const Vector &b)
elementwise division
Definition: Vector.cpp:191
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition: Matrix.h:104
bool zero(const Vector &v)
check if all zero
Definition: Vector.cpp:39
double sum(const Vector &a)
sum vector elements
Definition: Vector.cpp:209
void print(const Matrix &A, const string &s, ostream &stream)
print a matrix
Definition: Matrix.cpp:183
void subInsert(Vector &fullVector, const Vector &subVector, size_t i)
Inserts a subvector into a vector IN PLACE.
Definition: Vector.cpp:180
double max(const Vector &a)
Return the max element of a vector.
Definition: Vector.cpp:238
Vector ediv_(const Vector &a, const Vector &b)
elementwise division, but 0/0 = 0, not inf
Definition: Vector.cpp:197
double norm_2(const Vector &v)
Calculates L2 norm for a vector modeled after boost.ublas for compatibility.
Definition: Vector.cpp:214
bool greaterThanOrEqual(const Vector &vec1, const Vector &vec2)
Greater than or equal to operation returns true if all elements in v1 are greater than corresponding ...
Definition: Vector.cpp:86
void scal(double alpha, Vector &x)
BLAS Level 1 scal: x <- alpha*x.
Definition: Vector.h:275
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition: Matrix.cpp:60
Matrix ones(size_t m, size_t n)
Creates an ones matrix, with matlab-like syntax.
Definition: Matrix.cpp:45
Vector basis(size_t n, size_t i)
Create basis vector of dimension n, with one in spot i.
Definition: Vector.h:68
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition: Testable.h:75
Vector emul(const Vector &a, const Vector &b)
elementwise multiplication
Definition: Vector.cpp:185
Vector delta(size_t n, size_t i, double value)
Create basis vector of dimension n, with a constant in spot i.
Definition: Vector.cpp:53
Vector repeat(size_t n, double value)
Create vector initialized to a constant value.
Definition: Vector.cpp:48
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with an tolerance
Definition: Matrix.h:84