33 using namespace ModelFitting;
44 : m_A{a}, m_lambda{lambda}, m_b{b}, m_y{
y}, m_t{t} {
56 for (
size_t i = 0; i < m_y.size(); ++i) {
57 double Yi = m_b->getValue() + m_A->getValue() *
exp(-m_lambda->getValue() * m_t[i]);
71 int main(
int argc,
char **argv) {
74 engine_impl = argv[1];
82 for (
int i = 0; i < n; ++i) {
83 double ti = i * tmax / (n - 1.0);
84 double yi = 1. + 5. *
exp(-0.1 * ti);
90 auto A = std::make_shared<EngineParameter>(2., make_unique<NeutralConverter>());
91 auto lambda = std::make_shared<EngineParameter>(1., make_unique<NeutralConverter>());
92 auto b = std::make_shared<EngineParameter>(0., make_unique<NeutralConverter>());
96 manager.registerParameter(lambda);
97 manager.registerParameter(b);
105 auto solution = engine->solveProblem(manager, res_estimator);
void printLevmarInfo(std::array< double, 10 > info)
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)
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.
std::unique_ptr< T > make_unique(Args &&...args)
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)
std::shared_ptr< BasicParameter > m_lambda
Provides to the LeastSquareEngine the residual values.