Mathc initiation/Fichiers h : c54da

Sommaire

Présentation de la fonction de Green.
Intégrale double (dydx) Fonction de Green (dydx)
/* ---------------------------------- */
double simpson_dydx(
double (*P_f)(double x, double y),

   
double (*P_u)(double x),
double (*P_v)(double x),
   int     ny,

double ax,
double bx,
   int nx
)
{
   int i = 0;
double m = 0.;
double M = 0.;

 for(i = 0; i <= nx; i++)
 {
       if(i ==0 || i== nx){m = 1.;}
  else if(fmod(i,2) == 0) {m = 2.;}
  else                    {m = 4.;}

  M += m * int_dy((*P_f),  
                  (*P_u),(*P_v),ny, 
                  (ax + i*(bx-ax)/nx));
 }

  return( ((bx -ax)*M) / (3*nx) );
}
/* ---------------------------------- */
/* ---------------------------------- */
double green_dydx(
double (*P_M)(double x, double y),
double (*P_N)(double x, double y),
   
double (*P_u)(double x),
double (*P_v)(double x),
   int ny,

double ax,
double bx,
   int nx)
{
   int i = 0;
double m = 0.;
double M = 0.;

 for(i = 0; i <= nx; i++)
 {
       if(i ==0 || i== nx){m = 1.;}
  else if(fmod(i,2) == 0 ){m = 2.;}
  else                    {m = 4.;}

  M += m * gint_dy( (*P_M),(*P_N),                    
                    (*P_u),(*P_v),ny,                      
                    (ax + i*(bx-ax)/nx));
 }

  return( ((bx -ax)*M) / (3*nx) );
}
/* ---------------------------------- */

Comparons les deux fonctions.

Dans les deux premières colonnes, il y a la fonction de référence pour calculer une intégrale double par la méthode de Simpson. Dans les deuxièmes colonnes il y a les deux fonctions pour calculer la fonction de Green.


On peut remarque que dans les fonctions de Green il y a une fonction supplémentaire en entrée. (Voir (*P_M),(*P_N) ). Il y a aussi le paramètre h pour calculer les équations partielles. (Voir fxy_x());

Dans la deuxième partie de la fonction de Green, il y a le calcul des dérivées partielles au lieu d'un simple appel à la fonction f.


En comparant ces deux fonctions aux fonctions de référence, on voit immédiatement l'analogie qu'il existe entre ces fonctions.


Présentation de la fonction de Green.
Intégrale double (dydx) Fonction de Green (dydx)
/* ---------------------------------- */
double int_dy(
double (*P_f)(double x, double y),


double (*P_u)(double x),
double (*P_v)(double x),
   int     ny,
   
double x
)
{
pt2d  t;

   int i = 0;
double m = 0.;
double M = 0.;

 for(i = 0; i <= ny; i++)
 {
       if(i ==0 || i== ny){m = 1.;}
  else if(fmod(i,2) == 0) {m = 2.;}
  else                    {m = 4.;}
  
  t.x = x;
  t.y = ((*P_u)(x))+
     i*(((*P_v)(x))-((*P_u)(x)))/ny;

  M += m * (*P_f)(t.x, t.y);

 }

 return(((((*P_v)(x))-((*P_u)(x)))*M)/(3*ny));
}
/* ---------------------------------- */
/* ---------------------------------- */
double gint_dy(
double (*P_M)(double x, double y),
double (*P_N)(double x, double y),

double (*P_u)(double x),
double (*P_v)(double x),
   int ny,
   
double x
)
{
pt2d t;

   int i = 0;
double m = 0.;
double M = 0.;

 for(i = 0; i <= ny; i++)
 {
       if(i ==0 || i== ny){m = 1.;}
  else if(fmod(i,2) == 0 ){m = 2.;}
  else                    {m = 4.;}
  
  t.x = x;
  t.y = ((*P_u)(x))+
     i*(((*P_v)(x))-((*P_u)(x)))/ny;

  M += m * ( fxy_x((*P_N),H,t)-
             fxy_y((*P_M),H,t) ) ;
 }

 return(((((*P_v)(x))-((*P_u)(x)))*M)/(3*ny));
}
/* ---------------------------------- */