source: Sophya/trunk/SophyaLib/NTools/functab.h@ 3220

Last change on this file since 3220 was 3106, checked in by cmv, 19 years ago

correction erreur #define VFUNCTAB_SEEN -> #define FUNCTAB_SEEN

cmv 06/11/2006

File size: 1.5 KB
RevLine 
[2618]1#ifndef FUNCTAB_SEEN
[3106]2#define FUNCTAB_SEEN
[2618]3
4#include "machdefs.h"
5#include "tvector.h"
6#include "tarray.h"
7
8namespace SOPHYA {
9
10class FuncTab {
11public:
12 FuncTab(double (*func)(double const),uint_4 nbin,r_8 xmin,r_8 xmax);
13 virtual ~FuncTab(void);
14
15 //! Give values for the index [0] and [NTab+1]
16 void SetLimVal(void);
17 void SetLimVal(r_8 val0,r_8 valn);
18
19 //! Interpolation type
20 void SetInterp(uint_2 typ=0);
21
22 //! L'index de la valeur tabulee la plus proche de x (entre 1 et NTab)
23 inline uint_4 IndexNear(r_8 x)
24 {uint_4 i=(uint_4)((x-XMin)/Dx+0.5) +1; return (i>NTab)? NTab: i;}
25 //! L'index de la valeur tabulee juste inferieure a x (entre 1 et NTab)
26 inline uint_4 IndexLow(r_8 x)
27 {uint_4 i=(uint_4)((x-XMin)/Dx) +1; return (i>NTab)? NTab: i;}
28
29 //! L'abscisse pour la valeur i de l'index
30 inline r_8 X(uint_4 i) {return XMin+(i-1)*Dx;}
31
32 //! Le valeur tabulee la plus proche de x
33 inline r_8 Value(r_8 x) {return Tabul[IndexNear(x)];}
34
35 //! L'interpolation lineaire dans le bin (attention no-protection for time saving)
36 inline r_8 ValueL(r_8 x)
37 {uint_4 i=IndexLow(x);
38 return Tabul[i]+PInterpL[i]*(x-X(i));}
39
40 //! L'interpolation parabolique (attention no-protection for time saving)
41 inline r_8 ValueP(r_8 x)
42 {uint_4 i=IndexLow(x); x -= X(i);
43 return Tabul[i]+PInterpP[0][i]*x*x+PInterpP[1][i]*x;}
44
45protected:
46 double (*Func)(double const);
47 uint_4 NTab;
48 r_8 XMin,XMax,Dx;
49 r_8 *Tabul;
50 r_8 *PInterpL;
51 r_8 *PInterpP[2];
52};
53
54} // Fin du namespace
55
56#endif
Note: See TracBrowser for help on using the repository browser.