|
|
|
|
||
|
DEFINITION MODULE StatLib; (******************************************************************* Module StatLib (Version 0.1) Copyright (c) 1988-2006 by Olivier Roth and ETH Zurich. Purpose Basic statistical functions and procedures. Remarks -- Programming o Design Olivier Roth 04/09/1988 o Implementation Olivier Roth 04/09/1988 ETH Zurich Systems Ecology CHN E 35.1 Universitaetstrasse 16 8092 Zurich SWITZERLAND URLs: <mailto:RAMSES@env.ethz.ch> <http://www.sysecol.ethz.ch> <http://www.sysecol.ethz.ch/SimSoftware/RAMSES> Last revision of definition: 04/09/1988 OR *******************************************************************) TYPE FunctionXProc = PROCEDURE( REAL ): REAL; InRangeProc = PROCEDURE( REAL, REAL, REAL ): BOOLEAN; PROCEDURE MinX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* MinX returns the minimum value of the first N reals of array X. *) PROCEDURE MaxX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* MaxX returns the maximum value of the first N reals of array X. *) PROCEDURE WSumX ( VAR X: ARRAY OF REAL; N : CARDINAL; FX : FunctionXProc ): REAL; (* WSumX returns the weighted sum of the first N reals of array X. *) (* Each value is weighted according to the function FX. For instance, *) (* to compute the sum of the squares of the first 10 values of X, you *) (* should define a function such as Square( x: REAL ): REAL; , which *) (* returns the square of x. Once this is done, WSumX( X, 10, Square );*) (* would return the sum of squares of the first 10 values of X. *) PROCEDURE SumX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SumX returns the sum of X[i] for the first N values of X. *) PROCEDURE SumXY ( VAR X, Y: ARRAY OF REAL; N: CARDINAL ): REAL; (* SumXY returns the sum of X[i]*Y[i] for the first N values of X and Y.*) PROCEDURE SumX2 ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SumX2 returns the sum of X[i]^2 for the first N values of X. This *) (* is somewhat faster than using WSumX as shown in the example above. *) PROCEDURE SumX3 ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SumX3 returns the sum of X[i]^3 for the first N values of X. *) PROCEDURE SumX4 ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SumX4 returns the sum of X[i]^4 for the first N values of X. *) PROCEDURE WMeanX ( VAR X: ARRAY OF REAL; N : CARDINAL; FX : FunctionXProc ): REAL; (* WMeanX returns the weighted mean of the first N reals of array X. *) (* Each X[i] is weighted according to the function FX. *) PROCEDURE MeanX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* MeanX returns the mean of the first N reals of array X. *) PROCEDURE VarX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* VarX returns the variance of the first N reals of array X. *) PROCEDURE SDevX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SDevX returns the standard deviation of the first N reals of array X.*) PROCEDURE SkewX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* SkewX returns the skewness of the first N reals of array X.*) PROCEDURE KurtX ( VAR X: ARRAY OF REAL; N: CARDINAL ): REAL; (* KurtX returns the kurtosis of the first N reals of array X.*) PROCEDURE LinearReg ( VAR X, Y : ARRAY OF REAL; N : CARDINAL; VAR a, b, r2 : REAL ); (* LinearReg performs linear regression analysis on the first N *) (* values of X and Y. a and b are the coefficients of the best fit *) (* straight line, Y= ax+b; r2 is the coefficient of determination *) (* approaches zero as the data fail to fit a straight line. *) PROCEDURE FuncX ( VAR X, Y: ARRAY OF REAL; N : CARDINAL; FX : FunctionXProc ); (* FuncX takes the first N values of array X and computes *) (* the corresponding Y values such that Y[i]= FX( X[i] );. *) PROCEDURE CountX ( VAR X : ARRAY OF REAL; N : CARDINAL; XLow, XHigh: REAL; InRangeX : InRangeProc ): CARDINAL; (* CountX returns the number of X values (X[0]..X[N-1]) that meet *) (* the criteria defined by the boolean function InRangeX. See the *) (* description of InRangeProc above. Although XLow and XHigh are *) (* commonly used to define a continuous range, this is not necessary.*) (* For instance, InRangeX( x, xLow, xHigh ) may be written to yield *) (* TRUE if x is greater than XHigh or less than XLow. *) PROCEDURE InsertX ( VAR X : ARRAY OF REAL; N, j : CARDINAL; xValue : REAL ); (* InsertX is an array manipulation procedure. It first shifts *) (* X[j]..X[N-1] one index higher. xValue is then assigned to X[j]. *) (* Notice that the overall effect is to insert xValue into X[j]. *) (* Remember that the lower limit of open arrays is zero, and that *) (* the value parameter N is not updated (i.e. incremented by 1). *) PROCEDURE DeleteX ( VAR X : ARRAY OF REAL; N, j : CARDINAL ); (* DeleteX is an array manipulation procedure. It deletes X[j] by *) (* assigning X[i]:= X[N+1], for i:=j to N-1. This is the opposite *) (* of InsertX. *) PROCEDURE ClearX ( VAR X : ARRAY OF REAL; N : CARDINAL; xValue : REAL ); (* ClearX is an array manipulation procedure. It assigns the xValue *) (* to the first N values of X. *) PROCEDURE SortX ( VAR X: ARRAY OF REAL; N: CARDINAL ); (* SortX sorts the first N reals of array X in ascending order. This *) (* is an implementation of the QuickSort algorithm. *) PROCEDURE NormDist ( z1, z2 : REAL ): REAL; (* NormDist returns the area under the normal distribution curve whith *) (* a lower limit of z1 and an upper limit of z2. Note that NormDist *) (* returns 1.0 as z1 approaches negative infinity and z2 approaches *) (* positive infinity. If X is a random variable, then one would expect *) (* approxiamtely 68 percent of the observed values of X to fall whithin *) (* plus or minus one standard deviation of the mean of X. *) PROCEDURE Factorial ( N: CARDINAL ): REAL; (* Factorial returns N! (N factorial). *) PROCEDURE Combination ( N, R : CARDINAL ): REAL; (* Combination returns the number of combinations of N objects *) (* taken R at a time. *) PROCEDURE Permutation ( N, R : CARDINAL ): REAL; (* Permutation returns the number of permutations of N objects *) (* taken R at a time. *) END StatLib.
|
||
|
|
|