#include #include #include #include #include #include "main.h" #include #include #include static int maxarg1, maxarg2; #define FMAX(a,b) (maxarg1=(a), maxarg2=(b), (maxarg1)>(maxarg2) ? (maxarg1) : (maxarg2)) double **ppLikMat; int **ppDataMat; int *pDataInfo; int numobs, numdata; int MemAlloc() { int i; ppLikMat = (double**)malloc((numobs+1)*sizeof(double*)); if (ppLikMat==NULL) { printf("Can't memalloc ppLikMat\n"); return 0; } for (i=0; i<(numobs+1); i++) { ppLikMat[i]=(double*)malloc((2*numdata+1)*sizeof(double)); if (ppLikMat[i]==NULL) { printf("Can't memalloc ppLikMat[%d]\n",i); return 0; } } ppDataMat = (int**)malloc((numobs+1)*sizeof(int*)); if (ppDataMat==NULL) { printf("Can't memalloc ppDataMat\n"); return 0; } for (i=0; i<(numobs+1); i++) { ppDataMat[i]=(int*)malloc(3*sizeof(int)); if (ppDataMat[i]==NULL) { printf("Can't memalloc ppDataMat[%d]\n",i); return 0; } } pDataInfo = (int*)malloc(numdata*sizeof(int)); if (pDataInfo==NULL) { printf("Can't memalloc pDataInfo\n"); return 0; } return 1; } /*** Function to compute the log likelihood ***/ double my_f(const gsl_vector *v, void *params) { int i, j=0; int flag=0; int cumobs = pDataInfo[0]; double loglik=0.0; double sum=0.0; double paramvec[5]; for (i=0; i<5; i++) paramvec[i] = gsl_vector_get(v, i); for (i=0; i<5; i++) if (paramvec[i]<0.0 || paramvec[i]>1.0) flag=1; if (flag==1) { for (i=0;i<5;i++) { sum+=fabs(paramvec[i])*10000000000.0; } return sum; } for (i=0; ix, i)); } printf("f() = %-10.5f ssize = %.7f\n", s->fval, ssval); } printf("\n\n Please note: Program should be run many times with varying starting points to detemine global maximum\n\n"); gsl_vector_free(x); gsl_vector_free(ss); gsl_multimin_fminimizer_free (s); return status; }