Accueil > Forum > > > > code ecris de la croissance
code ecris de la croissance
mercredi 13 mai 2009 à 01:21:04 |
code ecris de la croissance

Flopy21
|
Salut, en fait j'ai ecris le code avec beaucoup de difficultes et quelques aides de part et d'autres personnes. Mais j'ai rencontrer des problemes lors de l'analyse des donnees obtenues: - j'aimerai obtenir les rayons de départ (ie initiaux) en fonction du nombre d'itérations pour pouvoir etablir un histogramme - Calculer la moyenne des rayons de départ = rm qui est le rayon moyen de la distribution - j'ai un sérieux problèmes pour effectuer des itérations dans tout le programme (contenant les procedures A,B,C,D,H,I,J) le programme doit se repeter I fois s.v.p j'ai besoin de votre aide ...
/* Déclaration des directives*/ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctime> #include <math.h> #include <string.h>
/*Déclaration des constantes*/ #define K 8.614e-5 //1.3807e-23J/K #define Gamma 8.0836e14 //1.295J/Cm2 #define Omega 1e-23 #define PI 3.1415926535897932384626433832795 #define Ec 0.01
/*procedure permettant de generer les rayons dans 1 tableau t avec la formule de tchebytchev*/ double * GenererRayon(double moyenne,int N){ int i; double *t; // pointeur vers tableau t contenant les rayons generés double a=moyenne-Ec, // Ec : écart type b=moyenne+Ec; t=new double[N]; // tableau contenent les n rayons for(i=0;i<N;i++){ t[i]=(a+b)/2+((a-b)/2)*cos(((2*i+1)*PI)/(2*(N+1))); } return t; } //-----------procedure calculant le retrécissement Dri pour un rayon donné------ double DeltaRayon(double ri, int T,double Dt){ double DvCeq_v, Dri; DvCeq_v=0.6*expl(-46784.30462/T); Dri=-1*Dt*(1/ri)*DvCeq_v*expl((2*Gamma*Omega/K)*(1/(ri*T))); return Dri; } //---------Nouveaux rayons(rp)obtenus après rétrecissement---------------------- double * NouveauRayon(double ri[],int T,int N,double Dt){ double *rp=new double[N]; int i; for(i=0;i<N;i++){ rp[i]=ri[i]+DeltaRayon(ri[i],T,Dt); //calcule les rayons apres retrecicement pour tous les Dri if(rp[i]<0)rp[i]=0; } return rp; }
//--DN---nombre de lacunes libérées--------------------------------------------- double DeltaN(int N, double rp[],int T,double Dt){ double Dn=0; int i,j; for(i=0;i<N;i++) { if(rp[i]!=0) { Dn+=(DeltaRayon(rp[i],T,Dt)*4*PI*rp[i]*rp[i])/Omega; } } return Dn; } //----------condition de tronquage---------------------------------------------- double* VerifierRayon(double rp[], int N, double &Dn,double moyenne){ int i; double *r=rp; for(i=0;i<N;i++) { if(rp[i]<(moyenne/3)) { Dn+=((4*PI*rp[i]*rp[i]*rp[i])/Omega); rp[i]=0; } } return r; } //--dri exprimant la croissancce, calculée à partir des nouveaux rayons rp------ double * driResultat(int N, double rp[],double Dn){ double *dri,s=0; int i; dri=new double[N]; for(i=0;i<N;i++) s+=rp[i]; for(i=0;i<N;i++) { if(rp[i]!=0) dri[i]=(rp[i]/s)*Dn*(Omega/(4*PI*rp[i]*rp[i])); else dri[i]=0; } return dri; } //-------rayons des cavités à la fin du recuit---------------------------------- double * RayonsFinaux(double rp[],double dri[],int N, double &s){ double *rf=new double[N]; s=0; int i; for(i=0;i<N;i++){ rf[i]=rp[i]-dri[i]; //Nous avons pris le signe - pour mieux exprimer la croissance car dri est négatif s+=rf[i]; } s/=N; return rf; } //---nombre de rayons restants après condition----------------------------------- int RayonRestant(double rp[],int N){ int i, k=N; for(i=0;i<N;i++){ if(rp[i]==0)k--; } return k; }
//------------------------------------------------------------------------------ void RayonDepart(char *c,double ri[],int N,char*s){ char nom[80]=""; strcpy(nom,s); //strcpy: copie s dans nom strcat(nom,"\\rayon"); //strcat: concatène deux chaines de caractere strcat(nom,c); strcat(nom,".txt"); FILE *f=fopen(nom,"w+t"); int i; fprintf(f,"RAYONS DEPART:\n\n"); for(i=0;i<N;i++) fprintf(f,"%20.10lf\n",ri[i]); fclose(f); } //------------------------------------------------------------------------------ void RayonNew(char *c,double rp[],int N,char* s){ char nom[80]=""; strcpy(nom,s); strcat(nom,"\\nouveaurayon"); strcat(nom,c); strcat(nom,".txt"); FILE *f=fopen(nom,"w+t"); int i; fprintf(f,"Nouveaux Rayons:\n\n"); for(i=0;i<N;i++) if(rp[i]!=0) fprintf(f,"%20.10lf\n",rp[i]); fclose(f); } //------------------------------------------------------------------------------ void rayonrester(double r,char*s){ char nom[80]=""; strcpy(nom,s); strcat(nom,"\\Rayons Restants.txt"); FILE *f=fopen(nom,"w+t"); fprintf(f,"%20.10lf\n",r); fclose(f); }
//------------------------------------------------------------------------------ void moyenneRayonFinaux(char *c,double r,char*s){ char nom[80]=""; strcpy(nom,s); strcat(nom,"\\moyenneRayonFinaux"); strcat(nom,c); strcat(nom,".txt"); FILE *f=fopen(nom,"w+t"); fprintf(f,"%20.10lf\n",r); fclose(f); } //------------------------------------------------------------------------------ void afficheRF(char *c,double rf[],int N,char*s){ char nom[80]=""; strcpy(nom,s); strcat(nom,"\\Rayons Finaux"); strcat(nom,c); strcat(nom,".txt"); FILE *f=fopen(nom,"w+t"); int i; fprintf(f,"Rayons Finaux:\n\n"); for(i=0;i<N;i++) if(rf[i]!=0) fprintf(f,"%40.17lf\n",rf[i]); fclose(f); }
/*Programme principale*/ int main(){ system("mkdir c:\\resultat"); double *Rayon,*NewRayon, *Deltarayon,*RayonFinaux, moyenne, *dri, Dt, s1, I, Dn; int T=973, i,j,k=0,p=1, t, N=250, N1; char *c,s[5],rep1[30],rep[30],rep2[30],rep3[30],make[30],make1[30],make2[30],make3[30]; moyenne=0.499; // 0. Temps de recuit t, temps d'icrementation dt et nombre d'itérations I=t/dt t=100; // temps de recuit Dt=1e-3; // temps d'incrémentation I=t/Dt;
// 2. Boucle de 1 a I while(Dt<100) { // Creation des noms des fichiers resultats itoa(p,s,10); strcpy(rep,"c:\\resultat\\Dt"); strcat(rep,s);
strcpy(make,"mkdir "); strcat(make,rep); system(make);
strcpy(rep1,rep); strcat(rep1,"\\nouveau"); strcpy(make1,"mkdir "); strcat(make1,rep1); system(make1); strcpy(rep2,rep); strcat(rep2,"\\finaux"); strcpy(make2,"mkdir "); strcat(make2,rep2); system(make2); strcpy(rep3,rep); strcat(rep3,"\\depart"); strcpy(make3,"mkdir "); strcat(make3,rep3); system(make3); ////////////////////////////// // Initialisation de la temperature de recuit T=973; //Parametres d'affichage k=0; itoa(k,c,10); //////////////// // A. moyenne des rayons moyenne=moyenne+0.001; // 1. Distribution de N bulles de differents rayons Rayon=GenererRayon(moyenne,N);//generer les rayons et les rayons sont envoyer dans le tableau Rayon // B. Calcul du retrecissement intervient dans le calcul des nouveaux rayons // C. Calcul des nouveaux rayons apres retrecissement NewRayon=NouveauRayon(Rayon,T,N,Dt); //callcule les nouveaux rayons et sont mis dans le tableau NewRayon //Calcul du nomre total DN des lacunes liberees Dn=DeltaN(N,NewRayon ,T,Dt);//Calul de DN // E. Tronquer toutes les cavités dont le rayon est inferieur a un rayon seuil fixé NewRayon=VerifierRayon(NewRayon, N,Dn,moyenne);//Verifier les rayons qui ont retrecis et les elimine // Calcul du nombre de cavites restantes N1=RayonRestant(NewRayon,N); rayonrester(N1,rep); //affiche le nombre de rayons restants apres troncature // F. Calcul de l'augmentation des rayons des cavites restantes dri=driResultat(N,NewRayon,Dn);//calcul des dri a afficher // G. Calcul des nouveaux rayons des cavités restantes RayonFinaux=RayonsFinaux(NewRayon,dri,N,s1); // Affichage des resultats RayonDepart(c,Rayon,N,rep3);//afficher les rayon initiaux RayonNew(c,NewRayon,N,rep1);//afficher les nouveaux rayons afficheRF(c,RayonFinaux,N,rep2);//afficher les rayons finaux moyenneRayonFinaux(c,s1,rep2);//afficher la moyenne des rayons finaux /////////////////// //Parametres d'affichage k++; itoa(k,c,10); // H. Solution au probleme numerique soulevé par EVANS if(N1<=(N/2)){ T=973; // J. On pose N=N1 si H est verifiée N=N1; //Parametres d'affichage k=0; itoa(k,c,10); /////////////// } } return 0; }
|
|
Cette discussion est classée dans : int, double, strcat, rp, rayons
Répondre à ce message
Sujets en rapport avec ce message
Aide [ par eikonos ]
Je travail sur une dll appellé psfg.dllj'ai ces lignes suivant de codetypedef struct CAMERAPARAM_tag{int nGain;int nOffset;int bOffsetFix;int nUpperLi
cosinus [ par anek971 ]
Bonjour ,ben avt de demander de l'aide j'ai chercher sur le forum mais ya pas le programme en c.Et en faite c juste pr une verification car mon progra
tableau a double entrée alloué dynamiquement [ par amortlintelligence ]
Voila j'aurais voulu utiliser un tableau (tableau de tableau) dans une fonction. Je pense qu'il faut donc que je le crée dynamiquement avec un code du
probleme cast [ par morgandetoi06 ]
svp aidez moi...j utilise la fonction pow qui renvoie un doubledonc je fait double b; // nombredouble j; // exposantdouble n; // reponsen=pow(b,j);don
Segmentation Fault....en traitement d'image [ par psysta ]
Bonjour,je suis nouveau dans la programmation en C. J'ai un programme Matlab qui marche bien, et je souhaiterais l'implémenter en C. Le pgm compile bi
class matrice [ par flaky ]
Slt à tousJ'utilise une classe "matrice" (celle de nicolas aunai, téléchargée sur le site) qui fonctionne très bien. Mais j'ai du mal à manipuler l'ob
C++ de merde...enfin je veux dire... [ par brindillee ]
Salut,J'ai un petit soucis qui me cause des grands soucis...Voila j'ai choppé une fonction de décomposition (svd...) en C++ sur le net mais je n'arriv
probleme reallocation memoire vecteur [ par savoyard ]
double *b;//fction allocation memoire: (permet d'allouer pas obligatoirement à partir de b[0] mais d ou on veut:double *dvector(int nl,int nh){double
Lecture d'un fichier quelconque [ par jb60 ]
Bonjour,J'aimerais savoir si il est possible de lire les données d'un fichier quelconque lorsqu'on ne connait pas le format du fichier d'origine... Je
aide sur un algorithme en dec-C++ [ par viagra ]
je souhaiterais être aidé sur un algorithme sur lequel j'éprouve des problemes. en effet lorsque je compile aussi bien au niveau de dev-c++ et MSYS, l
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|