public void GetStatistic() { Random rand = new Random(); double[] y = new double[N]; for (int i = 0; i < N; i++) { double ksi = rand.NextDouble(); double x = ksi * (b - a) + a; y[i] = 1 / (x + 1); } double[] v = y.OrderBy((x) => x).ToArray(); int _n; if (N <= 100) { _n = (int)Math.Sqrt(N); } else { _n = (int)(4 * Math.Log(N)); } double[] F = new double[N]; for (int i = 0; i < N; i++) { int w = 0; for (int j = 0; j < N; j++) { if (v[i] == v[j]) { w++; } } F[i] = (double)w / N; if (i > 0) { F[i] += F[i - 1]; } } Histogram = new LineSeries() { Title = "Эмпирическая функция распределения", Color = OxyColors.Green }; for (int i = 0; i < N; i++) { Histogram.Points.Add(new DataPoint(v[i], (i > 0) ? Math.Round(F[i - 1], 1) : 0)); Histogram.Points.Add(new DataPoint(v[i], Math.Round(F[i], 1))); } NormalDistributon _norm = new NormalDistributon(v); Func <double, double> tf = (arg) => { if (arg < -1) { return(0); } else if (arg >= -1 / 5) { return(1); } else { return(_norm.Function(arg)); } }; NormalFunction = new FunctionSeries(tf, -1, -1.0 / 5, dx) { Title = "Нормальный закон распределения", Color = OxyColors.Orange }; ExponentialDistribution _exp = new ExponentialDistribution(v); Func <double, double> tf1 = (arg) => { if (arg < -1) { return(0); } else if (arg >= -1 / 5) { return(1); } else { return(_exp.Function(arg)); } }; ExponentialFunction = new FunctionSeries(tf1, -1, -1.0 / 5, dx) { Title = "Экспоненциальный закон распределения", Color = OxyColors.Plum }; MyDistribution _myfun = new MyDistribution(); Func <double, double> tf3 = (arg) => { if (arg < -1) { return(0); } else if (arg >= -1 / 5) { return(1); } else { return(_myfun.Function(arg)); } }; MyFunction = new FunctionSeries(tf3, -1, -1.0 / 5, dx) { Title = "Теоретическая функция распределения", Color = OxyColors.Red }; UniformDistribution _uni = new UniformDistribution(v); Func <double, double> tf2 = (arg) => { if (arg < -1) { return(0); } else if (arg >= -1 / 5) { return(1); } else { return(_uni.Function(arg)); } }; UniformFunction = new FunctionSeries(tf2, -1, -1.0 / 5, dx) { Title = "Равномерный закон распределения", Color = OxyColors.Blue }; //////////////////////////////////////////////////////////////////////////// double[] _pirsonAnswers = new double[4]; Pirson _pirson = new Pirson(); _pirsonAnswers[0] = _pirson._Pirson(v, _norm); _pirsonAnswers[1] = _pirson._Pirson(v, _exp); _pirsonAnswers[2] = _pirson._Pirson(v, _uni); _pirsonAnswers[3] = _pirson._Pirson(v, _myfun); //////////////////////////////////////// int _N1 = 30; double[] y1 = new double[_N1]; for (int i = 0; i < 30; i++) { double ksi = rand.NextDouble(); double x = ksi * (b - a) + a; y1[i] = 1 / (x + 1); } v = y1.OrderBy((x) => x).ToArray(); double[] _colmoAnswers = new double[4]; Colmogorov _colmo = new Colmogorov(); _colmoAnswers[0] = _colmo._Colmogorov(v, _norm); _colmoAnswers[1] = _colmo._Colmogorov(v, _exp); _colmoAnswers[2] = _colmo._Colmogorov(v, _uni); _colmoAnswers[3] = _colmo._Colmogorov(v, _myfun); //////////////////////////////////////////////////////////////////////// int _N2 = 50; double[] y2 = new double[_N2]; for (int i = 0; i < 50; i++) { double ksi = rand.NextDouble(); double x = ksi * (b - a) + a; y2[i] = 1 / (x + 1); } v = y2.OrderBy((x) => x).ToArray(); double[] _mizesAnswers = new double[4]; Mizes _mizes = new Mizes(); _mizesAnswers[0] = _mizes._Mizes(v, _norm); _mizesAnswers[1] = _mizes._Mizes(v, _exp); _mizesAnswers[2] = _mizes._Mizes(v, _uni); _mizesAnswers[3] = _mizes._Mizes(v, _myfun); string[] answerString = { "-Нормальный з.р. ", "-Экспоненциальный з.р. ", "-Равномерный з.р. ", "-Теоретическую ф.р. " }; for (int i = 0; i < 4; i++) { bool _yes = false; if (_pirsonAnswers[i] != 0) { answerString[i] += "критерий Пирсона не отклоняет с вероятностью " + _pirsonAnswers[i].ToString() + ' '; _yes = true; } if (_colmoAnswers[i] != 0) { if (_yes) { answerString[i] += ",\n"; } answerString[i] += "критерий Колмогорова не отклоняет с вероятностью " + _colmoAnswers[i].ToString() + ' '; _yes = true; } if (_mizesAnswers[i] != 0) { if (_yes) { answerString[i] += ",\n"; } answerString[i] += "критерий Мизеса не отклоняет с вероятностью " + _mizesAnswers[i].ToString(); } if ((_mizesAnswers[i] == 0) && (_colmoAnswers[i] == 0) && (_pirsonAnswers[i] == 0)) { answerString[i] += "ни один из критериев не подтверждает"; } answerString[i] += ";\n"; } this.Result = ""; this.Result = answerString.Aggregate((working, next) => next + working); }