Résolution d'une équation différentielle par la méthode d'euler

Description

Ce programme résout l'équation différentielle de la décroissance radioactive
dN/dt-lN=0 , grâce à la méthode d'Euler. Les résultats peuvent êtres conservés
dans un fichier afin d'en tracer le graphique.

Source / Exemple :


/* 

developped by Vanderbruggen Thomas; november 2002; compilé avec dev-C++;
Ce programme résout l'équation différentielle de la décroissance radioactive dN/dt-lN=0 , grâce à la méthode d'Euler. Les résultats peuvent êtres conservés dans un fichier afin d'en tracer le graphique.
  • /
/*les includes */ #include <stdio.h> /* déclaration des variables */ int i, n; float t, l, p, m, T; float N[10000], dN[10000]; char val; FILE* sortie = NULL; FILE* sortie2 = NULL; /* bloc d'instructions */ int main() { printf("RESOLUTION DE L'EQUATION DIFFERENTIELLE DE DECROISSANCE RADIOACTIVE.\n"); /* saisie des données */ printf(" -conditions initiales :\n"); printf(" t0 : "); scanf("%f", &t); printf(" N0 : "); scanf("%f", &N[0]); printf(" -constante de radioactivite :\n"); printf(" lambda : "); scanf("%f", &l); printf(" -pas : "); scanf("%f", &p); retour:; printf(" -nombre de calculs (<10000) : "); scanf("%d", &n); if (n>=10000) { printf("%d est superieur à 10000\n",n); goto retour; } /* calculs */ printf("\n t dN/dt N\n"); printf(" %f %f %f\n", t, (- l * N[0]), N[0]); dN[0] = - l * N[0]; for (i=1; i<=n; i++) // routine de calcul, selon { // la méthode d'Euler. T = t + (i * p); dN[i] = - l * N[i - 1]; N[i] = N[i - 1] + (dN[i] * p) ; printf(" %f %f %f\n", T, dN[i], N[i]); } /* ****************************************************** */ /* sauvegarde des données dans un le fichier donnees.txt */ /* ****************************************************** */ /* demande s'il faut effectuer la sauvegarde */ printf("\n Souhaitez vous sauvegarder ces donnees dans un fichier ? (O/N)\n"); val=getchar(); // attend la saisie d'un caractère while (val!='o' && val!='O' && val!='n' && val!='N') // vérifie le caractère { val=getchar(); } if (val == 'o' || val=='0') { /* **************************************************** */ /* enregistrement du fichier donnees.txt */ /* **************************************************** */ sortie = fopen("C:\\donnees.txt", "wt"); //ouvre ou créer le fichier donnees.txt en mode écriture if (sortie == NULL) //renvoi un message d'erreur si le fichier n'a pas pu être ouvert ou créé { printf("\nErreur dans la creation du fichier donnees.txt\n"); return -1; } printf("\nle fichier donnees.txt a ete correctement ouvert\n"); printf("enregistrement de donnees.txt...\n"); /* Enregistrement du fichier */ fprintf(sortie, "\n t dN/dt N\n"); fprintf(sortie, " %f %f %f\n", t, (- l * N[0]), N[0]); for (i=1; i<=n; i++) { T = t + (i * p); dN[i] = - l * N[i - 1]; N[i] = N[i - 1] + (dN[i] * p) ; fprintf(sortie, " %f %f %f\n", T, dN[i], N[i]); } fprintf(sortie,"\n****** FIN DE FICHIER ******\n"); fclose(sortie); printf("donnees enregistrees !\n"); /* **************************************************** */ /* enregistrement du fichier courbe.txt */ /* **************************************************** */ sortie2 = fopen("C:\\courbe.txt", "wt"); //ouvre ou créer le fichier courbe.txt en mode écriture if (sortie2 == NULL) //renvoi un message d'erreur si le fichier n'a pas pu être ouvert ou créé { printf("\nErreur dans la creation du fichier courbe.txt\n"); return -1; } printf("\nle fichier courbe.txt a ete correctement ouvert\n"); printf("enregistrement de courbe.txt...\n"); fprintf(sortie2, "%f,%f\n", t, N[0]); for (i=1; i<=n; i++) { T = t + (i * p); dN[i] = - l * N[i - 1]; N[i] = N[i - 1] + (dN[i] * p) ; fprintf(sortie2, "%f,%f\n", T, N[i]); } fclose(sortie2); printf("donnees enregistrees !\n"); } scanf("%f", &m); return 0; }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.