MeteoIODoc  MeteoIODoc-2.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
libfit1D.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 LIBFIT1D_H
19 #define LIBFIT1D_H
20 
22 #include <meteoio/IOUtils.h>
23 
24 #include <vector>
25 
26 namespace mio {
27 
28 class Zero : public FitModel {
29  public:
30  Zero() {fit_ready = true; nParam = 0; min_nb_pts = 0; regname = "Zero";}
31  void setData(const std::vector<double>& /*in_X*/, const std::vector<double>& /*in_Y*/) { }
32  bool fit() { return true;}
33  double f(const double& /*x*/) const {return 0.;}
34 };
35 
36 class SimpleLinear : public FitModel {
37  public:
38  SimpleLinear() : fixed_lapse_rate(IOUtils::nodata) {fit_ready = false; nParam = 2; min_nb_pts = 2; regname = "SimpleLinear";}
39  void setData(const std::vector<double>& in_X, const std::vector<double>& in_Y);
40  bool fit();
41  double f(const double& x) const;
42  void setLapseRate(const double& in_lapse_rate) {fixed_lapse_rate = in_lapse_rate; fit_ready = false; min_nb_pts=1;}
43  protected:
45 };
46 
47 class NoisyLinear : public SimpleLinear {
48  public:
49  NoisyLinear() {fit_ready = false; nParam = 2; min_nb_pts = 2; regname = "NoisyLinear";}
50  bool fit();
51 };
52 
53 class SphericVario : public FitLeastSquare {
54  public:
55  SphericVario() {fit_ready = false; nParam = 3; min_nb_pts = 4; regname = "SphericVario";}
56  void setDefaultGuess();
57  double f(const double& x) const;
58 };
59 
60 class LinVario : public FitLeastSquare {
61  public:
62  LinVario() {fit_ready = false; nParam = 2; min_nb_pts = 3; regname = "LinVario";}
63  void setDefaultGuess();
64  double f(const double& x) const;
65 };
66 
67 class ExpVario : public FitLeastSquare {
68  public:
69  ExpVario() {fit_ready = false; nParam = 3; min_nb_pts = 4; regname = "ExpVario";}
70  void setDefaultGuess();
71  double f(const double& x) const;
72 };
73 
74 class RatQuadVario : public FitLeastSquare {
75  public:
76  RatQuadVario() {fit_ready = false; nParam = 3; min_nb_pts = 4; regname = "RatQuadVario";}
77  void setDefaultGuess();
78  double f(const double& x) const;
79 };
80 
81 class LinearLS : public FitLeastSquare {
82  public:
83  LinearLS() {fit_ready = false; nParam = 2; min_nb_pts = 3; regname = "LinearLS";}
84  void setDefaultGuess();
85  double f(const double& x) const;
86 };
87 
88 class Quadratic : public FitLeastSquare {
89  public:
90  Quadratic() {fit_ready = false; nParam = 3; min_nb_pts = 4; regname = "Quadratic";}
91  void setDefaultGuess();
92  double f(const double& x) const;
93 };
94 
119 class Fit1D {
120  public:
122  typedef enum REGRESSION {
132  } regression;
133 
138  Fit1D() : model(NULL) {}
139 
147  Fit1D(const regression& regType, const std::vector<double>& in_X, const std::vector<double>& in_Y, const bool& updatefit=true);
148 
156  Fit1D(const std::string& regType, const std::vector<double>& in_X, const std::vector<double>& in_Y, const bool& updatefit=true);
157 
162  Fit1D(const Fit1D& i_fit);
163 
164  ~Fit1D() {delete model;}
165 
174  bool setModel(const regression& i_regType, const std::vector<double>& in_X, const std::vector<double>& in_Y, const bool& updatefit=true);
175 
184  bool setModel(const std::string& i_regType, const std::vector<double>& in_X, const std::vector<double>& in_Y, const bool& updatefit=true);
185 
192  void setGuess(const std::vector<double>& lambda_in) {model->setGuess(lambda_in);}
193 
199  void setLapseRate(const double& lapse_rate) {model->setLapseRate(lapse_rate);}
200 
205  bool fit() {return model->fit();}
206 
213  double f(const double& x) const {return model->f(x);}
214 
220  void getParams(std::vector<double>& coefficients) const {model->getParams(coefficients);}
221 
226  std::string getName() const {return model->getName();}
227 
233  std::string getInfo() const {return model->getInfo();}
234 
241  void setInfo(const std::string& info) {model->setInfo(info);}
242 
243  Fit1D& operator =(const Fit1D& source);
244 
251  double operator ()(const double& x) const {return model->f(x);}
252 
253  std::string toString() const {return model->toString();}
254 
255  private:
256  FitModel *model;
257 };
258 
259 } //end namespace
260 
261 #endif
Definition: libfit1D.h:67
bool fit()
Definition: libfit1D.h:32
double fixed_lapse_rate
Definition: libfit1D.h:44
rational quadratic variogram
Definition: libfit1D.h:129
double f(const double &x) const
Definition: libfit1D.cc:282
double f(const double &x) const
Definition: libfit1D.cc:208
void setInfo(const std::string &info)
Set the information string. This is useful to append some extra information to the information string...
Definition: libfit1D.h:241
virtual bool fit()=0
std::string getName() const
Definition: libfit1DCore.h:39
Definition: libfit1D.h:60
Definition: libfit1D.h:88
std::string getInfo() const
Return a string of information about the fit. The fit has to be computed before.
Definition: libfit1D.h:233
LinVario()
Definition: libfit1D.h:62
std::string getName() const
Return the name of the fit model.
Definition: libfit1D.h:226
std::string toString() const
Definition: libfit1DCore.cc:90
double f(const double &x) const
Definition: libfit1D.cc:299
Definition: libfit1D.h:47
quadratic
Definition: libfit1D.h:131
SphericVario()
Definition: libfit1D.h:55
Definition: libfit1D.h:81
LinearLS()
Definition: libfit1D.h:83
bool fit()
Definition: libfit1D.cc:119
void setLapseRate(const double &lapse_rate)
Set a forced lapse rate for linear regressions This will throw an exception for all other regression ...
Definition: libfit1D.h:199
SimpleLinear()
Definition: libfit1D.h:38
same as SIMPLE_LINEAR but trying to remove outliers
Definition: libfit1D.h:125
basic, cheap linear fit
Definition: libfit1D.h:124
double f(const double &x) const
Calculate a value using the computed least square fit. The fit has to be computed before...
Definition: libfit1D.h:213
exponential variogram
Definition: libfit1D.h:127
bool fit()
Definition: libfit1D.cc:151
std::string getInfo() const
Definition: libfit1DCore.cc:36
Fit1D & operator=(const Fit1D &source)
Definition: libfit1D.cc:49
virtual double f(const double &x) const =0
Definition: libfit1D.h:28
void setData(const std::vector< double > &in_X, const std::vector< double > &in_Y)
Definition: libfit1D.cc:108
void setGuess(const std::vector< double > &lambda_in)
Definition: libfit1DCore.cc:40
double f(const double &x) const
Definition: libfit1D.cc:115
void setData(const std::vector< double > &, const std::vector< double > &)
Definition: libfit1D.h:31
regression
Keywords for regression model.
Definition: libfit1D.h:122
virtual void setLapseRate(const double &)
Definition: libfit1DCore.h:35
void setInfo(const std::string &info)
Definition: libfit1DCore.h:41
Definition: libfit1DCore.h:29
void setDefaultGuess()
Definition: libfit1D.cc:287
size_t min_nb_pts
Definition: libfit1DCore.h:54
~Fit1D()
Definition: libfit1D.h:164
Definition: libfit1D.h:53
void getParams(std::vector< double > &coefficients) const
Calculate the parameters of the fit. The fit has to be computed before.
Definition: libfit1D.h:220
double f(const double &x) const
Definition: libfit1D.cc:232
void setDefaultGuess()
Definition: libfit1D.cc:221
linear, using least squares
Definition: libfit1D.h:130
double f(const double &) const
Definition: libfit1D.h:33
always return zero (this is a way to disable detrending)
Definition: libfit1D.h:123
void setGuess(const std::vector< double > &lambda_in)
Provide a set of initial values for the model parameters. The model can be used right after providing...
Definition: libfit1D.h:192
size_t nParam
Definition: libfit1DCore.h:53
const double nodata
This is the internal nodata value.
Definition: IOUtils.h:60
Quadratic()
Definition: libfit1D.h:90
bool fit()
Compute the regression parameters.
Definition: libfit1D.h:205
A class to perform 1D regressions It works on a time serie and uses either ad-hoc methods or matrix a...
Definition: libfit1D.h:119
void setLapseRate(const double &in_lapse_rate)
Definition: libfit1D.h:42
bool fit_ready
Definition: libfit1DCore.h:55
double f(const double &x) const
Definition: libfit1D.cc:184
Fit1D()
Empty Constructor. The model must be set afterwards. If the model has not been set before calling oth...
Definition: libfit1D.h:138
void getParams(std::vector< double > &o_coefficients) const
Definition: libfit1DCore.cc:29
void setDefaultGuess()
Definition: libfit1D.cc:246
A class to perform non-linear least square fitting. It works on a time serie and uses matrix arithmet...
Definition: libfit1DCore.h:68
void setDefaultGuess()
Definition: libfit1D.cc:304
std::string regname
Definition: libfit1DCore.h:51
linear variogram
Definition: libfit1D.h:126
RatQuadVario()
Definition: libfit1D.h:76
bool setModel(const regression &i_regType, const std::vector< double > &in_X, const std::vector< double > &in_Y, const bool &updatefit=true)
Set or reset the regression model.
Definition: libfit1D.cc:76
void setDefaultGuess()
Definition: libfit1D.cc:271
std::string toString() const
Definition: libfit1D.h:253
ExpVario()
Definition: libfit1D.h:69
double f(const double &x) const
Definition: libfit1D.cc:257
void setDefaultGuess()
Definition: libfit1D.cc:202
NoisyLinear()
Definition: libfit1D.h:49
double operator()(const double &x) const
Calculate a value using the computed least square fit. The fit has to be computed before...
Definition: libfit1D.h:251
spherical variogram
Definition: libfit1D.h:128
Zero()
Definition: libfit1D.h:30
Definition: libfit1D.h:36
Definition: libfit1D.h:74