QtiPlot 0.9.7.3
|
00001 /*************************************************************************** 00002 File : PolynomialFit.h 00003 Project : QtiPlot 00004 -------------------------------------------------------------------- 00005 Copyright : (C) 2006 by Ion Vasilief 00006 Email (use @ for *) : ion_vasilief*yahoo.fr 00007 Description : Polynomial Fit and Linear 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 POLYNOMIALFIT_H 00030 #define POLYNOMIALFIT_H 00031 00032 #include "Fit.h" 00033 00034 class PolynomialFit : public Fit 00035 { 00036 Q_OBJECT 00037 00038 public: 00039 PolynomialFit(ApplicationWindow *parent, QwtPlotCurve *c, int order = 2, bool legend = false); 00040 PolynomialFit(ApplicationWindow *parent, QwtPlotCurve *c, double start, double end, int order = 2, bool legend = false); 00041 PolynomialFit(ApplicationWindow *parent, Graph *g, int order = 2, bool legend = false); 00042 PolynomialFit(ApplicationWindow *parent, Graph *g, QString& curveTitle, int order = 2, bool legend = false); 00043 PolynomialFit(ApplicationWindow *parent, Graph *g, QString& curveTitle, double start, double end, int order = 2, bool legend = false); 00044 PolynomialFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1, int order = 2, bool legend = false); 00045 00046 virtual QString legendInfo(); 00047 void fit(); 00048 00049 int order(){return d_order;}; 00050 void setOrder(int order); 00051 00052 static QString generateFormula(int order); 00053 static QStringList generateParameterList(int order); 00054 00055 virtual double eval(double *par, double x); 00056 00057 private: 00058 void init(); 00059 void calculateFitCurveData(double *X, double *Y); 00060 00061 int d_order; 00062 bool show_legend; 00063 }; 00064 00065 class LinearFit : public Fit 00066 { 00067 Q_OBJECT 00068 00069 public: 00070 LinearFit(ApplicationWindow *parent, Graph *g); 00071 LinearFit(ApplicationWindow *parent, QwtPlotCurve *c); 00072 LinearFit(ApplicationWindow *parent, QwtPlotCurve *c, double start, double end); 00073 LinearFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle); 00074 LinearFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end); 00075 LinearFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1); 00076 00077 void fit(); 00078 virtual double eval(double *par, double x){return par[0] + par[1]*x;}; 00079 00080 private: 00081 void init(); 00082 void calculateFitCurveData(double *X, double *Y); 00083 }; 00084 00085 class LinearSlopeFit : public Fit 00086 { 00087 Q_OBJECT 00088 00089 public: 00090 LinearSlopeFit(ApplicationWindow *parent, Graph *g); 00091 LinearSlopeFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle); 00092 LinearSlopeFit(ApplicationWindow *parent, Graph *g, const QString& curveTitle, double start, double end); 00093 LinearSlopeFit(ApplicationWindow *parent, Table *t, const QString& xCol, const QString& yCol, int startRow = 1, int endRow = -1); 00094 00095 void fit(); 00096 virtual double eval(double *par, double x){return par[0]*x;}; 00097 00098 private: 00099 void init(); 00100 void calculateFitCurveData(double *X, double *Y); 00101 }; 00102 #endif