Remove operator^ from Matrix and SubgraphPreconditioner
Eigen recently added an operator^ for coefficient-wise bitwise xor, which conflicts with gtsam's operator^. Since gtsam's operator^ isn't xor, I opted to remove it. Fixes #1951.release/4.3a0
parent
89fbe4bd2e
commit
a0ae31f0d4
|
@ -126,17 +126,6 @@ bool linear_dependent(const Matrix& A, const Matrix& B, double tol) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
Vector operator^(const Matrix& A, const Vector & v) {
|
|
||||||
if (A.rows()!=v.size()) {
|
|
||||||
throw std::invalid_argument("Matrix operator^ : A.m(" + std::to_string(A.rows()) + ")!=v.size(" +
|
|
||||||
std::to_string(v.size()) + ")");
|
|
||||||
}
|
|
||||||
// Vector vt = v.transpose();
|
|
||||||
// Vector vtA = vt * A;
|
|
||||||
// return vtA.transpose();
|
|
||||||
return A.transpose() * v;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Eigen::IOFormat& matlabFormat() {
|
const Eigen::IOFormat& matlabFormat() {
|
||||||
static const Eigen::IOFormat matlab(
|
static const Eigen::IOFormat matlab(
|
||||||
Eigen::StreamPrecision, // precision
|
Eigen::StreamPrecision, // precision
|
||||||
|
|
|
@ -132,12 +132,6 @@ GTSAM_EXPORT bool linear_independent(const Matrix& A, const Matrix& B, double to
|
||||||
*/
|
*/
|
||||||
GTSAM_EXPORT bool linear_dependent(const Matrix& A, const Matrix& B, double tol = 1e-9);
|
GTSAM_EXPORT bool linear_dependent(const Matrix& A, const Matrix& B, double tol = 1e-9);
|
||||||
|
|
||||||
/**
|
|
||||||
* overload ^ for trans(A)*v
|
|
||||||
* We transpose the vectors for speed.
|
|
||||||
*/
|
|
||||||
GTSAM_EXPORT Vector operator^(const Matrix& A, const Vector & v);
|
|
||||||
|
|
||||||
/** products using old-style format to improve compatibility */
|
/** products using old-style format to improve compatibility */
|
||||||
template<class MATRIX>
|
template<class MATRIX>
|
||||||
inline MATRIX prod(const MATRIX& A, const MATRIX&B) {
|
inline MATRIX prod(const MATRIX& A, const MATRIX&B) {
|
||||||
|
|
|
@ -149,20 +149,6 @@ void SubgraphPreconditioner::multiplyInPlace(const VectorValues& y, Errors& e) c
|
||||||
Ab2_.multiplyInPlace(x, ei); // use iterator version
|
Ab2_.multiplyInPlace(x, ei); // use iterator version
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
|
||||||
// Apply operator A', A'*e = [I inv(R1')*A2']*e = e1 + inv(R1')*A2'*e2
|
|
||||||
VectorValues SubgraphPreconditioner::operator^(const Errors& e) const {
|
|
||||||
|
|
||||||
Errors::const_iterator it = e.begin();
|
|
||||||
VectorValues y = zero();
|
|
||||||
for(auto& key_value: y) {
|
|
||||||
key_value.second = *it;
|
|
||||||
++it;
|
|
||||||
}
|
|
||||||
transposeMultiplyAdd2(1.0, it, e.end(), y);
|
|
||||||
return y;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
// y += alpha*A'*e
|
// y += alpha*A'*e
|
||||||
void SubgraphPreconditioner::transposeMultiplyAdd
|
void SubgraphPreconditioner::transposeMultiplyAdd
|
||||||
|
|
|
@ -125,9 +125,6 @@ namespace gtsam {
|
||||||
/** Apply operator A in place: needs e allocated already */
|
/** Apply operator A in place: needs e allocated already */
|
||||||
void multiplyInPlace(const VectorValues& y, Errors& e) const;
|
void multiplyInPlace(const VectorValues& y, Errors& e) const;
|
||||||
|
|
||||||
/** Apply operator A' */
|
|
||||||
VectorValues operator^(const Errors& e) const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add A'*e to y
|
* Add A'*e to y
|
||||||
* y += alpha*A'*[e1;e2] = [alpha*e1; alpha*inv(R1')*A2'*e2]
|
* y += alpha*A'*[e1;e2] = [alpha*e1; alpha*inv(R1')*A2'*e2]
|
||||||
|
|
|
@ -59,11 +59,6 @@ namespace gtsam {
|
||||||
/** Access b vector */
|
/** Access b vector */
|
||||||
const Vector& b() const { return b_; }
|
const Vector& b() const { return b_; }
|
||||||
|
|
||||||
/** Apply operator A'*e */
|
|
||||||
Vector operator^(const Vector& e) const {
|
|
||||||
return A_ ^ e;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print with optional string
|
* Print with optional string
|
||||||
*/
|
*/
|
||||||
|
@ -71,7 +66,7 @@ namespace gtsam {
|
||||||
|
|
||||||
/** gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_) */
|
/** gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_) */
|
||||||
Vector gradient(const Vector& x) const {
|
Vector gradient(const Vector& x) const {
|
||||||
return A() ^ (A() * x - b());
|
return A().transpose() * (A() * x - b());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Apply operator A */
|
/** Apply operator A */
|
||||||
|
|
Loading…
Reference in New Issue