MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
tpl_fonction.h
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// tpl_fonction.h
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:53:59 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #ifndef _TPLFONCTION_
23 #define _TPLFONCTION_
24 
25 #include <math.h>
26 
27 template <class A,class B,class C>
29 {
30 public:
31 TPL_FONCTION1(B& bb,A (*fonc)(B&,C)):f(fonc),b(bb)
32 {
33 };
34 
35 virtual ~TPL_FONCTION1()
36 {
37 };
38 
39 
40 
41 A integrer_gauss_2(C t1,C t2,int nb_pas=32)
42 {
43 double integrale=0.;
44 for (int i=0;i<nb_pas;i++)
45  {
46  C ti=t1+(t2-t1)*i/nb_pas;
47  C tii=t1+(t2-t1)*(i+1)/nb_pas;
48  double t=0.7886751345*tii+0.2113248654*ti;
49  integrale=integrale+0.5*(tii-ti)*f(b,t);
50  t=0.7886751345*ti+0.2113248654*tii;
51  integrale=integrale+0.5*(tii-ti)*f(b,t);
52  }
53 return integrale;
54 };
55 
56 
57 void integrer_jusqua_gauss_2 (C x1, C dx, C valeur_integrale_cible, C * x2)
58 {
59  C xi, xii;
60  A integrale,integrale_pas_precedent;
61 
62  integrale=0;
63  xii = x1;
64 
65  do
66  {
67  xi = xii;
68  xii = xi+dx;
69  integrale_pas_precedent=integrale;
70  double x=0.7886751345*xii+0.2113248654*xi;
71  integrale=integrale+0.5*dx*f(b,x);
72  x=0.7886751345*xi+0.2113248654*xii;
73  integrale=integrale+0.5*dx*f(b,x);
74  }
75  while ( fabs (integrale) < fabs (valeur_integrale_cible) );
76  *x2=xi+(xii-xi)*(valeur_integrale_cible-integrale_pas_precedent)/(integrale-integrale_pas_precedent);
77 
78  if ( fabs((*x2-x1)/dx) < 32)
79  integrer_jusqua_gauss_2 (x1, (*x2-x1)/40, valeur_integrale_cible, x2);
80 
81 }
82 
83 
84 
85 private:
86 A (*f)(B&,C);
87 B& b;
88 };
89 
90 
91 
92 
93 #endif
94 
95 
virtual ~TPL_FONCTION1()
Definition: tpl_fonction.h:35
A(* f)(B &, C)
Definition: tpl_fonction.h:86
void integrer_jusqua_gauss_2(C x1, C dx, C valeur_integrale_cible, C *x2)
Definition: tpl_fonction.h:57
A integrer_gauss_2(C t1, C t2, int nb_pas=32)
Definition: tpl_fonction.h:41
TPL_FONCTION1(B &bb, A(*fonc)(B &, C))
Definition: tpl_fonction.h:31