source: Sophya/trunk/SophyaLib/NTools/integ.h@ 2283

Last change on this file since 2283 was 2283, checked in by plaszczy, 23 years ago

ajout de classfunc et changements dans integ pour que ca colle

File size: 2.6 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Simple integrator
3// E. Aubourg 1996-...
4// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
5
6#ifndef INTEG_H_SEEN
7#define INTEG_H_SEEN
8
9#include "machdefs.h"
10#include "pexceptions.h"
11#include <set>
12#include "classfunc.h"
13
14namespace SOPHYA {
15
16class GeneralFunction;
17
18class Integrator {
19public:
20 //typedef double(*FUNC)(double);
21 typedef ClassFunc *FUNC;
22 typedef double (*fun)(double);
23
24 Integrator();
25 Integrator(FUNC, double xmin, double xmax);
26 Integrator(FUNC);
27
28 Integrator(fun, double xmin, double xmax);
29 Integrator(fun);
30
31 Integrator(GeneralFunction*, double* par, double xmin, double xmax);
32 Integrator(GeneralFunction*, double* par);
33 virtual ~Integrator();
34
35 virtual double Value() = 0;
36 virtual double ValueBetween(double xmin, double xmax);
37 virtual operator double() {return Value();}
38
39 virtual Integrator& NStep(int);
40 virtual Integrator& DX(double);
41 virtual Integrator& ReqPrec(double); // NOT YET !
42 virtual Integrator& Limits(double xmin, double xmax);
43 virtual Integrator& Func(FUNC);
44 virtual Integrator& Func(GeneralFunction*, double* par);
45
46protected:
47 FUNC mFunc;
48 GeneralFunction* mGFF;
49 double* mGFFParm;
50
51 int mNStep; // -1 si pas fixe
52 double mDX;
53 double mReqPrec;
54 double mXMin, mXMax;
55
56 double FVal(double x) const;
57 virtual void LimitsChanged() {}
58 virtual void StepsChanged() {}
59 virtual void FuncChanged() {}
60};
61
62
63
64class TrpzInteg : public Integrator {
65public:
66 TrpzInteg();
67 TrpzInteg(FUNC, double xmin, double xmax);
68 TrpzInteg(FUNC);
69 TrpzInteg(fun, double xmin, double xmax);
70 TrpzInteg(fun);
71 TrpzInteg(GeneralFunction*, double* par, double xmin, double xmax);
72 TrpzInteg(GeneralFunction*, double* par);
73
74 ~TrpzInteg();
75
76 virtual double Value();
77};
78
79class GLInteg : public Integrator {
80public:
81 GLInteg();
82 GLInteg(FUNC, double xmin, double xmax);
83 GLInteg(FUNC);
84 GLInteg(fun, double xmin, double xmax);
85 GLInteg(fun);
86 GLInteg(GeneralFunction*, double* par, double xmin, double xmax);
87 GLInteg(GeneralFunction*, double* par);
88
89 ~GLInteg();
90
91 virtual double Value();
92 virtual GLInteg& AddBound(double x);
93 virtual GLInteg& SetOrder(int order);
94protected:
95
96 double* mXPos; // integration entre 0 et 1
97 double* mWeights; // integration entre 0 et 1
98 int mOrder; // ordre GL
99 set<double> mBounds; // limites des intervalles d'integration
100
101 void ComputeWeights();
102 void LimitsChanged();
103 void StepsChanged();
104 void InvalWeights();
105 void ComputeBounds();
106};
107
108} // Fin du namespace
109
110#endif
Note: See TracBrowser for help on using the repository browser.