Aller au contenu

Mathc initiation/003f

Un livre de Wikilivres.

Installer ce fichier dans votre répertoire de travail.

x_spharb.h
/* --------------------------------- */
/* save as x_spharb.h                */
/* --------------------------------- */
double spheric_x_dadrdb(

double (*P_f)(double a, double b, double r),

double (*Pa0)(double b, double r),
double (*Pa1)(double b, double r),
   int   na,
   
double    r,
   
double    b
)
{
double a = 0;
   int i = 0;
double m = 0.;
double M = 0.;

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

  a = ((*Pa0)(b,r)) + i*(((*Pa1)(b,r))-((*Pa0)(b,r)))/na;
  
  M += m * (*P_f)(a,b,r) * r*r * sin(b);
 }

  return( ((((*Pa1)(b,r)) -((*Pa0)(b,r)))*M) / (3*na) );
}
/* --------------------------------- */
double spheric_b_dadrdb(
double (*P_f)(double a, double b, double r),
   
double (*Pa0)(double b, double r),
double (*Pa1)(double b, double r),
   int    na,

double (*PR0)(double b),
double (*PR1)(double b),
   int    nR,
   
double     b
)
{
   int i = 0;
double m = 0.;
double M = 0.;

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

  M += m * spheric_x_dadrdb(  (*P_f),
                           
                             (*Pa0),
                             (*Pa1),
                               na,
                               
                           (((*PR0)(b))+i*(((*PR1)(b))-((*PR0)(b)))/nR),
                               
                              b);
 }

 return( ((((*PR1)(b)) -((*PR0)(b)))*M) / (3*nR) );
}
/* --------------------------------- */
double spheric_dadrdb(
double (*P_f)(double a, double b, double r),
   
double (*Pa0)(double b, double r),
double (*Pa1)(double b, double r),
   int    na,
   
double (*PR0)(double b),
double (*PR1)(double b),
   int    nR,

double    b0,
double    b1,
   int    nb
)
{
   int i = 0;
double m = 0.;
double M = 0.;

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

  M += m *  spheric_b_dadrdb((*P_f),
                               
                             (*Pa0),
                             (*Pa1),
                                na,
                             
                             (*PR0),
                             (*PR1),
                                nR,
                                
                             (b0+i*(b1-b0)/nb));
 }

  return( ((b1 -b0)*M) / (3*nb) );
}
/* --------------------------------- */
/* --------------------------------- */