ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/template/src/tpl_fonction.h
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Content type: text/plain
Original Path: magic/lib/template/template/src/tpl_fonction.h
File size: 2459 byte(s)
Log Message:

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuillière et Vincent FRANCOIS
5     // Département de Génie Mécanique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du département
8     // de génie mécanique de l'Université du Québec à
9     // Trois Rivières
10     // Les librairies ne peuvent être utilisées sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // tpl_fonction.h
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 à 11H24
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #ifndef _TPLFONCTION_
24     #define _TPLFONCTION_
25    
26    
27    
28     template <class A,class B,class C>
29     class TPL_FONCTION1
30     {
31     public:
32     TPL_FONCTION1(B& bb,A (*fonc)(B&,C)):f(fonc),b(bb)
33     {
34     };
35    
36     virtual ~TPL_FONCTION1()
37     {
38     };
39    
40    
41    
42     A integrer_gauss_2(C t1,C t2,int nb_pas=32)
43     {
44     double integrale=0.;
45     for (int i=0;i<nb_pas;i++)
46     {
47     C ti=t1+(t2-t1)*i/nb_pas;
48     C tii=t1+(t2-t1)*(i+1)/nb_pas;
49     double t=0.7886751345*tii+0.2113248654*ti;
50     integrale=integrale+0.5*(tii-ti)*f(b,t);
51     t=0.7886751345*ti+0.2113248654*tii;
52     integrale=integrale+0.5*(tii-ti)*f(b,t);
53     }
54     return integrale;
55     };
56    
57    
58     void integrer_jusqua_gauss_2 (C x1, C dx, C valeur_integrale_cible, C * x2)
59     {
60     C xi, xii;
61     A integrale,integrale_pas_precedent;
62    
63     integrale=0;
64     xii = x1;
65    
66     do
67     {
68     xi = xii;
69     xii = xi+dx;
70     integrale_pas_precedent=integrale;
71     double x=0.7886751345*xii+0.2113248654*xi;
72     integrale=integrale+0.5*dx*f(b,x);
73     x=0.7886751345*xi+0.2113248654*xii;
74     integrale=integrale+0.5*dx*f(b,x);
75     }
76     while ( fabs (integrale) < fabs (valeur_integrale_cible) );
77     *x2=xi+(xii-xi)*(valeur_integrale_cible-integrale_pas_precedent)/(integrale-integrale_pas_precedent);
78    
79     if ( fabs((*x2-x1)/dx) < 32)
80     integrer_jusqua_gauss_2 (x1, (*x2-x1)/40, valeur_integrale_cible, x2);
81    
82     }
83    
84    
85    
86     private:
87     A (*f)(B&,C);
88     B& b;
89     };
90    
91    
92    
93    
94     #endif
95    
96