# Mathc initiation/c57a1

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) ); } /* ---------------------------------- */ |