view src/samer/maths/random/GeneralisedExponential.java @ 5:b67a33c44de7

Remove some crap, etc
author samer
date Fri, 05 Apr 2019 21:34:25 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
 *	Copyright (c) 2000, Samer Abdallah, King's College London.
 *	All rights reserved.
 *
 *	This software is provided AS iS and WITHOUT ANY WARRANTY; 
 *	without even the implied warranty of MERCHANTABILITY or 
 *	FITNESS FOR A PARTICULAR PURPOSE.
 */

package samer.maths.random;
import  samer.core.*;
import  samer.core.types.*;
import  samer.maths.*;

// This is going to work by the rejection method
// (see Numerical Recipes in C)
// We'll use the cauchy distribution as our
// bounding function

// NB ONLY WORKS FOR alpha<=2!

public class GeneralisedExponential implements Generator
{
	BaseRandom	cauchy = new RectifiedCauchy();
	VDouble		alpha = new VDouble("alpha", 1);

	public void dispose() { cauchy.dispose(); alpha.dispose(); }
	public double next()
	{ 
		double x, f, g, a=alpha.value;
		do {
			// first, get a Cauchy distributed RV
			x = 2*cauchy.next();
			f = 4/(4+x*x); // cauchy
			g = Math.exp(-Math.pow(x,a)); // exponential
		} while (f*cauchy.rnd.nextDouble()>g);
		return x; 
	}

	public void next(double [] x)
	{
		for (int i=0; i<x.length; i++) x[i]=next();
	}
}