//==Функция вычисления частот для накопленных значений==// private void calculateAllFrequency() { uniformAllFrequencyMass.Clear(); // очищаем массивы частот gaussAllFrequencyMass.Clear(); uniformTheoryAllFrequencyMass.Clear(); gaussTheoryAllFrequencyMass.Clear(); uniformAllFrequencyMass.Capacity = numberOfSteps; // инициализируем массивы частот uniformAllFrequencyMass.AddRange(new double[numberOfSteps]); gaussAllFrequencyMass.Capacity = numberOfSteps; gaussAllFrequencyMass.AddRange(new double[numberOfSteps]); uniformTheoryAllFrequencyMass.Capacity = numberOfSteps; uniformTheoryAllFrequencyMass.AddRange(new double[numberOfSteps]); gaussTheoryAllFrequencyMass.Capacity = numberOfSteps; gaussTheoryAllFrequencyMass.AddRange(new double[numberOfSteps]); double uniformMaxValue = uniformDistributionMass.Max(); // находим граничные значения double gaussMaxValue = gaussDistributionMass.Max(); double uniformMinValue = uniformDistributionMass.Min(); double gaussMinValue = gaussDistributionMass.Min(); uniformAllSizeOfSteps = (uniformMaxValue - uniformMinValue) / numberOfSteps; // вычисляем длину шага gaussAllSizeOfSteps = (gaussMaxValue - gaussMinValue) / numberOfSteps; for (int i = 0; i < uniformDistributionMass.Count; i++) // распределяем отсчеты по интервалам { for (int j = 0; j < numberOfSteps; j++) { if (uniformDistributionMass[i] <= (uniformMinValue + (uniformAllSizeOfSteps * (j + 1)))) { uniformAllFrequencyMass[j] += 1; break; } } for (int j = 0; j < numberOfSteps; j++) { if (gaussDistributionMass[i] <= (gaussMinValue + (gaussAllSizeOfSteps * (j + 1)))) { gaussAllFrequencyMass[j] += 1; break; } } } for (int i = 0; i < numberOfSteps; i++) // вычисляем теоретические значения { uniformTheoryAllFrequencyMass[i] = 1 / (uniformMaxValue - uniformMinValue); gaussTheoryAllFrequencyMass[i] = DistrGenerator.CalculateGaussFunc(gaussMinValue + (0.5 * gaussAllSizeOfSteps) + (i * gaussAllSizeOfSteps)); } }
//==Функция генерации нового набора значений==/ private void newCalculateRandom(int numbRand = 0) { if (numbRand == 0) // автоматическое определение длины выборки { numbRand = numberOfDigits; } if (uniformDistributionMass.Capacity >= 10000) // ограничение объема массива { button1.Text = "Конец эксперимента"; button1.Enabled = false; return; } uniformDistributionMass.Capacity += numbRand; // расширение массивов всех сгенерированных чисел gaussDistributionMass.Capacity += numbRand; DistrGenerator.GetSelectOfUniformDistr(numbRand); // генерация нового интервала чисел //DistrGenerator.GetSelectOfGaussDistrS(numbRand); DistrGenerator.GetSelectOfGaussDistrBM(numbRand); // Сравнение двух методов генерации значений с гауссовым арспределением величин /* * System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); * watch.Start(); * DistrGenerator.GetSelectOfGaussDistrBM(numberOfDigits); * //for (double i = 0; i < 100; i+= 0.01) * // Math.Sin(i); * watch.Stop(); * Console.Out.WriteLine(watch.ElapsedTicks.ToString()); * * watch.Restart(); * DistrGenerator.GetSelectOfGaussDistrS(numberOfDigits); * // for (double i = 0; i < 10000; i++) * // Math.Sqrt(i); * watch.Stop(); * Console.Out.WriteLine(watch.ElapsedTicks.ToString()); */ for (int i = 0; i < numbRand; i++) // заполнение массивов новосгенерированными числами { uniformDistributionMass.Add(DistrGenerator.uniformMass[i]); gaussDistributionMass.Add(DistrGenerator.gaussMass[i]); } }