Aller au contenu

Mathc initiation/Fichiers h : c43t1

Un livre de Wikilivres.


Sommaire

Présentons le problème :

Nous avons la fonction simpson(), nous voulons écrire la fonction int_ds(), qui est une variante de la première.

Comparons les fonctions simpson() et int_ds().
La fonction simpson() La fonction int_ds()
/* ---------------------------------- */
/* save as x_dx.h                     */
/* ---------------------------------- */
double simpson(
double (*P_f)(double x),

double a,
double b,
   int n


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

double t = 0.;

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

  t = (a + i*(b-a)/n);

  M += m * (*P_f)(t);
 }

  return( ((b -a)*M) / (3*n) );
}
/* ---------------------------------- */
/* ---------------------------------- */
/* ---------------------------------- */
/* save as x_ds.h                     */
/* ---------------------------------- */
double int_ds(
double (*P_f)(double x),

double a,
double b,
   int n,
   
double h
)
{
   int i = 0;
double m = 0.;
double M = 0.;

double t = 0.;

 for(i = 0; i <= n; i++)
 {
       if(i ==0 || i== n){m = 1.;}
  else if(fmod(i,2) == 0){m = 2.;}
  else                   {m = 4.;}
  
  t = (a + i*(b-a)/n);
  
  M += m * sqrt(1. + pow(fx_x((*P_f),t,h),2));
 }

  return( ((b -a)*M) / (3*n) );
}
/* ---------------------------------- */
/* ---------------------------------- */

La variable "t" a été introduite pour une meilleure visualisation du code.

En fait on a remplacé l'appel à la fonction "(*P_f)(t);" de la méthode de simpson par l'appel à l'équation qui nous permet de calculer la longueur d'arc.

La fonction "in_ds();" a un paramètre supplémentaire. Il permet de contrôler la variation de la variable x dans la fonction qui calcule la dérivée première. Dans la fonction "simpson();" cette valeur est déclaré de manière globale par un define.