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() {
|
||||
static const Eigen::IOFormat matlab(
|
||||
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);
|
||||
|
||||
/**
|
||||
* 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 */
|
||||
template<class MATRIX>
|
||||
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
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
// 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
|
||||
void SubgraphPreconditioner::transposeMultiplyAdd
|
||||
|
|
|
@ -125,9 +125,6 @@ namespace gtsam {
|
|||
/** Apply operator A in place: needs e allocated already */
|
||||
void multiplyInPlace(const VectorValues& y, Errors& e) const;
|
||||
|
||||
/** Apply operator A' */
|
||||
VectorValues operator^(const Errors& e) const;
|
||||
|
||||
/**
|
||||
* Add A'*e to y
|
||||
* y += alpha*A'*[e1;e2] = [alpha*e1; alpha*inv(R1')*A2'*e2]
|
||||
|
|
|
@ -59,11 +59,6 @@ namespace gtsam {
|
|||
/** Access b vector */
|
||||
const Vector& b() const { return b_; }
|
||||
|
||||
/** Apply operator A'*e */
|
||||
Vector operator^(const Vector& e) const {
|
||||
return A_ ^ e;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print with optional string
|
||||
*/
|
||||
|
@ -71,7 +66,7 @@ namespace gtsam {
|
|||
|
||||
/** gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_) */
|
||||
Vector gradient(const Vector& x) const {
|
||||
return A() ^ (A() * x - b());
|
||||
return A().transpose() * (A() * x - b());
|
||||
}
|
||||
|
||||
/** Apply operator A */
|
||||
|
|
Loading…
Reference in New Issue