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))); }
public static double[] EmpVals(double[] data) { double[] lX, rX; int[] nX; StatisticsProcessor.ToIntervals(data, out lX, out rX, out nX); double[] res = new double[nX.Length]; double sum = 0; for (int i = 0; i < nX.Length; i++) { sum += nX[i]; res[i] = sum / data.Length; } return(res); }