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
Tyler Veness 2024-12-29 11:57:28 -08:00
parent 89fbe4bd2e
commit a0ae31f0d4
No known key found for this signature in database
GPG Key ID: AA007082A8B65599
5 changed files with 1 additions and 40 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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

View File

@ -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]

View File

@ -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 */