MeteoIODoc  MeteoIODoc-2.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
libfit1DCore.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2011 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of MeteoIO.
5  MeteoIO is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  MeteoIO is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef LIBFIT1DCORE_H
19 #define LIBFIT1DCORE_H
20 
21 #include <meteoio/IOExceptions.h>
23 
24 #include <vector>
25 
26 namespace mio {
27 
28 //class to use as an interface
29 class FitModel {
30  public:
31  FitModel() : Lambda(), X(), Y(), infoString(), regname(), nPts(0), nParam(0), min_nb_pts(0), fit_ready(false) {}
32  virtual ~FitModel() {}
33  virtual void setData(const std::vector<double>& in_X, const std::vector<double>& in_Y) = 0;
34  void setGuess(const std::vector<double>& lambda_in);
35  virtual void setLapseRate(const double& /*lapse_rate*/) {throw InvalidArgumentException("Lapse rates can only be forced for linear regressions!", AT);}
36  virtual bool fit() = 0;
37  virtual double f(const double& x) const = 0;
38  void getParams(std::vector<double>& o_coefficients) const;
39  std::string getName() const {return regname;}
40  std::string getInfo() const;
41  void setInfo(const std::string& info) {infoString=info;}
42  FitModel& operator =(const FitModel& source);
43  std::string toString() const;
44  protected:
45  virtual bool checkInputs();
46 
47  std::vector<double> Lambda; //parameters of the fit
48  std::vector<double> X; //X of input data set to fit
49  std::vector<double> Y; //Y of input data set to fit
50  std::string infoString;
51  std::string regname; //model name
52  size_t nPts; //number of data points
53  size_t nParam; //number of parameters
54  size_t min_nb_pts; //minimum number of data points
55  bool fit_ready; //set to false if fit() must be called before using the fit
56 };
57 
68 class FitLeastSquare : public FitModel {
69  public:
71  void setData(const std::vector<double>& in_X, const std::vector<double>& in_Y);
72  bool fit();
73  virtual double f(const double& x) const = 0;
74 
75  protected:
76  virtual void setDefaultGuess(); //set defaults guess values. Called by setData
77 
78  private:
79  void initLambda();
80  void initDLambda(Matrix& dLambda) const;
81  double getDelta(const double& var) const;
82  double DDer(const double& x, const size_t& index);
83  bool computeFit();
84 
85  static const double lambda_init; //initial default guess
86  static const double delta_init_abs; //initial delta, absolute
87  static const double delta_init_rel; //initial delta, relative
88  static const double eps_conv; //convergence criteria
89  static const unsigned int max_iter; //maximum number of iterations
90 };
91 
92 } //end namespace
93 
94 #endif
size_t nPts
Definition: libfit1DCore.h:52
std::string infoString
Definition: libfit1DCore.h:50
virtual bool fit()=0
std::string getName() const
Definition: libfit1DCore.h:39
virtual bool checkInputs()
Definition: libfit1DCore.cc:68
FitLeastSquare()
Definition: libfit1DCore.h:70
std::string toString() const
Definition: libfit1DCore.cc:90
void setData(const std::vector< double > &in_X, const std::vector< double > &in_Y)
Definition: libfit1DCore.cc:123
std::string getInfo() const
Definition: libfit1DCore.cc:36
std::vector< double > X
Definition: libfit1DCore.h:48
virtual double f(const double &x) const =0
virtual ~FitModel()
Definition: libfit1DCore.h:32
void setGuess(const std::vector< double > &lambda_in)
Definition: libfit1DCore.cc:40
virtual void setData(const std::vector< double > &in_X, const std::vector< double > &in_Y)=0
virtual void setLapseRate(const double &)
Definition: libfit1DCore.h:35
void setInfo(const std::string &info)
Definition: libfit1DCore.h:41
Definition: libfit1DCore.h:29
FitModel()
Definition: libfit1DCore.h:31
bool fit()
Definition: libfit1DCore.cc:137
size_t min_nb_pts
Definition: libfit1DCore.h:54
std::vector< double > Y
Definition: libfit1DCore.h:49
virtual void setDefaultGuess()
Definition: libfit1DCore.cc:131
#define AT
Definition: IOExceptions.h:29
thrown when encountered an unexpected function's argument (e.g. bad index, bad or missing parameter n...
Definition: IOExceptions.h:132
size_t nParam
Definition: libfit1DCore.h:53
std::vector< double > Lambda
Definition: libfit1DCore.h:47
bool fit_ready
Definition: libfit1DCore.h:55
FitModel & operator=(const FitModel &source)
Definition: libfit1DCore.cc:53
virtual double f(const double &x) const =0
void getParams(std::vector< double > &o_coefficients) const
Definition: libfit1DCore.cc:29
A class to perform non-linear least square fitting. It works on a time serie and uses matrix arithmet...
Definition: libfit1DCore.h:68
std::string regname
Definition: libfit1DCore.h:51
This class implements the basic operations on matrices. Elements are access in matrix notation: that ...
Definition: Matrix.h:41