home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 138 / pascal / meanstd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-05-13  |  1.7 KB  |  58 lines

  1.    {MEAN AND STANDARD DEVIATION        GARY CURTIS NEWPORT
  2.  
  3.     PURPOSE: This procedure reads a set of (real or integer) values from
  4.              an array and calculates the mean and (unbiased) standard
  5.              deviation of that set.
  6.  
  7.     ALGORITHM: See Alan R. Miller, Pascal Programs for Scientists and
  8.                Engineers, SYBEX, 1981,.  pp. 21-29.
  9.  
  10.     USE : The following declarations are used:
  11.  
  12.           CONST  max = (some integer);
  13.           TYPE   XarrayType = array[1..max] of integer; (or real)
  14.           VAR    Xarray : XarrayType;
  15.                  Mean, Std_Dev, Sample_Std_Dev : real;
  16.                  N  : integer;
  17.  
  18.  
  19.            Include MEANSTD
  20.            after declarations.  Fill Xarray with N values,
  21.            and call
  22.                    MEANSTD(Xarray, N, Mean, Std_Dev, Sample_Std_Dev);
  23.  
  24.  
  25. }
  26.  
  27.    procedure MEANSTD
  28.                     (VAR  x           : XarrayType;
  29.                           N           : integer;
  30.                      VAR  Mean        : real;
  31.                      VAR  Sigma       : real;
  32.                      VAR  SampleSigma : real );
  33.  
  34.       VAR
  35.          i      : integer;
  36.          denom,
  37.          sum_x,
  38.          sum_sq : real;
  39.  
  40.       BEGIN {MEANSTD}
  41.  
  42.          sum_x := 0;
  43.          sum_sq := 0;
  44.          for i := 1 to N do
  45.             begin
  46.             sum_x := sum_x + x[i];
  47.             sum_sq := sum_sq + (x[i] * x[i]);
  48.             end; {for}
  49.          Mean := sum_x/N;
  50.          if N = 1 then
  51.             denom := N    {Only 1 value}
  52.          else
  53.             denom := N - 1;
  54.          SampleSigma := Sqrt((sum_sq - ((Sqr(sum_x))/N))/(denom));
  55.          Sigma := Sqrt(( sum_sq - (( Sqr(sum_x))/N )) / N)
  56.  
  57.       END; {MEANSTD}
  58.