QtiPlot
0.9.8.2
|
00001 /*************************************************************************** 00002 File : fitclasses.h 00003 Project : QtiPlot 00004 -------------------------------------------------------------------- 00005 Copyright : (C) 2006 by Ion Vasilief 00006 Email (use @ for *) : ion_vasilief*yahoo.fr 00007 Description : Exponential fit classes 00008 00009 ***************************************************************************/ 00010 00011 /*************************************************************************** 00012 * * 00013 * This program is free software; you can redistribute it and/or modify * 00014 * it under the terms of the GNU General Public License as published by * 00015 * the Free Software Foundation; either version 2 of the License, or * 00016 * (at your option) any later version. * 00017 * * 00018 * This program is distributed in the hope that it will be useful, * 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00021 * GNU General Public License for more details. * 00022 * * 00023 * You should have received a copy of the GNU General Public License * 00024 * along with this program; if not, write to the Free Software * 00025 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 00026 * Boston, MA 02110-1301 USA * 00027 * * 00028 ***************************************************************************/ 00029 #ifndef EXPONENTIALFIT_H 00030 #define EXPONENTIALFIT_H 00031 00032 #include "Fit.h" 00033 00034 class ExponentialFit : public Fit 00035 { 00036 Q_OBJECT 00037 00038 public: 00039 ExponentialFit(ApplicationWindow *parent, QwtPlotCurve *c, bool expGrowth = false); 00040 ExponentialFit(ApplicationWindow *parent, QwtPlotCurve *c, double start, double end, bool expGrowth = false); 00041 ExponentialFit(ApplicationWindow *parent, Graph *g, bool expGrowth = false); 00042 ExponentialFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, bool expGrowth = false); 00043 ExponentialFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, 00044 double start, double end, bool expGrowth = false); 00045 ExponentialFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1, bool expGrowth = false); 00046 00047 double eval(double *par, double x){return par[0]*exp(-x/par[1]) + par[2];}; 00048 bool isExponentialGrowth(){return is_exp_growth;}; 00049 00050 private: 00051 void init(); 00052 void customizeFitResults(); 00053 void calculateFitCurveData(double *X, double *Y); 00054 00055 bool is_exp_growth; 00056 }; 00057 00058 class TwoExpFit : public Fit 00059 { 00060 Q_OBJECT 00061 00062 public: 00063 TwoExpFit(ApplicationWindow *parent, QwtPlotCurve *c); 00064 TwoExpFit(ApplicationWindow *parent, QwtPlotCurve *c, double start, double end); 00065 TwoExpFit(ApplicationWindow *parent, Graph *g); 00066 TwoExpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle); 00067 TwoExpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end); 00068 TwoExpFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1); 00069 00070 double eval(double *par, double x){return par[0]*exp(-x/par[1]) + par[2]*exp(-x/par[3]) + par[4];}; 00071 00072 private: 00073 void init(); 00074 void calculateFitCurveData(double *X, double *Y); 00075 }; 00076 00077 class ThreeExpFit : public Fit 00078 { 00079 Q_OBJECT 00080 00081 public: 00082 ThreeExpFit(ApplicationWindow *parent, QwtPlotCurve *c); 00083 ThreeExpFit(ApplicationWindow *parent, QwtPlotCurve *c, double start, double end); 00084 ThreeExpFit(ApplicationWindow *parent, Graph *g); 00085 ThreeExpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle); 00086 ThreeExpFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end); 00087 ThreeExpFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1); 00088 00089 double eval(double *par, double x){return par[0]*exp(-x/par[1]) + par[2]*exp(-x/par[3]) + par[4]*exp(-x/par[5]) + par[6];}; 00090 00091 private: 00092 void init(); 00093 void calculateFitCurveData(double *X, double *Y); 00094 }; 00095 #endif