Esempio n. 1
0
double gauss()
{
    static int iset = 0;
    static double gset;
    double fac, rsq, v1, v2;

    seedrand();

    if(iset == 0)
    {
        do
        {
            v1  = 2. * drand48() - 1.;
            v2  = 2. * drand48() - 1.;
            rsq = v1 * v1 + v2 * v2;
        } while (rsq >= 1. || rsq == .0);

        fac  = sqrt(-2. * log(rsq) / rsq);
        gset = v1 * fac;
        iset = 1;

        return v2 * fac;
    }

    else
    {
        iset = 0;
        return gset;
    }
}
Esempio n. 2
0
int
nrand(int n)
{
	if(randn == 0)
		seedrand();
	randn = randn*1103515245 + 12345 + sys->ticks;
	return (randn>>16) % n;
}
Esempio n. 3
0
int
nrand(int n)
{
	if(randn == 0)
		seedrand();
	randn = randn*1103515245 + 12345 + osusectime();
	return (randn>>16) % n;
}
Esempio n. 4
0
int main(int argc, char **argv)
{
    seedrand();
#ifdef __UL_UTIL__GAUSS

    if(argc < 3)
    {
        fprintf(stderr, "Usage: gauss <a> <sigma> [n] \n");
        exit(-1);
    }

    double a = atof(argv[1]), sigma = atof(argv[2]);
    int n = 1, i;

    if(argc > 3)
    {
        n = atoi(argv[3]);
    }

    for(i = 0; i < n; i++)
    {
        printf("%3.8f\n", a + sigma * gauss());
    }

#elif defined(__UL_UTIL__IMF)

    if(argc < 4 || argc % 2)
    {
        fprintf(stderr, "Usage: imf m_min m_max alpha0 [m_i alpha_i]* \n");
        exit(-1);
    }

    int i, j, n = argc / 2 - 1;
    double *m     = (double *)malloc((n+1) * sizeof(double));
    double *alpha = (double *)malloc(n     * sizeof(double));
    double *r     = (double *)malloc(n     * sizeof(double));
    double *f     = (double *)malloc((n+1) * sizeof(double));

    m[0] = atof(argv[1]);
    m[n] = atof(argv[2]);
    alpha[0] = -atof(argv[3]);

    for(i = 1; i < n; i++)
    {
        m[i]     =  atof(argv[2*i+2]);
        alpha[i] = -atof(argv[2*i+3]);
    }

    setup_imf(m, alpha, n, r, f);

    int d[] = {0, 0, 0, 0, 0, 0};
    /*
    for(i = 0; i < n; i++)
     printf("f_%d(m) = %1.8f * m ^ %1.1f, F(%1.3f) = %1.8f, F(%1.3f) = %1.8f\n",
     i, r[i], alpha[i], m[i], f[i], m[i+1], f[i+1]);
    */

    seedrand();
    for(j = 0; j < 1000000; j++)
    {
        double m_ = get_imf_mass(m, alpha, n, r, f);
        printf("%e\n", m_);
    }

#endif
    exit(0);
}
Esempio n. 5
0
void rjMcMC1DSampler::sample()
{	
	mBirthDeathFromPrior = false;
	
	starttime = timestamp();
	double t1 = gettime();
	mChainInfo.resize(nchains);
	for (size_t ci = 0; ci < nchains; ci++){		
		unsigned int seed = (unsigned int)(ci + mRank + (unsigned int)time(NULL));		
		seedrand(seed);		
		
		mChainInfo[ci].reset();
		//mChainInfo[ci].modelchain.resize(nsamples);
		rjMcMC1DModel mcur;		
		for (size_t si = 0; si < nsamples; si++){

			//Initialis chain
			if (si == 0){
				mcur = choosefromprior();
				set_misfit(mcur);
			}

			//Initialise "best" models
			if (ci == 0 && si==0){
				mHighestLikelihood = mcur;
				mLowestMisfit = mcur;
			}
			
			rjMcMC1DModel mpro = mcur;
			size_t nopt = 4;
			if (mcur.nnuisances() > 0)nopt = 5;
			size_t option = irand((size_t)0, nopt - 1);
			
			bool accept = false;
			if (option == 0){
				accept = propose_valuechange(mcur, mpro);
			}
			else if (option == 1){
				accept = propose_move(mcur, mpro);
			}
			else if (option == 2){
				accept = propose_birth(mcur, mpro);
			}
			else if (option == 3){
				accept = propose_death(mcur, mpro);
			}
			else if (option == 4){
				accept=propose_nuisancechange(mcur,mpro);				
			}
			else if (option == 5){
				accept = propose_independent(mcur, mpro);
			}
			else{
				exit(1);
				break;
			}

			if (accept) mcur = mpro;				
						
			if (includeinmap(si)){
				pmap.addmodel(mcur);
				nmap.addmodel(mcur);
				mChainInfo[ci].modelchain.push_back(mcur);
			}

			if (mcur.logppd() > mHighestLikelihood.logppd()){
				mHighestLikelihood = mcur;
			}

			if (mcur.misfit() < mLowestMisfit.misfit()){
				mLowestMisfit = mcur;
			}

			if (saveconvergencerecord(si)){
				mChainInfo[ci].sample.push_back((uint32_t)si);
				mChainInfo[ci].nlayers.push_back((uint32_t)mcur.nlayers());
				mChainInfo[ci].misfit.push_back((float)mcur.misfit());
				mChainInfo[ci].logppd.push_back((float)mcur.logppd());
				mChainInfo[ci].ar_valuechange.push_back((float)ar_valuechange());
				mChainInfo[ci].ar_move.push_back((float)ar_move());
				mChainInfo[ci].ar_birth.push_back((float)ar_birth());
				mChainInfo[ci].ar_death.push_back((float)ar_death());
				mChainInfo[ci].ar_nuisancechange.push_back((float)ar_nuisancechange());
			}

			#ifdef _WIN32
			if (reportstats){
				if (mRank == 0 && isreportable(si)){
					//printstats(ci, si, mcur.nlayers(), mcur.misfit() / (double)ndata);
				}
			}
			#endif
		}
	}
	double t2 = gettime();
	endtime = timestamp();
	samplingtime = t2 - t1;
}