changed updateATA -> updateHessian. Much clearer
parent
c9910625c2
commit
41a0146b05
|
|
@ -126,7 +126,7 @@ namespace gtsam {
|
||||||
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
||||||
* @param info The information matrix to be updated
|
* @param info The information matrix to be updated
|
||||||
*/
|
*/
|
||||||
virtual void updateATA(const Scatter& scatter,
|
virtual void updateHessian(const Scatter& scatter,
|
||||||
SymmetricBlockMatrix* info) const = 0;
|
SymmetricBlockMatrix* info) const = 0;
|
||||||
|
|
||||||
/// y += alpha * A'*A*x
|
/// y += alpha * A'*A*x
|
||||||
|
|
|
||||||
|
|
@ -248,7 +248,7 @@ HessianFactor::HessianFactor(const GaussianFactorGraph& factors,
|
||||||
gttic(update);
|
gttic(update);
|
||||||
BOOST_FOREACH(const GaussianFactor::shared_ptr& factor, factors)
|
BOOST_FOREACH(const GaussianFactor::shared_ptr& factor, factors)
|
||||||
if(factor)
|
if(factor)
|
||||||
factor->updateATA(*scatter, &info_);
|
factor->updateHessian(*scatter, &info_);
|
||||||
gttoc(update);
|
gttoc(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -346,7 +346,7 @@ double HessianFactor::error(const VectorValues& c) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
void HessianFactor::updateATA(const Scatter& scatter,
|
void HessianFactor::updateHessian(const Scatter& scatter,
|
||||||
SymmetricBlockMatrix* info) const {
|
SymmetricBlockMatrix* info) const {
|
||||||
gttic(updateATA_HessianFactor);
|
gttic(updateATA_HessianFactor);
|
||||||
// N is number of variables in information matrix, n in HessianFactor
|
// N is number of variables in information matrix, n in HessianFactor
|
||||||
|
|
|
||||||
|
|
@ -344,7 +344,7 @@ namespace gtsam {
|
||||||
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
||||||
* @param info The information matrix to be updated
|
* @param info The information matrix to be updated
|
||||||
*/
|
*/
|
||||||
void updateATA(const Scatter& scatter, SymmetricBlockMatrix* info) const;
|
void updateHessian(const Scatter& scatter, SymmetricBlockMatrix* info) const;
|
||||||
|
|
||||||
/** y += alpha * A'*A*x */
|
/** y += alpha * A'*A*x */
|
||||||
void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const;
|
void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const;
|
||||||
|
|
|
||||||
|
|
@ -498,7 +498,7 @@ map<Key, Matrix> JacobianFactor::hessianBlockDiagonal() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
void JacobianFactor::updateATA(const Scatter& scatter,
|
void JacobianFactor::updateHessian(const Scatter& scatter,
|
||||||
SymmetricBlockMatrix* info) const {
|
SymmetricBlockMatrix* info) const {
|
||||||
gttic(updateATA_JacobianFactor);
|
gttic(updateATA_JacobianFactor);
|
||||||
|
|
||||||
|
|
@ -509,10 +509,10 @@ void JacobianFactor::updateATA(const Scatter& scatter,
|
||||||
if (model && !model->isUnit()) {
|
if (model && !model->isUnit()) {
|
||||||
if (model->isConstrained())
|
if (model->isConstrained())
|
||||||
throw invalid_argument(
|
throw invalid_argument(
|
||||||
"JacobianFactor::updateATA: cannot update information with "
|
"JacobianFactor::updateHessian: cannot update information with "
|
||||||
"constrained noise model");
|
"constrained noise model");
|
||||||
JacobianFactor whitenedFactor = whiten();
|
JacobianFactor whitenedFactor = whiten();
|
||||||
whitenedFactor.updateATA(scatter, info);
|
whitenedFactor.updateHessian(scatter, info);
|
||||||
} else {
|
} else {
|
||||||
// Ab_ is the augmented Jacobian matrix A, and we perform I += A'*A below
|
// Ab_ is the augmented Jacobian matrix A, and we perform I += A'*A below
|
||||||
// N is number of variables in information matrix, n in JacobianFactor
|
// N is number of variables in information matrix, n in JacobianFactor
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@ namespace gtsam {
|
||||||
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
* @param scatter A mapping from variable index to slot index in this HessianFactor
|
||||||
* @param info The information matrix to be updated
|
* @param info The information matrix to be updated
|
||||||
*/
|
*/
|
||||||
void updateATA(const Scatter& scatter, SymmetricBlockMatrix* info) const;
|
void updateHessian(const Scatter& scatter, SymmetricBlockMatrix* info) const;
|
||||||
|
|
||||||
/** Return A*x */
|
/** Return A*x */
|
||||||
Vector operator*(const VectorValues& x) const;
|
Vector operator*(const VectorValues& x) const;
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ namespace gtsam {
|
||||||
: JacobianFactor(i1, A1, i2, A2, b, model), AC_(A1), AL_(A2), b_(b) {}
|
: JacobianFactor(i1, A1, i2, A2, b, model), AC_(A1), AL_(A2), b_(b) {}
|
||||||
|
|
||||||
// Fixed-size matrix update
|
// Fixed-size matrix update
|
||||||
void updateATA(const Scatter& scatter, SymmetricBlockMatrix* info) const {
|
void updateHessian(const Scatter& scatter, SymmetricBlockMatrix* info) const {
|
||||||
gttic(updateATA_LinearizedFactor);
|
gttic(updateATA_LinearizedFactor);
|
||||||
|
|
||||||
// Whiten the factor if it has a noise model
|
// Whiten the factor if it has a noise model
|
||||||
|
|
@ -157,10 +157,10 @@ namespace gtsam {
|
||||||
if (model && !model->isUnit()) {
|
if (model && !model->isUnit()) {
|
||||||
if (model->isConstrained())
|
if (model->isConstrained())
|
||||||
throw std::invalid_argument(
|
throw std::invalid_argument(
|
||||||
"JacobianFactor::updateATA: cannot update information with "
|
"JacobianFactor::updateHessian: cannot update information with "
|
||||||
"constrained noise model");
|
"constrained noise model");
|
||||||
JacobianFactor whitenedFactor = whiten();
|
JacobianFactor whitenedFactor = whiten();
|
||||||
whitenedFactor.updateATA(scatter, info);
|
whitenedFactor.updateHessian(scatter, info);
|
||||||
} else {
|
} else {
|
||||||
// N is number of variables in information matrix
|
// N is number of variables in information matrix
|
||||||
DenseIndex N = info->nBlocks() - 1;
|
DenseIndex N = info->nBlocks() - 1;
|
||||||
|
|
|
||||||
|
|
@ -115,10 +115,10 @@ public:
|
||||||
return D;
|
return D;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void updateATA(const Scatter& scatter,
|
virtual void updateHessian(const Scatter& scatter,
|
||||||
SymmetricBlockMatrix* info) const {
|
SymmetricBlockMatrix* info) const {
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"RegularImplicitSchurFactor::updateATA non implemented");
|
"RegularImplicitSchurFactor::updateHessian non implemented");
|
||||||
}
|
}
|
||||||
virtual Matrix augmentedJacobian() const {
|
virtual Matrix augmentedJacobian() const {
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue