Commit 1c268e73ecd80bcab7f9bdea8a3382a995faaea3
1 parent
41606bea
removed error computation from GOptimizerLM::optimize and added error()-method t…
…o GOptimizer base class. Further implemented GObservations::errors()
Showing
5 changed files
with
30 additions
and
5 deletions
include/GObservations.hpp
| @@ -125,6 +125,7 @@ public: | @@ -125,6 +125,7 @@ public: | ||
| 125 | void models(const std::string& filename); | 125 | void models(const std::string& filename); |
| 126 | const GModels& models(void) const; | 126 | const GModels& models(void) const; |
| 127 | void optimize(GOptimizer& opt); | 127 | void optimize(GOptimizer& opt); |
| 128 | + void errors(GOptimizer& opt); | ||
| 128 | void eval(void); | 129 | void eval(void); |
| 129 | double logL(void) const; | 130 | double logL(void) const; |
| 130 | double npred(void) const; | 131 | double npred(void) const; |
include/GOptimizer.hpp
| @@ -67,6 +67,7 @@ public: | @@ -67,6 +67,7 @@ public: | ||
| 67 | virtual GOptimizer* clone(void) const = 0; | 67 | virtual GOptimizer* clone(void) const = 0; |
| 68 | virtual std::string classname(void) const = 0; | 68 | virtual std::string classname(void) const = 0; |
| 69 | virtual void optimize(GOptimizerFunction& fct, GOptimizerPars& pars) = 0; | 69 | virtual void optimize(GOptimizerFunction& fct, GOptimizerPars& pars) = 0; |
| 70 | + virtual void errors(GOptimizerFunction& fct, GOptimizerPars& pars) = 0; | ||
| 70 | virtual double value(void) const = 0; | 71 | virtual double value(void) const = 0; |
| 71 | virtual int status(void) const = 0; | 72 | virtual int status(void) const = 0; |
| 72 | virtual int iter(void) const = 0; | 73 | virtual int iter(void) const = 0; |
include/GOptimizerLM.hpp
| @@ -66,6 +66,7 @@ public: | @@ -66,6 +66,7 @@ public: | ||
| 66 | virtual GOptimizerLM* clone(void) const; | 66 | virtual GOptimizerLM* clone(void) const; |
| 67 | virtual std::string classname(void) const; | 67 | virtual std::string classname(void) const; |
| 68 | virtual void optimize(GOptimizerFunction& fct, GOptimizerPars& pars); | 68 | virtual void optimize(GOptimizerFunction& fct, GOptimizerPars& pars); |
| 69 | + void errors(GOptimizerFunction& fct, GOptimizerPars& pars); | ||
| 69 | virtual double value(void) const { return m_value; } //!< @brief Return function value | 70 | virtual double value(void) const { return m_value; } //!< @brief Return function value |
| 70 | virtual int status(void) const { return m_status; } //!< @brief Return optimization status | 71 | virtual int status(void) const { return m_status; } //!< @brief Return optimization status |
| 71 | virtual int iter(void) const { return m_iter; } //!< @brief Return number of iterations | 72 | virtual int iter(void) const { return m_iter; } //!< @brief Return number of iterations |
| @@ -94,7 +95,6 @@ protected: | @@ -94,7 +95,6 @@ protected: | ||
| 94 | void copy_members(const GOptimizerLM& opt); | 95 | void copy_members(const GOptimizerLM& opt); |
| 95 | void free_members(void); | 96 | void free_members(void); |
| 96 | void iteration(GOptimizerFunction& fct, GOptimizerPars& pars); | 97 | void iteration(GOptimizerFunction& fct, GOptimizerPars& pars); |
| 97 | - void errors(GOptimizerFunction& fct, GOptimizerPars& pars); | ||
| 98 | double step_size(const GVector& grad, const GOptimizerPars& pars); | 98 | double step_size(const GVector& grad, const GOptimizerPars& pars); |
| 99 | 99 | ||
| 100 | // Protected members | 100 | // Protected members |
src/obs/GObservations.cpp
| @@ -722,6 +722,27 @@ void GObservations::optimize(GOptimizer& opt) | @@ -722,6 +722,27 @@ void GObservations::optimize(GOptimizer& opt) | ||
| 722 | 722 | ||
| 723 | 723 | ||
| 724 | /***********************************************************************//** | 724 | /***********************************************************************//** |
| 725 | + * @brief Computes parameter errors using optimizer | ||
| 726 | + * | ||
| 727 | + * @param[in] opt Optimizer. | ||
| 728 | + * | ||
| 729 | + * Calculates the errors of the free parameters of the models by using | ||
| 730 | + * the optimizer that has been provided by the @p opt argument. | ||
| 731 | + ***************************************************************************/ | ||
| 732 | +void GObservations::errors(GOptimizer& opt) | ||
| 733 | +{ | ||
| 734 | + // Extract optimizer parameter container from model container | ||
| 735 | + GOptimizerPars pars = m_models.pars(); | ||
| 736 | + | ||
| 737 | + // Optimize model parameters | ||
| 738 | + opt.errors(m_fct, pars); | ||
| 739 | + | ||
| 740 | + // Return | ||
| 741 | + return; | ||
| 742 | +} | ||
| 743 | + | ||
| 744 | + | ||
| 745 | +/***********************************************************************//** | ||
| 725 | * @brief Evaluate function | 746 | * @brief Evaluate function |
| 726 | * | 747 | * |
| 727 | * Evaluates the likelihood funtion at the actual set of parameters. | 748 | * Evaluates the likelihood funtion at the actual set of parameters. |
src/opt/GOptimizerLM.cpp
| @@ -409,9 +409,6 @@ void GOptimizerLM::optimize(GOptimizerFunction& fct, GOptimizerPars& pars) | @@ -409,9 +409,6 @@ void GOptimizerLM::optimize(GOptimizerFunction& fct, GOptimizerPars& pars) | ||
| 409 | } | 409 | } |
| 410 | 410 | ||
| 411 | } // endfor: iterations | 411 | } // endfor: iterations |
| 412 | - | ||
| 413 | - // Compute parameter uncertainties | ||
| 414 | - errors(fct, pars); | ||
| 415 | 412 | ||
| 416 | // Free now all temporarily frozen parameters so that the resulting | 413 | // Free now all temporarily frozen parameters so that the resulting |
| 417 | // model has the same attributes as the initial model | 414 | // model has the same attributes as the initial model |
| @@ -432,7 +429,12 @@ void GOptimizerLM::optimize(GOptimizerFunction& fct, GOptimizerPars& pars) | @@ -432,7 +429,12 @@ void GOptimizerLM::optimize(GOptimizerFunction& fct, GOptimizerPars& pars) | ||
| 432 | 429 | ||
| 433 | // ... otherwise just execute final step | 430 | // ... otherwise just execute final step |
| 434 | else { | 431 | else { |
| 435 | - errors(fct, pars); | 432 | + |
| 433 | + // Evaluate function | ||
| 434 | + fct.eval(pars); | ||
| 435 | + | ||
| 436 | + // Save function value | ||
| 437 | + m_value = fct.value(); | ||
| 436 | } | 438 | } |
| 437 | 439 | ||
| 438 | // Return | 440 | // Return |