public static double[] CheckOutstanding(double[] data, out double[] clearData, float alpha) { List <double> dataList = new List <double>(data); List <double> trashList = new List <double>(); bool changes; do { changes = false; data = dataList.ToArray(); double mean = StatisticsProcessor.Srednee(data); double S = Math.Sqrt(StatisticsProcessor.Dispersion(data)); double Xmax = StatisticsProcessor.FindMax(data); double TnMax = (Xmax - mean) / S; if (TnMax > TTable(alpha, (uint)(data.Length))) { changes = true; dataList.Remove(Xmax); trashList.Add(Xmax); } double Xmin = StatisticsProcessor.FindMin(data); double TnMin = (mean - Xmin) / S; if (TnMin > TTable(alpha, (uint)(data.Length))) { changes = true; dataList.Remove(Xmin); trashList.Add(Xmin); } }while (changes); clearData = dataList.ToArray(); return(trashList.Count > 0 ? trashList.ToArray() : null); }
public static bool CheckZn(double[] data, Zakon zn, float alpha) { double[] ΔLeft, ΔRight; int[] v; int k = StatisticsProcessor.ToIntervals(data, out ΔLeft, out ΔRight, out v); double σв = Math.Sqrt(StatisticsProcessor.Dispersion(data)); double mean = StatisticsProcessor.Srednee(data); double[] p = new double[k]; for (int i = 0; i < k; i++) { double x1 = ΔLeft[i]; double x2 = ΔRight[i]; switch (zn) { case Zakon.Ravnom: p[i] = FxRavnom(x2, mean - 1.732 * σв, mean + 1.732 * σв) - FxRavnom(x1, mean - 1.732 * σв, mean + 1.732 * σв); break; case Zakon.Exponential: p[i] = FxExponential(x2, 1f / mean) - FxExponential(x1, 1f / mean); break; case Zakon.Normal: p[i] = FxNormal((x2 - mean) / σв) - FxNormal((x1 - mean) / σв); break; } } double χSqr = 0; for (int i = 0; i < k; i++) { χSqr += (v[i] - data.Length * p[i]) * (v[i] - data.Length * p[i]) / data.Length / p[i]; } int s = 0; switch (zn) { case Zakon.Ravnom: s = 2; break; case Zakon.Exponential: s = 1; break; case Zakon.Normal: s = 2; break; } return(χSqr < χSqrTable(alpha, (uint)(k - s - 1))); }