1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#define PI 3.1415926535
#define NMAX 20
///////////////
/* A DEFINIR */
///////////////
double func(double x)
{
return( exp(-x)*sin(1/(x*x)) ); // CHOISIR FCT
}
///////////////
/* FONCTION DEFINIE */
///////////////
float int_romberg()
{
int l,m,n,i,j,k;
double h,S,r;
FILE *fichier;
double a=0.1; // CHOISIR BORNE INF
double b=10; // CHOISIR BORNE SUP
// creation et ouverture fichier donnees
fichier=fopen("int_romberg.txt","w+");
double T[NMAX][NMAX]; // def matrice T
// initialisation a zero
for(k=0;k<NMAX;k++) // tu peux remplacer k par i
for(l=0;l<NMAX;l++)
T[k][l]=0;
for(n=1;n<NMAX;n++)
{
h=1.*(b-a); // def h0
T[0][0]=1.*2/h*(func(a)+func(b)); // ini T00
for(i=1;i<n+1;i++)// boucle sur i jusque n
{
S=0;
for(m=1;m<pow(2,i-1)+1;m++) // tu peux replacer m par l
S=S+func(a+(2*m-1)*h/2); // Calcul d'une somme
T[i][0]=1.*1/2*(T[i-1][0]+h*S); // def Ti0
h=h/2; // h redefini
for(j=1;j<i+1;j++)// boucle sur j jusque i
{
T[i][j]=1.*(pow(4,j)*T[i][j-1]-T[i-1][j-1])/(pow(4,j)-1);
// Etat avancement
printf("n=%d i=%d j=%d T[%d][%d]=%.16lf \n",n,i,j,i,j,T[i][j]);
} // fin boucle sur j
} // fin boucle sur i
r=T[n][n]; // integrale
// ecriture dans un fichier data
fprintf(fichier,"%d %f\n",n,r);
} // fin de la boucle de n nb de decoupe
fclose(fichier); // fermeture fichier donnees
return 0;
}
/* procedure principale */
int main(){
int_romberg(); // appel fonction
printf("FIN\n");
// affichage trace avec bash
system("bash plot.bash");
return 0;
} |
Partager