MathStat.ob07 5.1 KB

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