Beispiel #1
0
CELL *
bi_rand(CELL * sp)
{
    crank(seed);
    sp++;
    sp->type = C_DOUBLE;
    sp->dval = (double) seed / (double) M;
    return sp;
}
Beispiel #2
0
CELL *
bi_srand(CELL *sp)
{
#ifdef USE_SYSTEM_SRAND
    static long seed = 1;
    static CELL cseed =
    {
	C_DOUBLE, 0, 0, 1.0
    };
#endif

    CELL c;

    TRACE_FUNC("bi_srand", sp);

    if (sp->type == C_NOINIT)	/* seed off clock */
    {
	cellcpy(sp, &cseed);
	cell_destroy(&cseed);
	cseed.type = C_DOUBLE;
	cseed.dval = initial_seed();
    } else {			/* user seed */
	sp--;
	/* swap cseed and *sp ; don't need to adjust ref_cnts */
	c = *sp;
	*sp = cseed;
	cseed = c;
    }

#ifdef USE_SYSTEM_SRAND
    seed = d_to_i(cseed.dval);
    mawk_srand((unsigned) seed);
#else
    /* The old seed is now in *sp ; move the value in cseed to
       seed in range [1,M) */

    cellcpy(&c, &cseed);
    if (c.type == C_NOINIT)
	cast1_to_d(&c);

    seed = ((c.type == C_DOUBLE)
	    ? (long) (d_to_i(c.dval) & M) % M + 1
	    : (long) hash(string(&c)->str) % M + 1);
    if (seed == M)
	seed = M - 1;

    cell_destroy(&c);

    /* crank it once so close seeds don't give a close
       first result  */
    crank(seed);
#endif

    return_CELL("bi_srand", sp);
}
Beispiel #3
0
void Spearman(Vector & v1, Vector & v2,
              double & rankD, double & zD, double & probD,
              double & spearmanR, double & probSR)
   {
   double varD, sg, sf, fac, en3n, en, df, aveD, t;
   Vector wksp1, wksp2;

   wksp1.Copy(v1);
   wksp2.Copy(v2);

   wksp1.Sort(wksp2);
   sf = crank(wksp1);
   wksp2.Sort(wksp1);
   sg = crank(wksp2);

   rankD = 0;
   for (int j = 0; j < v1.dim; j++)
      // sum the square difference of ranks
      {
      double temp = wksp1[j] - wksp2[j];
      rankD += temp  * temp;
      }

   en = v1.dim;
   en3n = en*en*en - en;
   aveD = en3n / 6.0 - (sf + sg) / 12.0;
   fac = (1.0 - sf/en3n) * (1.0 - sg/en3n);
   varD = ((en - 1.0)*en*en*(en + 1.0)*(en + 1.0)/36.0)*fac;
   zD = (rankD - aveD) / sqrt(varD);
   probD = erfcc(fabs(zD)/1.4142136);

   spearmanR = (1.0 - (6.0/en3n)*(rankD+(sf+sg)/12.0))/sqrt(fac);
   fac = (spearmanR + 1.0) * (1.0 - spearmanR);
   if (fac)
      {
      t = (spearmanR) * sqrt((en - 2.0)/fac);
      df = en - 2.0;
      probSR = betai(0.5 * df, 0.5, df/(df + t*t));
      }
   else
      probSR = 0.0;
   }
Beispiel #4
0
void spear(float data1[], float data2[], unsigned long n, float *d, float *zd,
	float *probd, float *rs, float *probrs)
{
	float betai(float a, float b, float x);
	void crank(unsigned long n, float w[], float *s);
	float erfcc(float x);
	void sort2(unsigned long n, float arr[], float brr[]);
	unsigned long j;
	float vard,t,sg,sf,fac,en3n,en,df,aved,*wksp1,*wksp2;

	wksp1=vector(1,n);
	wksp2=vector(1,n);
	for (j=1;j<=n;j++) {
		wksp1[j]=data1[j];
		wksp2[j]=data2[j];
	}
	sort2(n,wksp1,wksp2);
	crank(n,wksp1,&sf);
	sort2(n,wksp2,wksp1);
	crank(n,wksp2,&sg);
	*d=0.0;
	for (j=1;j<=n;j++)
		*d += SQR(wksp1[j]-wksp2[j]);
	en=n;
	en3n=en*en*en-en;
	aved=en3n/6.0-(sf+sg)/12.0;
	fac=(1.0-sf/en3n)*(1.0-sg/en3n);
	vard=((en-1.0)*en*en*SQR(en+1.0)/36.0)*fac;
	*zd=(*d-aved)/sqrt(vard);
	*probd=erfcc(fabs(*zd)/1.4142136);
	*rs=(1.0-(6.0/en3n)*(*d+(sf+sg)/12.0))/sqrt(fac);
	fac=(*rs+1.0)*(1.0-(*rs));
	if (fac > 0.0) {
		t=(*rs)*sqrt((en-2.0)/fac);
		df=en-2.0;
		*probrs=betai(0.5*df,0.5,df/(df+t*t));
	} else
		*probrs=0.0;
	free_vector(wksp2,1,n);
	free_vector(wksp1,1,n);
}
Beispiel #5
0
CELL *
bi_srand(CELL * sp)
{
    CELL c;

    if (sp->type == 0)		/* seed off clock */
    {
	time_t secs = time((time_t *) 0);
	cellcpy(sp, &cseed);
	cell_destroy(&cseed);
	cseed.type = C_DOUBLE;
	cseed.dval = (double) secs;
    } else {			/* user seed */
	sp--;
	/* swap cseed and *sp ; don't need to adjust ref_cnts */
	c = *sp;
	*sp = cseed;
	cseed = c;
    }

    /* The old seed is now in *sp ; move the value in cseed to
       seed in range [1,M) */

    cellcpy(&c, &cseed);
    if (c.type == C_NOINIT)
	cast1_to_d(&c);

    seed = ((c.type == C_DOUBLE)
	    ? (long) (d_to_i(c.dval) & M) % M + 1
	    : (long) hash(string(&c)->str) % M + 1);
    if (seed == M)
	seed = M - 1;

    cell_destroy(&c);

    /* crank it once so close seeds don't give a close
       first result  */
    crank(seed);

    return sp;
}
Beispiel #6
0
CELL *
bi_rand(CELL *sp)
{
    TRACE_FUNC("bi_rand", sp);

#ifdef USE_SYSTEM_SRAND
    {
	long value = (long) mawk_rand();
	sp++;
	sp->type = C_DOUBLE;
	sp->dval = ((double) value) / RAND_MAX;
    }
#else
    crank(seed);
    sp++;
    sp->type = C_DOUBLE;
    sp->dval = (double) seed / (double) M;
#endif

    return_CELL("bi_rand", sp);
}
int main(int argc, char *argv[]){
    int i, j, l, m, n;
    /* Matrix Dimensions*/
    int nx=4, ny=4, nz=4;

    /*parameters to be changed by user*/
    int NT; /* Max Number of timesteps*/
    double alpha = .01;
    double dt = .001;
    double q = .005;
    double dx = .01; 
    double dz = .01;
    double dy = .01;
    double C = alpha*dt/pow(dx,2);
    int algo = 0;
    int border = 0;
    srand(time(NULL));/*make some noise*/
    double noise =  .09 * (double)(rand()/(double)RAND_MAX);

    welcome(&nx, &ny, &nz, &alpha, &q, &dt, &dx, &algo, &border );

    /*    if(argc >1){
	  FILE *fp;
	  fp  = fopen(argv[1], "r");
	  fscanf(fp, "%d %d %d %d %lf %lf %lf %d %d", &nx, &ny, &nz, &NT, &dt, &alpha, &q, &border, &algo);
	  fclose(fp);
	  }
	  */
    assert(alpha * dt <= (0.5 * dx * dx));

    /*2 3D matrices init under gaussian conditions + boundaries*/
    double ***matrix =  initGaussians(nx, ny, nz, dx, dy, dz, noise);
    double ***matrix_np1 =  initGaussians(nx, ny, nz, dx, dy, dz, noise);
    int when = 0;
    print3DMatrix(matrix, nx, ny, nz, dx, dx, dx, when);

    double t_start, t_end;
    if( algo ==0 ){
	NT = 10000;
	t_start = clock();
	forwardTime(matrix, matrix_np1, nx, ny, nz, dx, dy, dz, C, q,border, NT);
	t_end = clock();
    }	
    else if( algo == 1 ){
	NT = 5;
	t_start = clock();
	crank(matrix, matrix_np1, nx, ny, nz, alpha, dx, C, border, NT);
	t_end = clock();
    }
    else if( algo == 2){
	NT = 5;
	t_start = clock();
	adi(matrix, matrix_np1, nx, ny, nz, alpha, dx, C, border, NT);
	t_end = clock();

    }
    else{
	printf("error in parameters");
	return 0;
    }
    freeMats(matrix, matrix_np1, nx, ny);
    printf("Total Time Elapsed.....\n");
    printf("%f\n",(t_end - t_start)/CLOCKS_PER_SEC);
    return 0;
}
int main(void)
{
	int i,j;
	float *data,*order,*s,**rays;
	char dummy[MAXSTR],txt[MAXSTR],city[NDAT+1][17],mon[NMON+1][5];
	FILE *fp;

	data=vector(1,NDAT);
	order=vector(1,NDAT);
	s=vector(1,NMON);
	rays=matrix(1,NDAT,1,NMON);
	if ((fp = fopen("table2.dat","r")) == NULL)
		nrerror("Data file table2.dat not found\n");
	fgets(dummy,MAXSTR,fp);
	fgets(txt,MAXSTR,fp);
	fscanf(fp,"%*15c");
	for (i=1;i<=NMON;i++) fscanf(fp," %s",mon[i]);
	fgets(dummy,MAXSTR,fp);
	fgets(dummy,MAXSTR,fp);
	for (i=1;i<=NDAT;i++) {
		fscanf(fp,"%[^0123456789]",city[i]);
		city[i][16]='\0';
		for (j=1;j<=NMON;j++) fscanf(fp,"%f",&rays[i][j]);
		fgets(dummy,MAXSTR,fp);
	}
	fclose(fp);
	printf("%s\n%16s",txt," ");
	for (i=1;i<=12;i++) printf(" %s",mon[i]);
	printf("\n");
	for (i=1;i<=NDAT;i++) {
		printf("%s",city[i]);
		for (j=1;j<=12;j++)
			printf("%4d",(int) (0.5+rays[i][j]));
		printf("\n");
	}
	printf(" press return to continue ...\n");
	getchar();
	/* Replace solar flux in each column by rank order */
	for (j=1;j<=12;j++) {
		for (i=1;i<=NDAT;i++) {
			data[i]=rays[i][j];
			order[i]=i;
		}
		sort2(NDAT,data,order);
		crank(NDAT,data,&s[j]);
		for (i=1;i<=NDAT;i++)
			rays[(int) (0.5+order[i])][j]=data[i];
	}
	printf("%16s"," ");
	for (i=1;i<=12;i++) printf(" %s",mon[i]);
	printf("\n");
	for (i=1;i<=NDAT;i++) {
		printf("%s",city[i]);
		for (j=1;j<=12;j++)
			printf("%4d",(int) (0.5+rays[i][j]));
		printf("\n");
	}
	free_matrix(rays,1,NDAT,1,NMON);
	free_vector(s,1,NMON);
	free_vector(order,1,NDAT);
	free_vector(data,1,NDAT);
	return 0;
}
Beispiel #9
0
std::string MicroScheme::result()
{
    return crank()->value();
}
Beispiel #10
0
MicroScheme &MicroScheme::next(const std::string &str)
{
    crank();
    _str = str;
    return *this;
}