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 86 87 88 89 90 91 92 93
| #include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define PI 3.1415926535
FILE *fichier;
///////////////
/* A DEFINIR */
///////////////
double func(double x){
return( exp(-x)*sin(1/(x*x)) ); // CHOISIR FCT
}
double a=0.1; // CHOISIR BORNE INF
double b=10; // CHOISIR BORNE SUP
int NMAX=20; // CHOISIR NB ETAPES
///////////////
/* FONCTION DEFINIE */
///////////////
/* procedure integration romberg */
float int_romberg(){
int n=1;
// creation et ouverture fichier donnees
fichier=fopen("int_romberg.txt","w+");
double T[NMAX][NMAX]; // def matrice T
// initialisation a zero
int k=0,l=0;
for(k=0;k<NMAX;k++){
for(l=0;l<NMAX;l++){
T[k][l]=0;
}
}
for(n=1;n<NMAX+1;n++){
double h=1.*(b-a); // def h0
int i=0,j=0,m=0;
T[0][0]=1.*2/h*(func(a)+func(b)); // ini T00
for(i=1;i<n+1;i++){ // boucle sur i jusque n
double S=0.;
for(m=1;m<pow(2,i-1)+1;m++){
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
double r=0.;
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