--- imach/src/imach.c 2003/05/03 01:18:24 1.75 +++ imach/src/imach.c 2003/05/16 10:44:42 1.76 @@ -1,4 +1,4 @@ -/* $Id: imach.c,v 1.75 2003/05/03 01:18:24 brouard Exp $ +/* $Id: imach.c,v 1.76 2003/05/16 10:44:42 brouard Exp $ Interpolated Markov Chain Short summary of the programme: @@ -119,7 +119,7 @@ #define ODIRSEPARATOR '\\' #endif -char version[80]="Imach version 0.95, May 2003, INED-EUROREVES "; +char version[80]="Imach version 0.95a, May 2003, INED-EUROREVES "; int erreur; /* Error number */ int nvar; int cptcovn=0, cptcovage=0, cptcoveff=0,cptcov; @@ -141,7 +141,7 @@ double jmean; /* Mean space between 2 wa double **oldm, **newm, **savm; /* Working pointers to matrices */ double **oldms, **newms, **savms; /* Fixed working pointers to matrices */ FILE *fic,*ficpar, *ficparo,*ficres, *ficrespl, *ficrespij, *ficrest,*ficresf,*ficrespop; -FILE *ficlog; +FILE *ficlog, *ficrespow; FILE *ficgp,*ficresprob,*ficpop, *ficresprobcov, *ficresprobcor; FILE *ficresprobmorprev; FILE *fichtm; /* Html File */ @@ -327,6 +327,21 @@ void free_vector(double*v, int nl, int n } /************************ivector *******************************/ +char *cvector(long nl,long nh) +{ + char *v; + v=(char *) malloc((size_t)((nh-nl+1+NR_END)*sizeof(char))); + if (!v) nrerror("allocation failure in cvector"); + return v-nl+NR_END; +} + +/******************free ivector **************************/ +void free_cvector(char *v, long nl, long nh) +{ + free((FREE_ARG)(v+nl-NR_END)); +} + +/************************ivector *******************************/ int *ivector(long nl,long nh) { int *v; @@ -647,11 +662,15 @@ void powell(double p[], double **xi, int del=0.0; printf("\nPowell iter=%d -2*LL=%.12f",*iter,*fret); fprintf(ficlog,"\nPowell iter=%d -2*LL=%.12f",*iter,*fret); - for (i=1;i<=n;i++) + fprintf(ficrespow,"%d %.12f",*iter,*fret); + for (i=1;i<=n;i++) { printf(" %d %.12f",i, p[i]); - fprintf(ficlog," %d %.12f",i, p[i]); + fprintf(ficlog," %d %.12lf",i, p[i]); + fprintf(ficrespow," %.12lf", p[i]); + } printf("\n"); fprintf(ficlog,"\n"); + fprintf(ficrespow,"\n"); for (i=1;i<=n;i++) { for (j=1;j<=n;j++) xit[j]=xi[j][i]; fptt=(*fret); @@ -1187,14 +1206,27 @@ void mlikeli(FILE *ficres,double p[], in int i,j, iter; double **xi; double fret; + char filerespow[FILENAMELENGTH]; xi=matrix(1,npar,1,npar); for (i=1;i<=npar;i++) for (j=1;j<=npar;j++) xi[i][j]=(i==j ? 1.0 : 0.0); printf("Powell\n"); fprintf(ficlog,"Powell\n"); + strcpy(filerespow,"pow"); + strcat(filerespow,fileres); + if((ficrespow=fopen(filerespow,"w"))==NULL) { + printf("Problem with resultfile: %s\n", filerespow); + fprintf(ficlog,"Problem with resultfile: %s\n", filerespow); + } + fprintf(ficrespow,"# Powell\n# iter -2*LL"); + for (i=1;i<=nlstate;i++) + for(j=1;j<=nlstate+ndeath;j++) + if(j!=i)fprintf(ficrespow," p%1d%1d",i,j); + fprintf(ficrespow,"\n"); powell(p,xi,npar,ftol,&iter,&fret,func); - printf("\n#Number of iterations = %d, -2 Log likelihood = %.12f\n",iter,func(p)); + fclose(ficrespow); + printf("\n#Number of iterations = %d, -2 Log likelihood = %.12f\n",iter,func(p)); fprintf(ficlog,"\n#Number of iterations = %d, -2 Log likelihood = %.12f \n",iter,func(p)); fprintf(ficres,"#Number of iterations = %d, -2 Log likelihood = %.12f \n",iter,func(p)); @@ -2792,7 +2824,7 @@ fprintf(fichtm," \n