17 using namespace ModelFitting;
27 : m_A{a}, m_lambda{lambda}, m_b{b}, m_y{
y}, m_t{t} {
39 for (
size_t i = 0; i < m_y.size(); ++i) {
40 double Yi = m_b->getValue() + m_A->getValue() *
exp(-m_lambda->getValue() * m_t[i]);
54 int main(
int argc,
char **argv) {
57 engine_impl = argv[1];
65 for (
int i = 0; i < n; ++i) {
66 double ti = i * tmax / (n - 1.0);
67 double yi = 1. + 5. *
exp(-0.1 * ti);
73 auto A = std::make_shared<EngineParameter>(2., make_unique<NeutralConverter>());
74 auto lambda = std::make_shared<EngineParameter>(1., make_unique<NeutralConverter>());
75 auto b = std::make_shared<EngineParameter>(0., make_unique<NeutralConverter>());
79 manager.registerParameter(lambda);
80 manager.registerParameter(b);
88 auto solution = engine->solveProblem(manager, res_estimator);
ExpResidualProvider(std::shared_ptr< BasicParameter > a, std::shared_ptr< BasicParameter > lambda, std::shared_ptr< BasicParameter > b, const std::vector< double > &y, const std::vector< double > &t)
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y
Interface of a class which can provide a block of residuals for least square minimization solving...
void registerBlockProvider(std::unique_ptr< ResidualBlockProvider > provider)
Registers a ResidualBlockProvider to the ResidualEstimator.
std::size_t numberOfResiduals() const override
Returns the number of residuals provided by this provider.
void registerParameter(std::shared_ptr< EngineParameter > parameter)
Registers an EngineParameter to the EngineParameterManager.
std::vector< double > m_y
void populateResidualBlock(IterType iter) override
Provides the residual values.
Class responsible for managing the parameters the least square engine minimizes.
static std::shared_ptr< LeastSquareEngine > create(const std::string &name, unsigned max_iterations=1000)
void printLevmarInfo(std::array< double, 10 > info)
std::shared_ptr< BasicParameter > m_lambda
Provides to the LeastSquareEngine the residual values.