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

Soyez le premier à donner votre avis sur cette source.

Vue 13 047 fois - Téléchargée 685 fois

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

Ajouter un commentaire Commentaire
Messages postés
68
Date d'inscription
vendredi 28 février 2003
Statut
Membre
Dernière intervention
17 août 2005

Donnez moi votre avis, vos conseil que je puisse m'améliorer !

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.