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

Last change on this file since 2639 was 2423, checked in by cmv, 22 years ago

Quelques ameliorations mineures cmv 28/8/2003

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