clModelMath Class Reference

SORTIE math library. More...

#include <ModelMath.h>

List of all members.

Public Member Functions

 ~clModelMath ()

Static Public Member Functions

static float CalcPointValue (float fX, float fSlope, float fIntercept=0.0)
 Returns the value of a linear function.
static float GetRand ()
 Random number generator.
static float CalculateBasalArea (float fDbh)
 Calculates basal area.
static float Round (float fNumber, int iNumDigits)
 Rounds a number to a specified number of digits.
static int RandomRound (float fNumber)
 Uses a random number to decide whether to round a number up or down to the next integer.
static float CalculateWeibullFunction (float fDispersal, float fTheta, float fDistance)
 Calculates the exponential of the Weibull probability distribution function at a particular point.
static float CalculateLognormalFunction (float fX0, float fXb, float fDistance)
 Calculates the exponential of the Lognormal probability distribution function at a particular point.
static int PoissonRandomDraw (float fLambda)
 Returns a random Poisson-distributed number.
static float LognormalRandomDraw (float fMean, float fStdDev)
 Returns a random lognormally-distributed number.
static float NormalRandomDraw (float fStdDev)
 Returns a random normally-distributed number with mean zero and standard deviation sigma.
static int NegBinomialRandomDraw (float fMean, float fClumping)
 Returns a random negative binomially-distributed number.
static float AddBarkToDBH (float fDIB, float fA, float fB, float fC)
 Adds bark to a tree diameter.
static float InverseGaussianRandomDraw (float fMu, float fLambda)
 Returns a random number over the inverse Gaussian distribution.
static void SetRandomSeed (long iSeed)
 Sets the random seed.

Static Public Attributes

static gsl_rng * randgen
 Random number generator.


Detailed Description

SORTIE math library.

This library provides some model-specific math functions.

The random number generator is very important. To make sure that no one can mess with the seed, I put the seed and the seed setting function in the private portion. Then clSimManager is a friend class and is the only one that can change the seed.

This used to be a library of C-style functions. But it turns out that the random number generator doesn't work right unless the seed is a class member.

I have made some wrappers for GSL, for back-compatibility from before GSL was used. But I have also opened up the random number generator so that other classes can use the GSL functions directly if they wish.

Copyright 2005 Charles D. Canham.

Author:
Lora E. Murphy

Edit history:
-----------------
April 28, 2004 - Submitted as beta (LEM)
October25, 2004: Added AddBarkToDBH (LEM)
February 20, 2005: Changed into class (LEM)
July 30, 2008: Installed GNU Scientific Library (LEM)

Constructor & Destructor Documentation

clModelMath::~clModelMath (  )  [inline]


Member Function Documentation

static float clModelMath::CalcPointValue ( float  fX,
float  fSlope,
float  fIntercept = 0.0 
) [static]

Returns the value of a linear function.

Parameters:
fX Point for which to calculate the function.
fSlope Slope of the function.
fIntercept Intercept of the function.
Returns:
Function value at the given point.

static float clModelMath::GetRand (  )  [static]

Random number generator.

This just wraps a call to GSL's uniform random number generator.

Returns:
a random number between 0 and 1.

static float clModelMath::CalculateBasalArea ( float  fDbh  )  [static]

Calculates basal area.

Parameters:
fDbh DBH in cm for which to calculate basal area.
Returns:
Basal area in square meters.
Exceptions:
modelErr if DBH is less than or equal to 0.

static float clModelMath::Round ( float  fNumber,
int  iNumDigits 
) [static]

Rounds a number to a specified number of digits.

For this function, credit www.codeproject.com.

Parameters:
fNumber Number to round.
iNumDigits Number of digits to round the number to. If 0, the number is rounded to the nearest integer.
Returns:
Rounded number.

static int clModelMath::RandomRound ( float  fNumber  )  [static]

Uses a random number to decide whether to round a number up or down to the next integer.

The number is split into integer and fractional parts. A random number is compared to the fractional part; if it is less than or equal to it, one is added to the integer part; otherwise the integer part is returned as-is.

Parameters:
fNumber Number to round.
Returns:
Rounded number.

static float clModelMath::CalculateWeibullFunction ( float  fDispersal,
float  fTheta,
float  fDistance 
) [static]

Calculates the exponential of the Weibull probability distribution function at a particular point.

Parameters:
fDispersal Value of dispersal variable
fTheta Value of theta variable
fDistance Distance, in meters, at which to calculate the function
Returns:
Value of function

static float clModelMath::CalculateLognormalFunction ( float  fX0,
float  fXb,
float  fDistance 
) [static]

Calculates the exponential of the Lognormal probability distribution function at a particular point.

Parameters:
fX0 Value of X0 variable
fXb Value of Xb variable
fDistance Distance, in meters, at which to calculate the function
Returns:
Value of function
Exceptions:
modelErr if fX0 or fDistance are not greater than 0, or if fXb is zero.

static int clModelMath::PoissonRandomDraw ( float  fLambda  )  [static]

Returns a random Poisson-distributed number.

This just wraps the appropriate GSL function.

Parameters:
fLambda Lambda (mean) of the Poisson function.
Returns:
Integer random draw.

static float clModelMath::LognormalRandomDraw ( float  fMean,
float  fStdDev 
) [static]

Returns a random lognormally-distributed number.

The lognormal distribution has the form

p(x) dx = 1/(x * sqrt(2 pi sigma2)) exp(-(ln(x) - zeta)2/2 sigma2) dx

for x > 0. Lognormal random numbers are the exponentials of gaussian random numbers.

This just wraps the appropriate GSL function.

Parameters:
fMean Mean of the distribution, or zeta in the above formula.
fStdDev Standard deviation of the distribution, or sigma in the above formula.
Returns:
Random lognormally-distributed number.

static float clModelMath::NormalRandomDraw ( float  fStdDev  )  [static]

Returns a random normally-distributed number with mean zero and standard deviation sigma.

The probability distribution for normal random variates is, p(x) dx = {1 / sqrt{2 π σ2}} exp (-x2 / 2σ2) dx for x in the range -infty to +infty. Use the transformation z = mu + x on the numbers returned to obtain a normal distribution with mean mu.

This function just wraps the appropriate GSL function.

Parameters:
fStdDev Standard deviation.
Returns:
Random normally-distributed number.

static int clModelMath::NegBinomialRandomDraw ( float  fMean,
float  fClumping 
) [static]

Returns a random negative binomially-distributed number.

The form of the distribution is from Equation 3.103 from Hilborn and Mangel (The Ecological Detective). Charlie Canham created this code.

Parameters:
fMean Function mean.
fClumping Clumping parameter.
Returns:
Random negative-binomially-distributed number.

static float clModelMath::AddBarkToDBH ( float  fDIB,
float  fA,
float  fB,
float  fC 
) [static]

Adds bark to a tree diameter.

The equation is:

DBH = a + b * DIB + c * DIB2
where:
  • DIB = diameter inside bark at 1.35 meters, in cm
  • DBH = diameter outside bark at 1.35 meters, in cm
  • a, b, and c are parameters

Parameters:
fDIB Diameter inside bark at 1.35 meters' height, in cm
fA "a" term in equation above
fB "b" term in equation above
fC "c" term in equation above
Returns:
Diameter outside the bark at 1.35 meters' height, in cm
Exceptions:
modelErr if DIB is less than or equal to 0, or large enough to create float overflow.

static float clModelMath::InverseGaussianRandomDraw ( float  fMu,
float  fLambda 
) [static]

Returns a random number over the inverse Gaussian distribution.

I got this code from http://www.cbr.washington.edu/papers/zabel/index.html, which is the dissertation "Spatial and Temporal Models of Migrating Juvenile Salmon with Applications", by Richard W. Zabel, University of Washington.

The inverse Gaussian PDF is: f(x; μ, λ) = [λ /(2πx3)]^(1/2) * exp[(-λ(x-μ)2 )/ (2 μ2x)]

Parameters:
fMu,: mu.
fLambda,: lambda.

static void clModelMath::SetRandomSeed ( long  iSeed  )  [inline, static]

Sets the random seed.

This should always be a negative number.

Parameters:
iSeed Seed to set.


Member Data Documentation

gsl_rng* clModelMath::randgen [static]

Random number generator.

Currently set to the Mersenne Twister algorithm.


The documentation for this class was generated from the following file:

Generated on Wed Oct 28 13:58:47 2009 for SORTIE Core C++ Documentation by  doxygen 1.5.6