This is to FirstOrderFunction, what AutoDiffCostFunction is to CostFunction.
This allows users of GradientSolver to be able to define objective functions
without requiring them to define the derivatives.
The implementation uses the same Jet objects for computing the gradient as
is used by AutoDiffCostFunction.
Change-Id: Ide6e60532a3adab9be9899ba9b368dc267fd2dbb
Also update all callsites to use INSTANTIATE_TEST_SUITE_P instead
of INSTANTIATE_TEST_CASE_P which has been deprecated.
Also some minor clang-format changes.
Change-Id: If9d0a77931536ac0765d8435068d00e4471f59d0
This CL changes the implementation of AddResidualBlock() in
ceres::Problem using variadic templates. Also one new overload for
AddResidualBlock() is added using a double** and the number of
parameter blocks.
Change-Id: I007a82a06897335a117213a0d12fedb4a77076a0
This CL fixes a regression bug in numeric differentiation where the
differentiation is called even if the parameter block is hold constant.
This resulted into a write to a nullptr.
A unit test is added for Jacobian evaluation of constant parameters.
Change-Id: Ia0f7c6cc7ef18f0f2cd6d758a839729b8ff606a0
This CL simplifies the implementation of cost function to functor using
variadic templates. The cost functor can now be called with an
arbitrary number of parameter pointers.
Change-Id: I0d9df2e9055a4842f40c232d4474508f010089a4
This PR changes the interface of sized_cost_fucntion,
autodiff_cost_function and numeric_diff_costfunction from using ten
hardcoded parameter blocks to a variable number of parameter blocks
using variadic templates.
Trailing parameter blocks of size zero are now considered as error.
Change-Id: I37b9a0a420ef0eda6476a46672bbf6bd57e19760
Introduce IsSetConstantByUser method which indicates whether
the user set the parameter block constant or not.
Changed the definition of IsConstant() to indicate if the
parameter block is effectively constant or not, which is
now the uniion of two conditions - the user set it to be constant
or the local tangent space is of size zero. Currently
this change has no effect as we do not allow local parameterizations
with zero tangent space size, but thats an inconsistency we are
working on fixing.
A variety of code cleans up to parameter_block.h
1. Remove an old TODO comment which is not really actionable.
2. Remove Init() method.
3. NULL -> nullptr
4. memcpy -> std::copy
Change-Id: I12973ee0f053fa22f09908cf36e9aa57d9d8dd74
The class parameter dims is a helper class that holds the parameter
dimensions. The parameter dimensions are either dynamic or the
sizes are known at compile time. It is used to pass parameter block
dimensions around (e.g. between functions or classes).
Also the dimensions of the parameter blocks are checked at compile
time and must be greater than zero. This means trailing zero parameter
blocks will result in a compile error.
Change-Id: I4decf2f09e63fdb0fd652022b2be2a1cfd9c4478
This patch removes the use of trailing zeros in cost functions used in
unit tests as this will be an error once the sized cost function is
implemented using variadic templates.
Change-Id: I3e8a31b310ba7299fc6b1f012f540a3118cc7661
This PR adds integer sequence and two algorithms (sum and exclusive
scan). Those will be needed to implement a sized cost function using
variadic templates.
Change-Id: I8e98d7c11fac94286fe9c364633406e59438f059
A variety of small cleanups to the local parameterization
implementation and tests to improve readability.
Change-Id: I5457206129cb3c301999d2f88912ba8300a2c934
All Init() function overloads are replaced by a perfect forwarding Init
function using variadic templates.
Change-Id: I42d0e236d274174982a4e56c0d73ec2776ed96f8
Enable use of dynamic number of residuals for autodiff.
Implemented with "Substitution failure is not an error" similar
to tiny_solver.h .
Move test from tiny_solver_test.cc to
tiny_solver_autodiff_function_test.cc .
Use cpplint.py from C++ Google Style Guide for formatting.
Change-Id: I2e1a159d17118552943c6ac7a833c5bbd0c927ec
There are overloaded operators supporting operations between a double and a Jet, so there
is no need to convert a double to a Jet.
Change-Id: I9cfcefb32c6b1a5ad716496b620d578871f0ff03
The example code for ceres::Jet is incorrect since it misses at which point
the derivate is computed.
Change-Id: Ic3f2ee061a2b69f0a402ca1a01297ddda1f153cd
When Jacobian is needed, a different function is called internally. Thus we have to recheck the residual.
Change-Id: I83044b3668479fc21b6612662271e872addf6f48
- Previously we were only bounding num_threads_used based on whether
CERES_NO_THREADS was defined, meaning that we could erroneously report
a value larger than the number of threads actually used.
Change-Id: I7373c0c968f9be268c8b7ab0b9561ae31700fda6
- Required now that Threads is a public dependency for Ceres and so
Threads::Threads will appear in the dependency list for the Ceres
target and so must be defined when Ceres itself is imported.
Change-Id: Ia5f8ea16e8f24cf0158f40e1fc8d3962106459a6
- Required to propagate the threading flags to example targets that
depend upon Ceres and do not directly specify threads as a dependency
to support some *nix builds.
Change-Id: I1c229bd0241da55a203c2b1f8fc28ea43c312e69
This header defined integral types in the pre-C++11 days, and can
be replaced with <cstdint> and the types defined therein.
Also remove a shallow (and incorrect) typedef in include/ceres/types.h
https://github.com/ceres-solver/ceres-solver/issues/409
Change-Id: I398c652f74d24bbeea459672508bf28f591b100f