Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (* ********************************************
  2.    Дополнение к модулю Math.
  3.    Статистические процедуры.
  4.    -------------------------------------
  5.    Additional functions to the module Math.
  6.    Statistical functions
  7. *********************************************** *)
  8.  
  9. MODULE MathStat;
  10.  
  11. IMPORT Math;
  12.  
  13.  
  14. (*Минимальное значение. Нецелое *)
  15. PROCEDURE MinValue* (data: ARRAY OF REAL; N: INTEGER): REAL;
  16. VAR
  17.     i: INTEGER;
  18.     a: REAL;
  19.  
  20. BEGIN
  21.     a := data[0];
  22.     FOR i := 1 TO N - 1 DO
  23.         IF data[i] < a THEN
  24.             a := data[i]
  25.         END
  26.     END
  27.  
  28.     RETURN a
  29. END MinValue;
  30.  
  31.  
  32. (*Минимальное значение. Целое *)
  33. PROCEDURE MinIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER;
  34. VAR
  35.     i: INTEGER;
  36.     a: INTEGER;
  37.  
  38. BEGIN
  39.     a := data[0];
  40.     FOR i := 1 TO N - 1 DO
  41.         IF data[i] < a THEN
  42.             a := data[i]
  43.         END
  44.     END
  45.  
  46.     RETURN a
  47. END MinIntValue;
  48.  
  49.  
  50. (*Максимальное значение. Нецелое *)
  51. PROCEDURE MaxValue* (data: ARRAY OF REAL; N: INTEGER): REAL;
  52. VAR
  53.     i: INTEGER;
  54.     a: REAL;
  55.  
  56. BEGIN
  57.     a := data[0];
  58.     FOR i := 1 TO N - 1 DO
  59.         IF data[i] > a THEN
  60.             a := data[i]
  61.         END
  62.     END
  63.  
  64.     RETURN a
  65. END MaxValue;
  66.  
  67.  
  68. (*Максимальное значение. Целое *)
  69. PROCEDURE MaxIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER;
  70. VAR
  71.     i: INTEGER;
  72.     a: INTEGER;
  73.  
  74. BEGIN
  75.     a := data[0];
  76.     FOR i := 1 TO N - 1 DO
  77.         IF data[i] > a THEN
  78.             a := data[i]
  79.         END
  80.     END
  81.  
  82.     RETURN a
  83. END MaxIntValue;
  84.  
  85.  
  86. (* Сумма значений массива *)
  87. PROCEDURE Sum* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  88. VAR
  89.     a: REAL;
  90.     i: INTEGER;
  91.  
  92. BEGIN
  93.     a := 0.0;
  94.     FOR i := 0 TO Count - 1 DO
  95.         a := a + data[i]
  96.     END
  97.  
  98.     RETURN a
  99. END Sum;
  100.  
  101.  
  102. (* Сумма целых значений массива *)
  103. PROCEDURE SumInt* (data: ARRAY OF INTEGER; Count: INTEGER): INTEGER;
  104. VAR
  105.     a: INTEGER;
  106.     i: INTEGER;
  107.  
  108. BEGIN
  109.     a := 0;
  110.     FOR i := 0 TO Count - 1 DO
  111.         a := a + data[i]
  112.     END
  113.  
  114.     RETURN a
  115. END SumInt;
  116.  
  117.  
  118. (* Сумма квадратов значений массива *)
  119. PROCEDURE SumOfSquares* (data : ARRAY OF REAL; Count: INTEGER): REAL;
  120. VAR
  121.     a: REAL;
  122.     i: INTEGER;
  123.  
  124. BEGIN
  125.     a := 0.0;
  126.     FOR i := 0 TO Count - 1 DO
  127.         a := a + Math.sqrr(data[i])
  128.     END
  129.  
  130.     RETURN a
  131. END SumOfSquares;
  132.  
  133.  
  134. (* Сумма значений и сумма квадратов значений массмва *)
  135. PROCEDURE SumsAndSquares* (data: ARRAY OF REAL; Count : INTEGER;
  136.                             VAR sum, sumofsquares : REAL);
  137. VAR
  138.     i: INTEGER;
  139.     temp: REAL;
  140.  
  141. BEGIN
  142.     sumofsquares := 0.0;
  143.     sum := 0.0;
  144.     FOR i := 0 TO Count - 1 DO
  145.         temp := data[i];
  146.         sumofsquares := sumofsquares + Math.sqrr(temp);
  147.         sum := sum + temp
  148.     END
  149. END SumsAndSquares;
  150.  
  151.  
  152. (* Средниее значений массива *)
  153. PROCEDURE Mean* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  154.     RETURN Sum(data, Count) / FLT(Count)
  155. END Mean;
  156.  
  157.  
  158. PROCEDURE MeanAndTotalVariance* (data: ARRAY OF REAL; Count: INTEGER;
  159.                                  VAR mu: REAL; VAR variance: REAL);
  160. VAR
  161.     i: INTEGER;
  162.  
  163. BEGIN
  164.     mu := Mean(data, Count);
  165.     variance := 0.0;
  166.     FOR i := 0 TO Count - 1 DO
  167.         variance := variance + Math.sqrr(data[i] - mu)
  168.     END
  169. END MeanAndTotalVariance;
  170.  
  171.  
  172. (* Вычисление статистической дисперсии равной сумме квадратов разницы
  173.    между каждым конкретным значением массива Data и средним значением *)
  174. PROCEDURE TotalVariance* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  175. VAR
  176.     mu, tv: REAL;
  177.  
  178. BEGIN
  179.     MeanAndTotalVariance(data, Count, mu, tv)
  180.     RETURN tv
  181. END TotalVariance;
  182.  
  183.  
  184. (* Типовая дисперсия всех значений массива *)
  185. PROCEDURE Variance* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  186. VAR
  187.     a: REAL;
  188.  
  189. BEGIN
  190.     IF Count = 1 THEN
  191.         a := 0.0
  192.     ELSE
  193.         a := TotalVariance(data, Count) / FLT(Count - 1)
  194.     END
  195.  
  196.     RETURN a
  197. END Variance;
  198.  
  199.  
  200. (* Стандартное среднеквадратичное отклонение *)
  201. PROCEDURE StdDev* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  202.     RETURN Math.sqrt(Variance(data, Count))
  203. END StdDev;
  204.  
  205.  
  206. (* Среднее арифметическое всех значений массива, и среднее отклонение *)
  207. PROCEDURE MeanAndStdDev* (data: ARRAY OF REAL; Count: INTEGER;
  208.                             VAR mean: REAL; VAR stdDev: REAL);
  209. VAR
  210.     totalVariance: REAL;
  211.  
  212. BEGIN
  213.     MeanAndTotalVariance(data, Count, mean, totalVariance);
  214.     IF Count < 2 THEN
  215.         stdDev := 0.0
  216.     ELSE
  217.         stdDev := Math.sqrt(totalVariance / FLT(Count - 1))
  218.     END
  219. END MeanAndStdDev;
  220.  
  221.  
  222. (* Евклидова норма для всех значений массива *)
  223. PROCEDURE Norm* (data: ARRAY OF REAL; Count: INTEGER): REAL;
  224. VAR
  225.     a: REAL;
  226.     i: INTEGER;
  227.  
  228. BEGIN
  229.     a := 0.0;
  230.     FOR i := 0 TO Count - 1 DO
  231.         a := a + Math.sqrr(data[i])
  232.     END
  233.  
  234.     RETURN Math.sqrt(a)
  235. END Norm;
  236.  
  237.  
  238. END MathStat.