diff --git a/gtsam/linear/JacobianFactor.cpp b/gtsam/linear/JacobianFactor.cpp index 85eb6880f..393c58dfb 100644 --- a/gtsam/linear/JacobianFactor.cpp +++ b/gtsam/linear/JacobianFactor.cpp @@ -447,7 +447,11 @@ namespace gtsam { size_t nj = Ab_(pos).cols(); Vector dj(nj); for (size_t k = 0; k < nj; ++k) { - Vector column_k = model_->whiten(Ab_(pos).col(k)); + Vector column_k; + if(model_) + column_k = model_->whiten(Ab_(pos).col(k)); + else + column_k = Ab_(pos).col(k); dj(k) = dot(column_k,column_k); } d.insert(j,dj); diff --git a/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp b/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp index de77dbc47..0b496d2a4 100644 --- a/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp +++ b/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp @@ -113,7 +113,9 @@ void LevenbergMarquardtOptimizer::iterate() { double sigma = 1.0 / std::sqrt(state_.lambda); dampedSystem.reserve(dampedSystem.size() + state_.values.size()); // for each of the variables, add a prior + VectorValues diagHessian = linear->hessianDiagonal(); BOOST_FOREACH(const Values::KeyValuePair& key_value, state_.values) { + size_t dim = key_value.value.dim(); Matrix A = Matrix::Identity(dim, dim); Vector b = Vector::Zero(dim);