Esempio n. 1
0
File: rmt.c Progetto: Phali/libs
void GUE(int n, double **h, double sigma, long *iseed, enum trace traceless) {
  /* hermitean Gaussian random matrix. */
  /* P(H) \propto \exp{-Tr(H^2)/2/sigma^2}. */
  /* <|H_ij|^2>=sigma^2 */
  /* output in h[0...n-1][0..2(n-1)+1]. */ 
  int i,j;
  double tmp;

  /* diagonal - real */
  tmp=sigma/sqrt(2);
  for(i=0;i<n;i++) {
    h[i][2*i]=gasdev(iseed)*sigma;
    h[i][2*i+1]=0; 
  }
  /* upper triangle - complex */
  for(j=1;j<n;j++) for(i=0;i<j;i++) {
    h[i][2*j]=gasdev(iseed)*tmp;
    h[i][2*j+1]=gasdev(iseed)*tmp;
  }

  /* fill dependent elements - lower triangle */
  for(i=1;i<n;i++) for(j=0;j<i;j++) {
    h[i][2*j]=h[j][2*i];
    h[i][2*j+1]=-h[j][2*i+1];
  }
  if (traceless==TRACELESS) { /* substract TrH /n */
    tmp=0;
    for(i=0;i<n;i++) tmp+=h[i][2*i];
    tmp=tmp/n;
    for(i=0;i<n;i++) h[i][2*i]-=tmp;
  }

  return ;
}
Esempio n. 2
0
void add_noise(struct uvf_header **header, struct uvf_sample **samples,
		      int n_archivos, long *seed) {
  int arch, i, k, nsamp, nchan;
  float sum =0; 
  //float target_Chi2 = 31291. ;
  double sigma;
  double visnoise;
  float scale_factor;
  double sum_VR = 0, sum_VI = 0, sum_noise = 0, noise;

  for (arch = 0; arch < n_archivos; arch++) {
    nsamp = header[arch]->nsamp;
    nchan = header[arch]->nchan;
    for (i = 0; i < nsamp; i++) {      /* Loop through samples */
      for (k = 0; k < nchan; k++) {    /* Loop through channels */
	if (samples[arch][i].rdata[3*k+2]  != 0) {
	  visnoise = sqrt(1/samples[arch][i].rdata[3*k+2]);
	  noise = gasdev(seed)*visnoise;
	  
	  sum_noise += fabs(noise);
	  sum_VR += fabs(samples[arch][i].rdata[3*k]);
	  sum_VI += fabs(samples[arch][i].rdata[3*k+1]);
	  
	  samples[arch][i].rdata[3*k] += gasdev(seed)*visnoise;   // DEVTEST
	  samples[arch][i].rdata[3*k+1] += gasdev(seed)*visnoise;   // DEVTEST
	}    /* weights */
      }
    }
  }
  printf ("suma = %g\t%g,\t noise = %g\n", 
	  sum_VR, sum_VI, sum_noise);
}
Esempio n. 3
0
int main(void)
{
	long idum=(-51773);
	int i,j;
	float fctr1,fctr2,prob,t,*data1,*data2;

	data1=vector(1,NPTS);
	data2=vector(1,MPTS);
	/* Generate two gaussian distributions of different variance */
	fctr1=sqrt(VAR1);
	for (i=1;i<=NPTS;i++) data1[i]=fctr1*gasdev(&idum);
	fctr2=sqrt(VAR2);
	for (i=1;i<=MPTS;i++)
		data2[i]=NSHFT/2.0*EPS+fctr2*gasdev(&idum);
	printf("\nDistribution #1 : variance = %6.2f\n",VAR1);
	printf("Distribution #2 : variance = %6.2f\n\n",VAR2);
	printf("%7s %8s %16s\n","shift","t","probability");
	for (i=1;i<=NSHFT+1;i++) {
		tutest(data1,NPTS,data2,MPTS,&t,&prob);
		printf("%6.2f %10.2f %11.2f\n",(i-1)*EPS,t,prob);
		for (j=1;j<=NPTS;j++) data1[j] += EPS;
	}
	free_vector(data2,1,MPTS);
	free_vector(data1,1,NPTS);
	return 0;
}
Esempio n. 4
0
/* random number of unit sphere Gnml coefficient */
MyDouble SCF_Gnml_rand(int n, int l, int m, long *seed)
{
 if (n+l+m>0)
  return 1./sqrt(1.*SCF_NEFF)*sqrt(gnlm_var(n,l,m))*gasdev(seed);
 else
  return -1.+ 1./sqrt(1.*SCF_NEFF)*sqrt(gnlm_var(n,l,m))*gasdev(seed);
}
Esempio n. 5
0
/// Sets the temperature of system.
///
/// Selects atom velocities randomly from a boltzmann (equilibrium)
/// distribution that corresponds to the specified temperature.  This
/// random process will typically result in a small, but non zero center
/// of mass velocity and a small difference from the specified
/// temperature.  For typical MD runs these small differences are
/// unimportant, However, to avoid possible confusion, we set the center
/// of mass velocity to zero and scale the velocities to exactly match
/// the input temperature.
void setTemperature(SimFlat* s, real_t temperature)
{
   // set initial velocities for the distribution

   printf("CnC: Inside setTemperature %f, %d\n",temperature, s->boxes->nLocalBoxes);

   for (int iBox=0; iBox<s->boxes->nLocalBoxes; ++iBox)
   {
      for (int iOff=MAXATOMS*iBox, ii=0; ii<s->boxes->nAtoms[iBox]; ++ii, ++iOff)
      {
         int iType = s->atoms->iSpecies[iOff];
         real_t mass = s->species[iType].mass;
         real_t sigma = sqrt(kB_eV * temperature/mass);
         uint64_t seed = mkSeed(s->atoms->gid[iOff], 123);

#ifndef CNCOCR_TG // Manu: gasdev not working with TG
         s->atoms->p[iOff][0] = mass * sigma * gasdev(&seed);
         s->atoms->p[iOff][1] = mass * sigma * gasdev(&seed);
         s->atoms->p[iOff][2] = mass * sigma * gasdev(&seed);
#else
         s->atoms->p[iOff][0] = mass * sigma;
         s->atoms->p[iOff][1] = mass * sigma;
         s->atoms->p[iOff][2] = mass * sigma;
#endif
      }
   }


   // compute the resulting temperature
   // kinetic energy  = 3/2 kB * Temperature
   if (temperature == 0.0) return;
   real_t vZero[3] = {0., 0., 0.};
   setVcm(s, vZero);


   kineticEnergy(s);


   real_t temp = (s->eKinetic/s->atoms->nGlobal)/kB_eV/1.5;
   // scale the velocities to achieve the target temperature
   real_t scaleFactor = sqrt(temperature/temp);
//   real_t scaleFactor =1;
   for (int iBox=0; iBox<s->boxes->nLocalBoxes; ++iBox)
   {
      for (int iOff=MAXATOMS*iBox, ii=0; ii<s->boxes->nAtoms[iBox]; ++ii, ++iOff)
      {
         s->atoms->p[iOff][0] *= scaleFactor;
         s->atoms->p[iOff][1] *= scaleFactor;
         s->atoms->p[iOff][2] *= scaleFactor;
      }
   }


   kineticEnergy(s);

   temp = s->eKinetic/s->atoms->nGlobal/kB_eV/1.5;
}
Esempio n. 6
0
int main(void)
{
	long idum;
	unsigned long j,jtrial,n1,n2,ntrial;
	float d,prob,shrink,u,v;
	float *x1,*y1,*x2,*y2;

	x1=vector(1,NMAX);
	y1=vector(1,NMAX);
	x2=vector(1,NMAX);
	y2=vector(1,NMAX);
	for (;;) {
		printf("Input N1,N2\n");
		if (scanf("%lu %lu",&n1,&n2) == EOF) break;
		if (n1 > NMAX) {
			printf("n1 too large.\n");
			continue;
		}
		if (n2 > NMAX) {
			printf("n2 too large.\n");
			continue;
		}
		printf("What shrinkage?\n");
		if (scanf("%f",&shrink) == EOF) break;
		printf("How many trials?\n");
		if (scanf("%lu",&ntrial) == EOF) break;
		if (ntrial > NMAX) {
			printf("Too many trials.\n");
			continue;
		}
		idum = -287-ntrial-n1-n2;
		for (jtrial=1;jtrial<=ntrial;jtrial++) {
			for (j=1;j<=n1;j++) {
				u=gasdev(&idum);
				v=gasdev(&idum)*shrink;
				x1[j]=u+v;
				y1[j]=u-v;
			}
			for (j=1;j<=n2;j++) {
				u=gasdev(&idum)*shrink;
				v=gasdev(&idum);
				x2[j]=u+v;
				y2[j]=u-v;
			}
			ks2d2s(x1,y1,n1,x2,y2,n2,&d,&prob);
			printf("d, prob= %12.6f %12.6f\n",d,prob);
		}
	}
	free_vector(y2,1,NMAX);
	free_vector(x2,1,NMAX);
	free_vector(y1,1,NMAX);
	free_vector(x1,1,NMAX);
	printf("Normal completion\n");
	return 0;
}
Esempio n. 7
0
int main(void)
{
	long idum=(-1);
	int j;
	float a,b,chi2,q,sa,sb,siga,sigb;
	float *x,*y,*dx,*dy,*dz;

	x=vector(1,NPT);
	y=vector(1,NPT);
	dx=vector(1,NPT);
	dy=vector(1,NPT);
	dz=vector(1,NPT);
	for (j=1;j<=NPT;j++) {
		dx[j]=0.1+ran1(&idum);
		dy[j]=0.1+ran1(&idum);
		dz[j]=0.0;
		x[j]=10.0+10.0*gasdev(&idum);
		y[j]=2.0*x[j]-5.0+dy[j]*gasdev(&idum);
		x[j] += dx[j]*gasdev(&idum);
	}
	printf("Values of a,b,siga,sigb,chi2,q:\n");
	printf("Fit with x and y errors gives:\n");
	fitexy(x,y,NPT,dx,dy,&a,&b,&siga,&sigb,&chi2,&q);
	printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n\n",
		a,b,siga,sigb,chi2,q);
	printf("Setting x errors to zero gives:\n");
	fitexy(x,y,NPT,dz,dy,&a,&b,&siga,&sigb,&chi2,&q);
	printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
		a,b,siga,sigb,chi2,q);
	printf("...to be compared with fit result:\n");
	fit(x,y,NPT,dy,1,&a,&b,&siga,&sigb,&chi2,&q);
	printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n\n",
		a,b,siga,sigb,chi2,q);
	printf("Setting y errors to zero gives:\n");
	fitexy(x,y,NPT,dx,dz,&a,&b,&siga,&sigb,&chi2,&q);
	printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
		a,b,siga,sigb,chi2,q);
	printf("...to be compared with fit result:\n");
	fit(y,x,NPT,dx,1,&a,&b,&siga,&sigb,&chi2,&q);
	sa=sqrt(siga*siga+SQR(sigb*(a/b)))/b;
	sb=sigb/(b*b);
	printf("%11.6f %11.6f %11.6f %11.6f %11.6f %11.6f\n",
		-a/b,1.0/b,sa,sb,chi2,q);
	free_vector(dz,1,NPT);
	free_vector(dy,1,NPT);
	free_vector(dx,1,NPT);
	free_vector(y,1,NPT);
	free_vector(x,1,NPT);
	return 0;
}
Esempio n. 8
0
int main(void)
{
	long idum=(-1984);
	int i,mwt=1;
	float a,abdev,b,chi2,q,siga,sigb;
	float *x,*y,*sig;

	x=vector(1,NDATA);
	y=vector(1,NDATA);
	sig=vector(1,NDATA);
	for (i=1;i<=NPT;i++) {
		x[i]=0.1*i;
		y[i] = -2.0*x[i]+1.0+SPREAD*gasdev(&idum);
		sig[i]=SPREAD;
	}
	fit(x,y,NPT,sig,mwt,&a,&b,&siga,&sigb,&chi2,&q);
	printf("\nAccording to routine FIT the result is:\n");
	printf("   a =  %8.4f   uncertainty:  %8.4f\n",a,siga);
	printf("   b =  %8.4f   uncertainty:  %8.4f\n",b,sigb);
	printf("   chi-squared:  %8.4f  for  %4d  points\n",chi2,NPT);
	printf("   goodness-of-fit:  %8.4f\n",q);
	printf("\nAccording to routine MEDFIT the result is:\n");
	medfit(x,y,NPT,&a,&b,&abdev);
	printf("   a =  %8.4f\n",a);
	printf("   b =  %8.4f\n",b);
	printf("   absolute deviation (per data point): %8.4f\n",abdev);
	printf("   (note: gaussian SPREAD is %8.4f)\n",SPREAD);
	free_vector(sig,1,NDATA);
	free_vector(y,1,NDATA);
	free_vector(x,1,NDATA);
	return 0;
}
Esempio n. 9
0
//--------------------------------------------------------
void add_watermark(double *in, int N, int coeff_start, int wm_length, int wm_key, double wm_alpha)
{
  int row, col, count;
  long int elem, L, M, temp, seed;
  double a;
  count = 0;
  elem = 0;
  row = 2;
  col = -1;
  M = coeff_start;
  L = wm_length;
  seed = wm_key;
  a = wm_alpha;
  do {
    do {
      row--;
      col++;
      elem++;
      if (col < N) {
        if (elem > M) {
          temp = row * N + col;
          in[temp] += a * fabs(in[temp]) * gasdev(&seed);
          count++;
        }
      }
    } while (row > 0);
    row = 2 + col;
    col = -1;
  } while (count < L);
}
Esempio n. 10
0
int main(void)
{
	long idum=(-11);
	int i;
	float b,rf,*x,*y;

	x=vector(1,NDATA);
	y=vector(1,NDATA);
	ndatat=NDATA;
	xt=x;
	yt=y;
	for (i=1;i<=NDATA;i++) {
		x[i]=0.1*i;
		y[i] = -2.0*x[i]+1.0+SPREAD*gasdev(&idum);
	}
	printf("%9s %9s %12s %10s\n","b","a","ROFUNC","ABDEVT");
	for (i = -5;i<=5;i++) {
		b = -2.0+0.02*i;
		rf=rofunc(b);
		printf("%10.2f %9.2f %11.2f %10.2f\n",
			b,aa,rf,abdevt);
	}
	free_vector(y,1,NDATA);
	free_vector(x,1,NDATA);
	return 0;
}
Esempio n. 11
0
void read_watermark(double **in, int N, int coeff_start, int wm_length, double wm_alpha)
{
  int row, col, count;
  long int elem, L, M, seed, i;
  double a;
  double z;
  M = coeff_start;
  L = wm_length;
  a = wm_alpha;
  for (i = 1; i <= 1000; i++) {
    seed = i;
    z = 0.0;
    count = 0;
    elem = 0;

    for (row = 0; row < N; row++)
      for (col = 0; col < N; col++) {
        elem++;
        if (elem > M && count < L) {
          z += in[row][col] * gasdev(&seed);
          count++;
        }
      }

    printf("%ld\t%f\n", i, z / L);
  }
  return ;
}
Esempio n. 12
0
/* This function creates the double gaussian distruted x-values for the dopand atoms
* width1 i the distance between the 2 peaks
* width 2 is the width of a single peak.
*/
double xDistrFun2(double xcenter,double width1,double width2) {
	static long idum = 0;
	static long seed = 0;
	static int count = 0;
	static double x2=0,xavg=0;
	double x,dx;

	if (idum == 0) idum  = -(long)(time(NULL)); 
	if (seed == 0) seed  = -(long)(time(NULL)); 

	if (width2 >0) {
		count ++;
		dx = width2*gasdev(&idum);
		x = xcenter+width1*((ran(&seed) > 0.5)-0.5)+dx;
		xavg += x;
		x2 += SQR(dx);
		return x;
	}
	else {
		printf("Statistics (%d): xavg=%g, x2dev=%g\n",count,xavg/(double)count,sqrt(x2/(double)count));
		xavg = 0;
		x2 = 0;
		return 0;
	}
}
Esempio n. 13
0
float bingdev(float *xbin, float *ybin, unsigned int nbin, long *idnum)
{
 int i;
 int bin,peak,wing;
 float firstdev,seconddev,fx,x;
 float stddev,F;
 int findbin(float x, float *xbin, unsigned int nbin);
 int findpeak(float *ybin, unsigned int nbin);

 /* set the gaussian parameters so that f(x) is larger than ybin */
 peak=findpeak(ybin,nbin);
 wing = ( (peak < nbin/2) ? nbin-1: 0 );
 stddev = sqrt( 0.5*pow((xbin[wing]-xbin[peak]),2)/log(ybin[peak]/ybin[wing]) );
 F = 1.25*ybin[peak]*stddev*SQRT2PI;

 do {
   /* First deviate - Gaussian */
   firstdev = gasdev(idnum);
   x = firstdev *stddev + xbin[peak];
   fx = 1./(stddev*SQRT2PI) * exp( -0.5*pow(firstdev,2) );
   fx *= F;

   /* Second deviate between 0 and fx - reject if not under ybin */
   if ( (bin = findbin(x,xbin,nbin)) > 0 ) {	/*within range; proceed*/
     seconddev = fx * ran1(idnum);
   }
 } while ((seconddev > ybin[bin]) || (bin<0));

 return x; 
}
Esempio n. 14
0
int main(void)
{
	long idum=(-911);
	int i,j,mfit=MA,*ia;
	float chisq,*beta,*x,*y,*sig,**covar,**alpha;
	static float a[MA+1]=
		{0.0,5.0,2.0,3.0,2.0,5.0,3.0};
	static float gues[MA+1]=
		{0.0,4.9,2.1,2.9,2.1,4.9,3.1};

	ia=ivector(1,MA);
	beta=vector(1,MA);
	x=vector(1,NPT);
	y=vector(1,NPT);
	sig=vector(1,NPT);
	covar=matrix(1,MA,1,MA);
	alpha=matrix(1,MA,1,MA);
	/* First try sum of two gaussians */
	for (i=1;i<=NPT;i++) {
		x[i]=0.1*i;
		y[i]=0.0;
		y[i] += a[1]*exp(-SQR((x[i]-a[2])/a[3]));
		y[i] += a[4]*exp(-SQR((x[i]-a[5])/a[6]));
		y[i] *= (1.0+SPREAD*gasdev(&idum));
		sig[i]=SPREAD*y[i];
	}
	for (i=1;i<=mfit;i++) ia[i]=1;
	for (i=1;i<=mfit;i++) a[i]=gues[i];
	mrqcof(x,y,sig,NPT,a,ia,MA,alpha,beta,&chisq,fgauss);
	printf("\nmatrix alpha\n");
	for (i=1;i<=MA;i++) {
		for (j=1;j<=MA;j++) printf("%12.4f",alpha[i][j]);
		printf("\n");
	}
	printf("vector beta\n");
	for (i=1;i<=MA;i++) printf("%12.4f",beta[i]);
	printf("\nchi-squared: %12.4f\n\n",chisq);
	/* Next fix one line and improve the other */
	mfit=3;
	for (i=1;i<=mfit;i++) ia[i]=0;
	for (i=1;i<=MA;i++) a[i]=gues[i];
	mrqcof(x,y,sig,NPT,a,ia,MA,alpha,beta,&chisq,fgauss);
	printf("matrix alpha\n");
	for (i=1;i<=mfit;i++) {
		for (j=1;j<=mfit;j++) printf("%12.4f",alpha[i][j]);
		printf("\n");
	}
	printf("vector beta\n");
	for (i=1;i<=mfit;i++) printf("%12.4f",beta[i]);
	printf("\nchi-squared: %12.4f\n\n",chisq);
	free_matrix(alpha,1,MA,1,MA);
	free_matrix(covar,1,MA,1,MA);
	free_vector(sig,1,NPT);
	free_vector(y,1,NPT);
	free_vector(x,1,NPT);
	free_vector(beta,1,MA);
	free_ivector(ia,1,MA);
	return 0;
}
Esempio n. 15
0
static double GD (double mean, double sdev)
/* ------------------------------------------------------------------------- *
 * Return normally distributed random deviate with specified mean and
 * standard deviation.
 * ------------------------------------------------------------------------- */
{
  return (mean + sdev * (gasdev (&iseed)));
}
Esempio n. 16
0
 double get(int bias, int multiple, Distribution_Type type, int *idum)
 {
     double ret = 0;
     if(type == Distribution_Type_Gaussian) ret = gasdev(idum);
     else if(type == Distribution_Type_Uniform) ret = uniform(idum);
     else assert(false);
     return ret * multiple + bias;
 }
Esempio n. 17
0
int main(void)
{
	long idum=(-911);
	int i,j,*ia;
	float chisq,*a,*x,*y,*sig,**covar;

	ia=ivector(1,NTERM);
	a=vector(1,NTERM);
	x=vector(1,NPT);
	y=vector(1,NPT);
	sig=vector(1,NPT);
	covar=matrix(1,NTERM,1,NTERM);

	for (i=1;i<=NPT;i++) {
		x[i]=0.1*i;
		funcs(x[i],a,NTERM);
		y[i]=0.0;
		for (j=1;j<=NTERM;j++) y[i] += j*a[j];
		y[i] += SPREAD*gasdev(&idum);
		sig[i]=SPREAD;
	}
	for (i=1;i<=NTERM;i++) ia[i]=1;
	lfit(x,y,sig,NPT,a,ia,NTERM,covar,&chisq,funcs);
	printf("\n%11s %21s\n","parameter","uncertainty");
	for (i=1;i<=NTERM;i++)
		printf("  a[%1d] = %8.6f %12.6f\n",
			i,a[i],sqrt(covar[i][i]));
	printf("chi-squared = %12f\n",chisq);
	printf("full covariance matrix\n");
	for (i=1;i<=NTERM;i++) {
		for (j=1;j<=NTERM;j++) printf("%12f",covar[i][j]);
		printf("\n");
	}
	printf("\npress RETURN to continue...\n");
	(void) getchar();
	/* Now check results of restricting fit parameters */
	for (i=2;i<=NTERM;i+=2) ia[i]=0;
	lfit(x,y,sig,NPT,a,ia,NTERM,covar,&chisq,funcs);
	printf("\n%11s %21s\n","parameter","uncertainty");
	for (i=1;i<=NTERM;i++)
		printf("  a[%1d] = %8.6f %12.6f\n",
			i,a[i],sqrt(covar[i][i]));
	printf("chi-squared = %12f\n",chisq);
	printf("full covariance matrix\n");
	for (i=1;i<=NTERM;i++) {
		for (j=1;j<=NTERM;j++) printf("%12f",covar[i][j]);
		printf("\n");
	}
	printf("\n");
	free_matrix(covar,1,NTERM,1,NTERM);
	free_vector(sig,1,NPT);
	free_vector(y,1,NPT);
	free_vector(x,1,NPT);
	free_vector(a,1,NTERM);
	free_ivector(ia,1,NTERM);
	return 0;
}
Esempio n. 18
0
File: rmt.c Progetto: Phali/libs
void GOE(int n, double **o, double sigma, long *iseed) {
  /* real symmetric Gaussian random matrix */
  /* P(H) \propto \exp{-Tr(H^2)/2sigma^2}. */
  /* output in o[0..n-1][0..n-1]. */
  int i,j;
  double tmp;

  /* upper triangle;sqrt(2) is because of lower el.*/
  tmp=sigma/sqrt(2);
  for(j=1;j<n;j++) for(i=0;i<j;i++) o[i][j]=gasdev(iseed)*tmp;
  /* diagonal */
  for(i=0;i<n;i++) o[i][i]=gasdev(iseed)*sigma;

  /* fill dependent elements - lower triangle */
  for(i=1;i<n;i++) for(j=0;j<i;j++) o[i][j]=o[j][i];

  return ;
}
Esempio n. 19
0
/*!
 * Gaussian random number generator
 */
double gaussian(double mean,
                double sigma,
                long   *seed)
{
  double rannum;

  while (fabs(rannum = gasdev(seed)) > 3) {}

  return mean + sigma*rannum;
}
Esempio n. 20
0
void make_AR1(control *c, timeseries *ts)
{
    /* 
        set up AR1 time series. An AR spectrum models the data using a linear combination of the previous and 
        subsequent time steps (see Mann and Lees, 1996): 
        
                red[i] = rho[i] * y[i-1] + eps[i]     

           where
                                t[i] - t[i-1]
                rho[i] =  exp(--------------)
                                   tau

    
        and 
        
                 eps ~ NV(0, vareps). To ensure Var[red] = 1, we set

                                    2 * (t[i] - t[i-1])
                vareps = 1 -  exp(- -------------------).
                                      tau

        Stationarity of the generated AR(1) time series is assured by dropping
        the first N generated points.
    */
    
    int    k;
    double dt, sigma;
    
    ts->red[1] = gasdev(&ts->idum);
    
    for (k = 2; k <= ts->num_param; k++) {
        dt = ts->x[k] - ts->x[k - 1];
        sigma = sqrt(1.0 - exp(-2.0 * dt / ts->tau));
        if (c->EQUAL_DIST_DATA == TRUE) {
            ts->red[k] = exp(-dt / ts->equalrho) * ts->red[k - 1] + sigma * gasdev(&ts->idum);
        } else { 
            ts->red[k] = exp(-dt / ts->tau) * ts->red[k - 1] + sigma * gasdev(&ts->idum);
        }
    }
    
    return;
}
Esempio n. 21
0
void main () {
  long seed, s2=-13;
  int i;
  FILE *fp;
  srand(time(NULL));
  fp =   fopen("../../results/randnout", "w");
  for(i=0; i <1000000; ++i) {
    seed = -1 * rand();
    fprintf(fp, "%f \n", gasdev(&seed));
  }
  fclose(fp);
}
Esempio n. 22
0
void
fake_observation(PBASIS *p, 
		 OBSERVATION *obs)
{
  static long idum=-1;
  float gasdev(long *idum);

  /* seed the random number generator*/
  if (idum<0) {
    struct timeval tp;
    gettimeofday(&tp,NULL);
    idum = -tp.tv_usec;
  }

  kbo2d(p,obs,&(obs->thetax),NULL,&(obs->thetay),NULL);

  /* Add measurement noise to the positions */
  obs->thetax += obs->dthetax*gasdev(&idum);
  obs->thetay += obs->dthetay*gasdev(&idum);

  return;
}
Esempio n. 23
0
/* ------------------------------------------------ */
float32 gaussian_noise(float32 average, float32 sigma)
/* ------------------------------------------------ */
{
    // not thread safe
    
    static long seed = 0x101; // not for multi-threaded purpose
    float g, r;

    g = gasdev(&seed);
    r = average + sigma * g;
    
    return r;
}
Esempio n. 24
0
/* n degrees of freedom zero mean and unit variance */
double chisquare(int n,long*seed)
{
  int i,j;
  double rand,gauss;

  for(j=0,rand=0; j<n; j++) {
    gauss=gasdev(seed);
    rand+=gauss*gauss;
  }
  rand=(rand/n-1)/sqrt(2.0/n);

  return rand;
}
Esempio n. 25
0
static void add_noise(struct uvf_header *header,
		      struct uvf_sample *samples, long *seed) {
  int i, k, nsamp, nchan;
  float sum =0; 
  //float target_Chi2 = 31291. ;
  double sigma;
  double visnoise;
  float scale_factor;
  nsamp = header->nsamp;
  nchan = header->nchan;
  double sum_VR = 0, sum_VI = 0, sum_noise = 0, noise;

  for (i = 0; i < nsamp; i++) {      /* Loop through samples */
    for (k = 0; k < nchan; k++) {    /* Loop through channels */
      //if (!ch_list[k])
      //continue;
      if (samples[i].rdata[3*k+2]  != 0) {
	visnoise = sqrt(1/samples[i].rdata[3*k+2]);
	noise = gasdev(seed)*visnoise;
	//printf ("V = %g\t%g,\t noise = %g\n", 
	//samples[i].rdata[3*k], samples[i].rdata[3*k+1],
	//noise);
	sum_noise += fabs(noise);
	sum_VR += fabs(samples[i].rdata[3*k]);
	sum_VI += fabs(samples[i].rdata[3*k+1]);

	//sigma = visnoise * scale_factor;
	//printf("%g %g %g \n",gasdev(seed),visnoise,sigma);
	//printf("%g --> ",samples[i].rdata[3*k]);
	samples[i].rdata[3*k] += gasdev(seed)*visnoise;   // DEVTEST
	//printf("%g \n ",samples[i].rdata[3*k]);
	samples[i].rdata[3*k+1] += gasdev(seed)*visnoise;   // DEVTEST
	}    /* weights */
    }
  }
  printf ("suma = %g\t%g,\t noise = %g\n", 
	  sum_VR, sum_VI, sum_noise);
}
/* This sets the velocity to be isotropic Gaussian.
 */
double NFW_central_velocity(double mass, double v[], double mag)
{
  static long IDUM2=-455;
  static double fac = -1;
  double sigv,vbias=1;
  int i;

  if(fac<0)
      fac=sqrt(4.499E-48)*pow(4*DELTA_HALO*PI*OMEGA_M*RHO_CRIT/3,1.0/6.0)*3.09E19;
  sigv=fac*pow(mass,1.0/3.0)/sqrt(2.0);
  for(i=0;i<3;++i)
    v[i]=gasdev(&IDUM2)*sigv*VBIAS_C;
  return(0);
}
Esempio n. 27
0
/*---------------------------------*
 *  Function Poisson Distribution  |
 *---------------------------------*
 | Returns the integer value corresponding to the
 | probablity given by the poisson distribution.
*/
int poisso(double u)  //u= Mean of poisson distribution
{
  double cump=0.0, ru=0.0, p=0.0, ran1(), gasdev(double, double);
  int i=1;

  if(u>30.) return((int)(0.5+gasdev(u, u))); // Correction when mean > 30 ?? why?
  ru=ran1();
  p=exp(-u);
  if(ru<p) return(0);
  cump=p;                           // Cumulative probability function

  while(ru>(cump+=(p*=u/i)))
    i++;
  return(i);
}
Esempio n. 28
0
void mnormalnew (header *hd)
{	header *st=hd,*result;
	double *m;
	int r,c;
	LONG k,n;
	hd=getvalue(hd); if (error) return;
	if (hd->type!=s_matrix || dimsof(hd)->r!=1 || dimsof(hd)->c!=2
		|| *(m=matrixof(hd))<0 || *m>=INT_MAX
		|| *(m+1)<0 || *(m+1)>INT_MAX)
		wrong_arg_in("normal");
	r=(int)*m;
	c=(int)*(m+1);
	result=new_matrix(r,c,""); if (error) return;
	m=matrixof(result);
	n=(LONG)c*r;
	for (k=0; k<n; k++) *m++=gasdev();
	moveresult(st,result);
}
Esempio n. 29
0
int main(void)
{
	long idum=(-911);
	int i;
	float chisq,*x,*y,*sig,*a,*w,**cvm,**u,**v;

	x=vector(1,NPT);
	y=vector(1,NPT);
	sig=vector(1,NPT);
	a=vector(1,NPOL);
	w=vector(1,NPOL);
	cvm=matrix(1,NPOL,1,NPOL);
	u=matrix(1,NPT,1,NPOL);
	v=matrix(1,NPOL,1,NPOL);
	for (i=1;i<=NPT;i++) {
		x[i]=0.02*i;
		y[i]=1.0+x[i]*(2.0+x[i]*(3.0+x[i]*(4.0+x[i]*5.0)));
		y[i] *= (1.0+SPREAD*gasdev(&idum));
		sig[i]=y[i]*SPREAD;
	}
	svdfit(x,y,sig,NPT,a,NPOL,u,v,w,&chisq,fpoly);
	svdvar(v,NPOL,w,cvm);
	printf("\npolynomial fit:\n\n");
	for (i=1;i<=NPOL;i++)
		printf("%12.6f %s %10.6f\n",a[i],"  +-",sqrt(cvm[i][i]));
	printf("\nChi-squared %12.6f\n",chisq);
	svdfit(x,y,sig,NPT,a,NPOL,u,v,w,&chisq,fleg);
	svdvar(v,NPOL,w,cvm);
	printf("\nLegendre polynomial fit:\n\n");
	for (i=1;i<=NPOL;i++)
		printf("%12.6f %s %10.6f\n",a[i],"  +-",sqrt(cvm[i][i]));
	printf("\nChi-squared %12.6f\n",chisq);
	free_matrix(v,1,NPOL,1,NPOL);
	free_matrix(u,1,NPT,1,NPOL);
	free_matrix(cvm,1,NPOL,1,NPOL);
	free_vector(w,1,NPOL);
	free_vector(a,1,NPOL);
	free_vector(sig,1,NPT);
	free_vector(y,1,NPT);
	free_vector(x,1,NPT);
	return 0;
}
Esempio n. 30
0
// ----------------------------------------------------------------
int main(
	int     argc,
	char ** argv)
{
	opts_t opts;
	int i;

	set_defaults(&opts);
	if (!parse_command_line(argc, argv, &opts))
		usage(argv[0]);

	if (opts.do_seed)
		sran32b(opts.seed0, opts.seed1);

	for (i = 0; i < opts.num_samples; i++) {
		float rand = opts.mean + opts.stddev * gasdev();
		printf("%11.7f\n", rand);
	}

	return 0;
}