// Initialise with U[a1,b1] and U[a2, b2]
SumOfUniforms::SumOfUniforms(double a1, double b1, double a2, double b2)
{
	this->a1 = a1;
	this->b1 = b1;
	this->a2 = a2;
	this->b2 = b2;

	range1 = b1 - a1;
	range2 = b2 - a2;
	a12  = a1 + a2;
	b12 = b1 + b2;
	c1 = (a12 * a12) / (2 * range1 * range2);
	c3 = -(b12 * b12) / (2 * range1 * range2) + 1;

	if (range1 <= 0 || range2 <= 0)
		throw InvalidParametersException("Invalid ranges in sum of uniforms");

	if (a1 + b2 < a2 + b1)
	{
		case_flag = 0;
		c2 = (((a1 + b2) * (a1 + b2) - 2 * a12 * (a1 + b2)) / (2 * range1
				* range2)) + c1 - (a1 + b2) / range1;
	}
	if (a1 + b2 > a2 + b1)
	{
		case_flag = 1;
		c2 = (((a2 + b1) * (a2 + b1) - 2 * a12 * (a2 + b1)) / (2 * range1
				* range2)) + c1 - (a2 + b1) / range2;
	}
	else if (a1 + b2 == a2 + b1)
		case_flag = 2;
}
Exponential::Exponential(double lambda)
{
    if (lambda <= 0)
    {
        std::stringstream lambda_s;
        lambda_s << lambda;
        std::string message = "lambda = ";
        message.append(lambda_s.str());
        message.append(" : lambda <= 0 in a Exponential");
        throw InvalidParametersException(message);
    }
    this->lambda = lambda;
}
Beispiel #3
0
Uniform::Uniform(double alpha, double beta)
{
	if (alpha >= beta)
	{
		std::stringstream alpha_s;
		std::stringstream beta_s;
		alpha_s << alpha;
		beta_s << beta;
		std::string message = "alpha = ";
		message.append(alpha_s.str());
		message.append(", beta = ");
		message.append(beta_s.str());
		message.append(" : alpha >= beta in a Uniform");
		throw InvalidParametersException(message);
	}

	this->alpha = alpha;
	this->beta = beta;
}
Beispiel #4
0
Gaussian::Gaussian(double mean, double variance)
{
	if (variance <= 0)
	{
		std::stringstream var_s;
		var_s << variance;
		std::string message = "variance = ";
		message.append(var_s.str());
		message.append(" : variance <= 0 in a Gaussian");
		throw InvalidParametersException(message);
	}

	this->mean = mean;
	this->variance = variance;

	cache_varX2 = variance * 2;
	cache_one_over_sqrt_var2PI = 1 / sqrt(PI * cache_varX2);
	cache_leftMargin = mean - 4 * sqrt(variance);
	cache_rightMargin = mean + 4 * sqrt(variance);
}
Beispiel #5
0
	LambdaTransformation::LambdaTransformation(const parameter::Value& value)
		: Transformation(LambdaTransformationType::getInstance(), parameter::emptyValue) {
		assert_fail() << "Lambda Transformations can not be instantiated using parameters!";
		throw InvalidParametersException("Parameter-based instantiation not supported by lambda transformation!");
	};