Exemple #1
0
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;
    }
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}
Exemple #5
0
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);
}
Exemple #6
0
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;
    }
}
Exemple #7
0
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 */