#include <ModelMath.h>
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 | GammaLn (float fX) |
For the use of PoissonRandomDraw. | |
Friends | |
class | clSimManager |
class | clTestModelMath |
For testing random number generator. |
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.
Copyright 2005 Charles D. Canham.
|
Adds bark to a tree diameter. The equation is:
|
|
Returns the value of a linear function.
|
|
Calculates basal area.
|
|
Calculates the exponential of the Lognormal probability distribution function at a particular point.
|
|
Calculates the exponential of the Weibull probability distribution function at a particular point.
|
|
For the use of PoissonRandomDraw. Returns the value ln(gamma(fX)) for fX > 0. Credit the Numerical Recipes in C book for this code, originally called gammln().
|
|
Random number generator. This is a "minimal" random number generator of Park and Miller with Bays-Durham shuffle and added safeguards. Returns a uniform random deviate between 0.0 and 1.0 (exclusive of the endpoint values). The value in m_iRandomSeed, below, is used as the seed. RNMX should approximate the largest floating value that is less than 1. Credit the Numerical Recipes in C book for this code, originally called ran1(). I have made it so it uses the seed in this class rather than requiring the seed to be passed in each call.
|
|
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 code is from the GSL (GNU Scientific Library). I simplified it to use our random number generator, and cut it from double to float precision.
|
|
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.
|
|
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 uses the Box-Mueller algorithm which requires two calls to the random number generator. This code is from the GSL (GNU Scientific Library) and was originally called gsl_ran_gaussian.
|
|
Returns a random Poisson-distributed number. Credit the Numerical Recipes in C book for this code (originally called poidev())- I don't claim to understand it entirely).
|
|
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.
|
|
Rounds a number to a specified number of digits. For this function, credit www.codeproject.com.
|