Mathc initiation/c57a1

Un livre de Wikilivres.


Sommaire

Présentation de la fonction de Stokes.
Intégrale double (dydx) Intégrale double de Stokes (dxdy)
.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.
/* ---------------------------------- */
/* ---------------------------------- */
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  curlF_Ngrd_S(

double (*P_M)(double x, double y, double z),
double (*P_N)(double x, double y, double z),
double (*P_P)(double x, double y, double z),

double (*P_f)(double x, double y),

pt2d p
)
{
v3d  Ngrd;
v3d  curl;
pt3d  p3d;

     p3d.x = p.x;
     p3d.y = p.y;
     p3d.z = (*P_f)(p.x,p.y);

  Ngrd = Ngradian_ijk((*P_f), p);
  curl =     curl_ijk((*P_M),(*P_N),(*P_P), p3d);

 return( ( Ngrd.i*curl.i +
           Ngrd.j*curl.j +
           Ngrd.k*curl.k ) *

          sqrt( pow(fxy_x((*P_f),H,p),2) +
                pow(fxy_y((*P_f),H,p),2) +
                                      1)
             );
}

/* ---------------------------------- */
/* ---------------------------------- */
double stokes_dxdy(

double (*P_M)(double x, double y, double z),
double (*P_N)(double x, double y, double z),
double (*P_P)(double x, double y, double z),

double (*P_f)(double x, double y),

double (*P_u)(double y),
double (*P_v)(double y),
   int nx,
   
double ay,
double by,
   int ny
)
{
   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.;}

 M += m * stokes_dx((*P_M),(*P_N),(*P_P),
                    (*P_f),
                    (*P_u),(*P_v),nx,
                    (ay + i*(by-ay)/ny));
 }

  return( ((by -ay)*M) / (3*ny) );
}
/* ---------------------------------- */

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 Stoke.


En comparant les 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 Stokes.
Intégrale double (dydx) Fonction de Stokes (dxdy)
/* ---------------------------------- */
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  p;

   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.;}
  
  p.x = x;
  p.y = ((*P_u)(x))+
     i*(((*P_v)(x))-((*P_u)(x)))
                   /ny;

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



 }

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

double (*P_f)(double x, double y),

double (*P_u)(double y),
double (*P_v)(double y),
   int   nx,
   
double y
)
{
pt2d p;

   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.;}

 p.x =   ((*P_u)(y))+ 
      i*(((*P_v)(y))-((*P_u)(y)))
                    /nx;
 p.y = y;

 M += m * curlF_Ngrd_S(
              (*P_M),(*P_N),(*P_P),
              (*P_f),
                p);
 }

return(((((*P_v)(y))-((*P_u)(y)))*M)
                    /(3*nx) );
}
/* ---------------------------------- */