44 #define GTSAM_MAKE_MATRIX_DEFS(N) \ 45 using Matrix##N = Eigen::Matrix<double, N, N>; \ 46 using Matrix1##N = Eigen::Matrix<double, 1, N>; \ 47 using Matrix2##N = Eigen::Matrix<double, 2, N>; \ 48 using Matrix3##N = Eigen::Matrix<double, 3, N>; \ 49 using Matrix4##N = Eigen::Matrix<double, 4, N>; \ 50 using Matrix5##N = Eigen::Matrix<double, 5, N>; \ 51 using Matrix6##N = Eigen::Matrix<double, 6, N>; \ 52 using Matrix7##N = Eigen::Matrix<double, 7, N>; \ 53 using Matrix8##N = Eigen::Matrix<double, 8, N>; \ 54 using Matrix9##N = Eigen::Matrix<double, 9, N>; \ 55 static const Eigen::MatrixBase<Matrix##N>::IdentityReturnType I_##N##x##N = Matrix##N::Identity(); \ 56 static const Eigen::MatrixBase<Matrix##N>::ConstantReturnType Z_##N##x##N = Matrix##N::Zero(); 79 template <class MATRIX>
82 const size_t n1 = A.cols(),
m1 = A.rows();
83 const size_t n2 = B.cols(),
m2 = B.rows();
85 if(
m1!=
m2 || n1!=n2)
return false;
87 for(
size_t i=0;
i<
m1;
i++)
88 for(
size_t j=0;
j<
n1;
j++) {
118 GTSAM_EXPORT
bool assert_inequal(
const Matrix& A,
const Matrix& B,
double tol = 1
e-9);
123 GTSAM_EXPORT
bool assert_equal(
const std::list<Matrix>& As,
const std::list<Matrix>& Bs,
double tol = 1
e-9);
142 template<
class MATRIX>
143 inline MATRIX
prod(
const MATRIX& A,
const MATRIX&B) {
151 GTSAM_EXPORT
void print(
const Matrix& A,
const std::string&
s, std::ostream&
stream);
156 GTSAM_EXPORT
void print(
const Matrix& A,
const std::string& s =
"");
161 GTSAM_EXPORT
void save(
const Matrix& A,
const std::string &s,
const std::string&
filename);
168 GTSAM_EXPORT std::istream&
operator>>(std::istream& inputStream, Matrix& destinationMatrix);
179 template<
class MATRIX>
181 size_t m=i2-i1,
n=j2-j1;
182 return A.block(i1,j1,m,n);
193 template <
typename Derived1,
typename Derived2>
195 fullMatrix.
block(i, j, subMatrix.rows(), subMatrix.cols()) = subMatrix;
201 GTSAM_EXPORT Matrix
diag(
const std::vector<Matrix>& Hs);
209 template<
class MATRIX>
220 template<
class MATRIX>
230 template<
class MATRIX>
232 const size_t m = A.rows(),
n = A.cols();
234 for (
size_t j=0;
j<k; ++
j)
235 A.col(
j).segment(
j+1, m-(
j+1)).setZero();
241 inline Matrix
trans(
const Matrix& A) {
return A.transpose(); }
244 template <
int OutM,
int OutN,
int OutOptions,
int InM,
int InN,
int InOptions>
254 template <
int M,
int InOptions>
263 template <
int M,
int N,
int InOptions>
272 template <
int M,
int N,
int InOptions>
276 return in.transpose();
280 template <
int OutM,
int OutN,
int OutOptions,
int InM,
int InN,
int InOptions>
282 static_assert(InM * InN == OutM * OutN);
292 GTSAM_EXPORT std::pair<Matrix,Matrix>
qr(
const Matrix& A);
309 GTSAM_EXPORT std::list<std::tuple<Vector, double, double> >
319 GTSAM_EXPORT
void householder_(Matrix& A,
size_t k,
bool copy_vectors=
true);
327 GTSAM_EXPORT
void householder(Matrix& A,
size_t k);
363 GTSAM_EXPORT Matrix
stack(
size_t nrMatrices, ...);
364 GTSAM_EXPORT Matrix
stack(
const std::vector<Matrix>& blocks);
376 GTSAM_EXPORT Matrix
collect(
const std::vector<const Matrix *>& matrices,
size_t m = 0,
size_t n = 0);
377 GTSAM_EXPORT Matrix
collect(
size_t nrMatrices, ...);
386 GTSAM_EXPORT Matrix
vector_scale(
const Vector& v,
const Matrix& A,
bool inf_mask =
false);
387 GTSAM_EXPORT Matrix
vector_scale(
const Matrix& A,
const Vector& v,
bool inf_mask =
false);
401 return (Matrix3() << 0.0, -wz, +wy, +wz, 0.0, -wx, -wy, +wx, 0.0).finished();
404 template <
class Derived>
427 GTSAM_EXPORT
void svd(
const Matrix& A, Matrix& U,
Vector&
S, Matrix&
V);
436 GTSAM_EXPORT std::tuple<int, double, Vector>
437 DLT(
const Matrix& A,
double rank_tol = 1
e-9);
444 GTSAM_EXPORT Matrix
expm(
const Matrix& A,
size_t K=7);
463 const MatrixN invA = A.inverse();
464 const VectorN
c = invA *
b;
467 for (
size_t j = 0;
j <
N;
j++)
468 H1->template middleCols<N>(N *
j) = -c[
j] * invA;
480 template <
typename T,
int N>
488 typedef std::function<VectorN(
501 const MatrixN invA = A.inverse();
502 const VectorN
c = invA *
b;
517 GTSAM_EXPORT Matrix
LLt(
const Matrix& A);
519 GTSAM_EXPORT Matrix
RtR(
const Matrix& A);
void print(const Matrix &A, const string &s, ostream &stream)
#define GTSAM_MAKE_MATRIX_DEFS(N)
std::string formatMatrixIndented(const std::string &label, const Matrix &matrix, bool makeVectorHorizontal)
std::function< VectorN(const T &, const VectorN &, OptionalJacobian< N, M >, OptionalJacobian< N, N >)> Operator
void zeroBelowDiagonal(MATRIX &A, size_t cols=0)
VectorN operator()(const T &a, const VectorN &b, OptionalJacobian< N, M > H1={}, OptionalJacobian< N, N > H2={}) const
f(a).inverse() * b, with optional derivatives
VectorN operator()(const MatrixN &A, const VectorN &b, OptionalJacobian< N, N *N > H1={}, OptionalJacobian< N, N > H2={}) const
A.inverse() * b, with optional derivatives.
Eigen::Matrix< double, M, N, InOptions >::ConstTransposeReturnType ReshapedType
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Matrix< RealScalar, Dynamic, Dynamic > M
void householder_(Matrix &A, size_t k, bool copy_vectors)
Eigen::Matrix< double, N, N > MatrixN
MATRIX prod(const MATRIX &A, const MATRIX &B)
void save(const Matrix &A, const string &s, const string &filename)
Vector backSubstituteUpper(const Matrix &U, const Vector &b, bool unit)
bool operator!=(const Matrix &A, const Matrix &B)
void inplace_QR(Matrix &A)
pair< Matrix, Matrix > qr(const Matrix &A)
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, 1, !IsRowMajor > ConstColXpr
static ReshapedType reshape(const Eigen::Matrix< double, InM, InN, InOptions > &in)
Matrix diag(const std::vector< Matrix > &Hs)
const Eigen::Matrix< double, M, N, InOptions > & ReshapedType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar * data() const
A matrix or vector expression mapping an existing array of data.
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
std::tuple< int, double, Vector > DLT(const Matrix &A, double rank_tol)
static ReshapedType reshape(const Eigen::Matrix< double, M, M, InOptions > &in)
Namespace containing all symbols from the Eigen library.
static Cal3_S2 K(500, 500, 0.1, 640/2, 480/2)
bool operator==(const Matrix &A, const Matrix &B)
const Eigen::Matrix< double, M, M, InOptions > & ReshapedType
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate set rrange [*:*] noreverse nowriteback set trange [*:*] noreverse nowriteback set urange [*:*] noreverse nowriteback set vrange [*:*] noreverse nowriteback set xlabel matrix size set x2label set timefmt d m y n H
T expm(const Vector &x, int K=7)
Matrix vector_scale(const Vector &v, const Matrix &A, bool inf_mask)
Vector backSubstituteLower(const Matrix &L, const Vector &b, bool unit)
Matrix trans(const Matrix &A)
Matrix RtR(const Matrix &A)
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
bool fpEqual(double a, double b, double tol, bool check_relative_also)
Matrix LLt(const Matrix &A)
const Eigen::IOFormat & matlabFormat()
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > MatrixRowMajor
Vector operator^(const Matrix &A, const Vector &v)
istream & operator>>(istream &inputStream, Matrix &destinationMatrix)
MultiplyWithInverseFunction(const Operator &phi)
Construct with function as explained above.
Eigen::Matrix< double, N, 1 > VectorN
static ReshapedType reshape(const Eigen::Matrix< double, M, N, InOptions > &in)
Matrix stack(size_t nrMatrices,...)
Matrix collect(const std::vector< const Matrix *> &matrices, size_t m, size_t n)
Array< int, Dynamic, 1 > v
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Eigen::Map< const Eigen::Matrix< double, OutM, OutN, OutOptions > > ReshapedType
void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)
const Block< const Derived, 1, internal::traits< Derived >::ColsAtCompileTime, IsRowMajor > ConstRowXpr
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
typedef and functions to augment Eigen's VectorXd
Matrix3 skewSymmetric(double wx, double wy, double wz)
Expression of a fixed-size or dynamic-size block.
Vector columnNormSquare(const Matrix &A)
void insertSub(Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)
void householder(Matrix &A, size_t k)
Eigen::Matrix< double, N, 1 > VectorN
Matrix inverse_square_root(const Matrix &A)
Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t j1, size_t j2)
static ReshapedType reshape(const Eigen::Matrix< double, M, N, InOptions > &in)
Special class for optional Jacobian arguments.
void vector_scale_inplace(const Vector &v, Matrix &A, bool inf_mask)
Eigen::Matrix< double, N, N > MatrixN
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
The matrix class, also used for vectors and row-vectors.
EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE FixedBlockXpr< internal::get_fixed_value< NRowsType >::value, internal::get_fixed_value< NColsType >::value >::Type block(Index startRow, Index startCol, NRowsType blockRows, NColsType blockCols)
bool linear_independent(const Matrix &A, const Matrix &B, double tol)
const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)
Matrix cholesky_inverse(const Matrix &A)
Base class for all dense matrices, vectors, and expressions.
list< std::tuple< Vector, double, double > > weighted_eliminate(Matrix &A, Vector &b, const Vector &sigmas)