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
| int main(void){
//Condition Initial
double t0=0.0 , tmax=25;
char nom1[20];
char nom2[20];
int ValeurdeN[4]={50,100,200,400}; //on fait varier le pas.
// Ecriture de l'erreur
FILE*eulerErr=fopen("euler_err.txt","w+");
FILE*exact=fopen("val_exacte.txt","w+");
if (eulerErr==NULL||exact==NULL){
puts("ERREUR a l'ouverture. Fin du programme");
return 0;
}
for (int i=0; i<4; i++){
er1=0;
h=tmax/ValeurdeN[i];
sprintf(nom1,"val_euler_N=%d.txt",ValeurdeN[i]);
sprintf(nom2,"val_rk2_N=%d.txt",ValeurdeN[i]);
FILE*euler=fopen(nom1,"w+");
FILE*rk=fopen(nom2,"w+");
if (rk==NULL||euler==NULL ){
puts("ERREUR a l'ouverture. Fin du programme");
return 0;
}
// Valeur inital
t=t0; v1=v0; vth=vtheo(t,30); v2=v0;
for(int p=0; p<=ValeurdeN[i]; p++){
// Ecriture des fichiers
fprintf(exact,"%lf\t%lf\n",t,vth);
fprintf(euler,"%lf\t%lf\n",t,v1);
fprintf(rk,"%lf\t%lf\n",t,v2);
//Euleur
v1=....
// Runge-Kutta ordre 2 Euler modifie
vt=...
v2=....
//Commun à toute les methodes
t=t+h;
vth=....
if (er1<fabs(v1-vth)) er1=fabs(v1-vth);
}
fprintf(eulerErr,"%f\t%f\n",h,er1);
fclose(exact);fclose(euler);fclose(rk);
}
} |
Partager