void potential_Neuro(double *y, double *x, double *xh, int dy, int dx, int time, int N, double *theta, double *result) { int i,j,k; int npx=pow(dx,2); double lambda, fy; for(j=0;j<dy;j++) { fy=logfactorial((int)y[dy*time+j]); for(i=0;i<N;i++) { if(j==0) { result[i]=0; } lambda=theta[dx+j]; for(k=0;k<dx;k++) { lambda+=theta[dx+dy+npx+j*dx+k]*x[dx*i+k]; } if(lambda>700) { result[i]+=-exp(700)+y[dy*time+j]*lambda-fy; } else { result[i]+=-exp(lambda)+y[dy*time+j]*lambda-fy; } } } }
double LogPoissonProb(double mean, unsigned n) { return -1*mean + n*log(mean) - logfactorial(n); }
double logchoose(int n, int k) { return logfactorial(n)-logfactorial(k)-logfactorial(n-k); }