26#include <boost/version.hpp>
27#if BOOST_VERSION >= 106700
29#if BOOST_VERSION >= 107000
30#include <boost/math/differentiation/finite_difference.hpp>
31namespace bmd = boost::math::differentiation;
33#include <boost/math/tools/numerical_differentiation.hpp>
34namespace bmd = boost::math::tools;
39#include "AlexandriaKernel/memory_tools.h"
40#include "ElementsKernel/Logging.h"
94 double initial_value,
double current_value)
const {
115double doubleResolver(
const T&) {
120template<
typename ... Parameters>
122 FlexibleModelFittingParameterManager& parameter_manager,
123 const SourceInterface& source,
127 auto coordinate_system = source.getProperty<ReferenceCoordinates>().getCoordinateSystem();
128 auto calc = [value_calculator, coordinate_system] (
decltype(doubleResolver(
std::declval<Parameters>()))... params) ->
double {
130 return value_calculator(coordinate_system, materialized);
179 throw Elements::Exception() <<
"Dependent parameters can depend on maximum 10 other parameters";
189 for (
unsigned int i = 0; i < result.
size(); i++) {
191 auto f = [&](
double x) {
192 auto params = param_values;
197#if BOOST_VERSION >= 106700
198 result[i] = bmd::finite_difference_derivative(f, param_values[i]);
213 for (
auto& dependee : dependees) {
220 assert(dependees.size() == partial_derivatives.size());
221 for (
unsigned int i = 0; i < partial_derivatives.size(); i++) {
222 auto dependee_sigma = dependees[i]->getSigma(parameter_manager, source, free_parameter_sigmas);
223 sigma += partial_derivatives[i] * partial_derivatives[i] * dependee_sigma * dependee_sigma;
static Elements::Logging logger
static Logging getLogger(const std::string &name="")
virtual double getValue() const
Class responsible for managing the parameters the least square engine minimizes.
void registerParameter(std::shared_ptr< EngineParameter > parameter)
Registers an EngineParameter to the EngineParameterManager.
T emplace_back(T... args)
std::shared_ptr< DependentParameter< Parameters... > > createDependentParameter(typename DependentParameter< Parameters... >::ValueCalculator value_calculator, Parameters... parameters)
T shared_from_this(T... args)