static void rect( int p, mapevalenviron& mapenv, evalcontext* ecntxt ) { int i, j, p2, p3; realtyp mid; realtyp d1, d2; real2typ xy; p2 = p + p; p3 = p2 + p; for( i = 0; !ecntxt->cycles->error && i < fracsizx; i += p2 ) for( j = p; !ecntxt->cycles->error && j < fracsizy; j += p2 ) { xy.r2[0] = (realtyp)i/fracsizx; xy.r2[1] = (realtyp)j/fracsizy; mid = 0.0; mid += *adrarar( i , my( j + p) ); mid += *adrarar( i , my( j - p) ); mid += *adrarar( mx( i + p ), j ); mid += *adrarar( mx( i - p ), j ); mid *= 0.25; mid += normrand( 0.0, stdm( i, j, mapenv, ecntxt ), rndvl ); if ( mid > lmax ) lmax = mid; else if ( mid < lmin ) lmin = mid; if ( fracbump && p == 1 ) { d1 = *adrarar( mx( i + 1 ), j ) - mid; d2 = *adrarar( i ,my( j + 1 ) ) - mid; if ( d1 > dmax ) dmax = d1; else if ( d1 < dmin ) dmin = d1; if ( d2 > dmax ) dmax = d2; else if ( d2 < dmin ) dmin = d2; } *adrarar( i, j ) = (float)mid; } for( i = p; !ecntxt->cycles->error && i < fracsizx; i += p2 ) for( j = 0; !ecntxt->cycles->error && j < fracsizy; j += p2 ) { xy.r2[0] = (realtyp)i/fracsizx; xy.r2[1] = (realtyp)j/fracsizy; mid = 0.0; mid += *adrarar( i , my( j + p) ); mid += *adrarar( i , my( j - p) ); mid += *adrarar( mx( i + p ), j ); mid += *adrarar( mx( i - p ), j ); mid *= 0.25; mid += normrand( 0.0, stdm( i, j, mapenv, ecntxt ), rndvl ); if ( mid > lmax ) lmax = mid; else if ( mid < lmin ) lmin = mid; if ( fracbump && p == 1 ) { d1 = *adrarar( mx( i + 1 ), j ) - mid; d2 = *adrarar( i ,my( j + 1 ) ) - mid; if ( d1 > dmax ) dmax = d1; else if ( d1 < dmin ) dmin = d1; if ( d2 > dmax ) dmax = d2; else if ( d2 < dmin ) dmin = d2; } *adrarar( i, j ) = (float)mid; } }
void test_fit(int argc, char *argv[]) { if (argc < 6) { printf("usage: %s <n> <s1> <s2> <s3> <s4>\n", argv[0]); return; } int i, n = atoi(argv[1]); double s1 = atof(argv[2]); double s2 = atof(argv[3]); double s3 = atof(argv[4]); double s4 = atof(argv[5]); double dx, **X = new_matrix2(n, 4); for (i = 0; i < n; i++) { X[i][0] = normrand(0, s1); X[i][1] = normrand(0, s2); X[i][2] = normrand(0, s3); X[i][3] = normrand(0, s4); dx = norm(X[i], 4); mult(X[i], X[i], 1/dx, 4); } bingham_t B; bingham_fit(&B, X, n, 4); free_matrix2(X); }
void test_mink() { double x[10] = {0, 90, 70, 40, 20, 10, 30, 80, 50, 60}; int idx[5]; mink(x, idx, 10, 5); printf("idx = [ "); int i; for (i = 0; i < 5; i++) printf("%d ", idx[i]); printf("]\n"); // get timing info int n = 100000; double y[n]; for (i = 0; i < n; i++) y[i] = normrand(0,1); int yi[n]; double t = get_time_ms(); sort_indices(y, yi, n); printf("sorted %d numbers in %f ms\n", n, get_time_ms() - t); t = get_time_ms(); mink(y, yi, n, 100); printf("got the min %d numbers in %f ms\n", 100, get_time_ms() - t); }
void test_normrand(int argc, char *argv[]) { if (argc < 4) { printf("usage: %s <n> <mu> <sigma>\n", argv[0]); return; } int i, n = atoi(argv[1]); double mu = atof(argv[2]); double sigma = atof(argv[3]); printf("x = [ "); double x[n]; for (i = 0; i < n; i++) { x[i] = normrand(mu, sigma); printf("%f, ", x[i]); } printf("]\n"); double sample_mu = sum(x,n) / (double)n; // set x = (x - sample_mu)^2 for (i = 0; i < n; i++) x[i] = (x[i] - sample_mu)*(x[i] - sample_mu); double sample_sigma = sqrt(sum(x,n) / (double)n); printf("sample mu = %f, sample_sigma = %f\n", sample_mu, sample_sigma); }
void FELNumerical::generateDistribution(double minpsi, double maxpsi) { psi = new double [npart]; double deltpsi = (maxpsi - minpsi)/(npart - 1); for(unsigned int i = 0; i < npart; i++) { psi[i] = minpsi + i*deltpsi; } gam = normrand(npart, gamma0, sigmag0); }
static void diag( int p, mapevalenviron& mapenv, evalcontext* ecntxt ) { int i, j, p2, p3; realtyp mid; p2 = p + p; p3 = p2 + p; for( i = p; !ecntxt->cycles->error && i < fracsizx; i += p2 ) for( j = p; !ecntxt->cycles->error && j < fracsizy; j += p2 ) { mid = 0.0; mid += *adrarar( mx( i + p ), my( j + p) ); mid += *adrarar( mx( i - p ), my( j + p) ); mid += *adrarar( mx( i + p ), my( j - p) ); mid += *adrarar( mx( i - p ), my( j - p) ); mid *= 0.25; mid += normrand( 0.0, stdm( i, j, mapenv, ecntxt ), rndvl ); if ( mid > lmax ) lmax = mid; else if ( mid < lmin ) lmin = mid; *adrarar( i, j ) = (float)mid; } }
void standev(long numtrees, long minwhich, double minsteps, double *nsteps, double **fsteps, longer seed) { /* paired sites tests (KHT or SH) on user-defined trees */ /* used in pars */ long i, j, k; double wt, sumw, sum, sum2, sd; double temp; double **covar, *P, *f, *r; #define SAMPLES 1000 if (numtrees > maxuser) { printf("TOO MANY USER-DEFINED TREES"); printf(" test only performed in the first %ld of them\n", (long)maxuser); } else if (numtrees == 2) { fprintf(outfile, "Kishino-Hasegawa-Templeton test\n\n"); fprintf(outfile, "Tree Steps Diff Steps Its S.D."); fprintf(outfile, " Significantly worse?\n\n"); which = 1; while (which <= numtrees) { fprintf(outfile, "%3ld%10.1f", which, nsteps[which - 1]); if (minwhich == which) fprintf(outfile, " <------ best\n"); else { sumw = 0.0; sum = 0.0; sum2 = 0.0; for (i = 0; i < chars; i++) { if (weight[i] > 0) { wt = weight[i]; sumw += wt; temp = (fsteps[which - 1][i] - fsteps[minwhich - 1][i]) / 10.0; sum += wt*temp; sum2 += wt * temp * temp; } } temp = sum / sumw; sd = sqrt(sumw / (sumw - 1.0) * (sum2 - temp * temp)); fprintf(outfile, "%10.1f%12.4f", (nsteps[which - 1] - minsteps) / 10, sd); if (sum > 1.95996 * sd) fprintf(outfile, " Yes\n"); else fprintf(outfile, " No\n"); } which++; } fprintf(outfile, "\n\n"); } else { /* Shimodaira-Hasegawa test using normal approximation */ if(numtrees > MAXSHIMOTREES){ fprintf(outfile, "Shimodaira-Hasegawa test on first %d of %ld trees\n\n" , MAXSHIMOTREES, numtrees); numtrees = MAXSHIMOTREES; } else { fprintf(outfile, "Shimodaira-Hasegawa test\n\n"); } covar = (double **)Malloc(numtrees*sizeof(double *)); for (i = 0; i < numtrees; i++) covar[i] = (double *)Malloc(numtrees*sizeof(double)); sumw = 0.0; for (i = 0; i < chars; i++) sumw += weight[i]; for (i = 0; i < numtrees; i++) { /* compute covariances of trees */ sum = nsteps[i]/(10.0*sumw); for (j = 0; j <=i; j++) { sum2 = nsteps[j]/(10.0*sumw); temp = 0.0; for (k = 0; k < chars; k++) { if (weight[k] > 0) temp = temp + weight[k]*(fsteps[i][k]/10.0-sum) *(fsteps[j][k]/10.0-sum2); } covar[i][j] = temp; if (i != j) covar[j][i] = temp; } } for (i = 0; i < numtrees; i++) { /* in-place Cholesky decomposition of trees x trees covariance matrix */ sum = 0.0; for (j = 0; j <= i-1; j++) sum = sum + covar[i][j] * covar[i][j]; if (covar[i][i]-sum <= 0.0) temp = 0.0; else temp = sqrt(covar[i][i] - sum); covar[i][i] = temp; for (j = i+1; j < numtrees; j++) { sum = 0.0; for (k = 0; k < i; k++) sum = sum + covar[i][k] * covar[j][k]; if (fabs(temp) < 1.0E-12) covar[j][i] = 0.0; else covar[j][i] = (covar[j][i] - sum)/temp; } } f = (double *)Malloc(numtrees*sizeof(double)); /* resampled sums */ P = (double *)Malloc(numtrees*sizeof(double)); /* vector of P's of trees */ r = (double *)Malloc(numtrees*sizeof(double)); /* store Normal variates */ for (i = 0; i < numtrees; i++) P[i] = 0.0; sum2 = nsteps[0]; /* sum2 will be smallest # of steps */ for (i = 1; i < numtrees; i++) if (sum2 > nsteps[i]) sum2 = nsteps[i]; for (i = 1; i <= SAMPLES; i++) { /* loop over resampled trees */ for (j = 0; j < numtrees; j++) /* draw Normal variates */ r[j] = normrand(seed); for (j = 0; j < numtrees; j++) { /* compute vectors */ sum = 0.0; for (k = 0; k <= j; k++) sum += covar[j][k]*r[k]; f[j] = sum; } sum = f[1]; for (j = 1; j < numtrees; j++) /* get min of vector */ if (f[j] < sum) sum = f[j]; for (j = 0; j < numtrees; j++) /* accumulate P's */ if (nsteps[j]-sum2 <= f[j] - sum) P[j] += 1.0/SAMPLES; } fprintf(outfile, "Tree Steps Diff Steps P value"); fprintf(outfile, " Significantly worse?\n\n"); for (i = 0; i < numtrees; i++) { fprintf(outfile, "%3ld%10.1f", i+1, nsteps[i]); if ((minwhich-1) == i) fprintf(outfile, " <------ best\n"); else { fprintf(outfile, " %9.1f %10.3f", nsteps[i]-sum2, P[i]); if (P[i] < 0.05) fprintf(outfile, " Yes\n"); else fprintf(outfile, " No\n"); } } fprintf(outfile, "\n"); free(P); /* free the variables we Malloc'ed */ free(f); free(r); for (i = 0; i < numtrees; i++) free(covar[i]); free(covar); } } /* standev */