コード例 #1
0
        public GenerateCustomForm()
        {
            InitializeComponent();

            double expValueExp = 0.5, dispExp = 0.25, devExp = 0.5;
            double expValuePuass = 5, dispPuass = 5, devPuass = Math.Sqrt(5);

            Random rnd = new Random();
            // Теоретические значения мат. ожидания и среднеквадратического отклонения.
            var resListRnd = LinearTriggerGen.GenerateSystemRandom();
            // Генераторы по показательному распределению и распределению Пуассона.
            var resExp1   = resListRnd.ExpGenerate();
            var resExp2   = LinearTriggerGen.ExpFilterGenerate();
            var resPuass1 = resListRnd.PuassonGenerate();
            var tmp       = LinearTriggerGen.GenerateSystemRandom(10000);
            var resPuass2 = tmp.PuassonLimGenerate();

            #region Получение основных характеристик последовательностей.
            var expValueExp1 = LinearTriggerGen.ExpValue(resExp1);
            var dispExp1     = LinearTriggerGen.Disp(resExp1);
            var devExp1      = LinearTriggerGen.StandardDeviation(resExp1);

            var expValueExp2 = LinearTriggerGen.ExpValue(resExp2);
            var dispExp2     = LinearTriggerGen.Disp(resExp2);
            var devExp2      = LinearTriggerGen.StandardDeviation(resExp2);

            var expValuePuass1 = LinearTriggerGen.ExpValue(resPuass1);
            var dispPuass1     = LinearTriggerGen.Disp(resPuass1);
            var devPuass1      = LinearTriggerGen.StandardDeviation(resPuass1);

            var expValuePuass2 = LinearTriggerGen.ExpValue(resPuass2);
            var dispPuass2     = LinearTriggerGen.Disp(resPuass2);
            var devPuass2      = LinearTriggerGen.StandardDeviation(resPuass2);
            #endregion

            var chi2cnt1      = LinearTriggerGen.ChiSqrCountExp(resExp1).PrintChiSqrCount();
            var chi2cnt2      = LinearTriggerGen.ChiSqrCountExp(resExp2).PrintChiSqrCount();
            var chi2cntpuass1 = LinearTriggerGen.ChiSqrCount(resPuass1).PrintChiSqrCount();
            var chi2cntpuass2 = LinearTriggerGen.ChiSqrCount(resPuass2).PrintChiSqrCount();

            var chi2exp1   = LinearTriggerGen.ChiSqrViewE(resExp1);
            var chi2exp2   = LinearTriggerGen.ChiSqrViewE(resExp2);
            var chi2puass1 = LinearTriggerGen.ChiSqrViewP(resPuass1);
            var chi2puass2 = LinearTriggerGen.ChiSqrViewP(resPuass2);

            var chi2exp1Sum   = chi2exp1.Sum();
            var chi2exp2Sum   = chi2exp2.Sum();
            var chi2puass1Sum = chi2puass1.Sum();
            var chi2puass2Sum = chi2puass2.Sum();

            var chi2crit       = LinearTriggerGen.InvChiSqr();
            var chi2critExp1   = LinearTriggerGen.InvChiSqr(chi2exp1.Count);
            var chi2critExp2   = LinearTriggerGen.InvChiSqr(chi2exp2.Count);
            var chi2critPuass1 = LinearTriggerGen.InvChiSqr(chi2puass1.Count);
            var chi2critPuass2 = LinearTriggerGen.InvChiSqr(chi2puass2.Count);
            // Вывод на форму.
            ExpDistrChart.Series[0].ChartType     = SeriesChartType.FastPoint;
            ExpDistrFNChart.Series[0].ChartType   = SeriesChartType.FastPoint;
            PuasDistrChart.Series[0].ChartType    = SeriesChartType.FastPoint;
            PuasDistrLimChart.Series[0].ChartType = SeriesChartType.FastPoint;

            for (int i = 0; i < resExp1.Count - 1; i++)
            {
                ExpDistrLB.Items.Add(resExp1[i]);
                ExpDistrChart.Series[0].Points.AddXY(Math.Round(resExp1[i], 2), LinearTriggerGen.getDensity(resExp1[i]));
            }
            for (int i = 0; i < resExp2.Count - 1; i++)
            {
                ExpDistrFNLB.Items.Add(resExp2[i]);
                ExpDistrFNChart.Series[0].Points.AddXY(Math.Round(resExp2[i], 2), LinearTriggerGen.getDensity(resExp2[i]));
            }
            for (int i = 0; i < resPuass1.Count - 1; i++)
            {
                PuasDistrLB.Items.Add(resPuass1[i]);
                PuasDistrChart.Series[0].Points.AddXY(resPuass1[i], resPuass1[i + 1]);
            }
            for (int i = 0; i < resPuass2.Count - 1; i++)
            {
                PuasDistrLimLB.Items.Add(resPuass2[i]);
                PuasDistrLimChart.Series[0].Points.AddXY(resPuass2[i], resPuass2[i + 1]);
            }
            ExpDistrTB.Text = string.Format("Мат. ожидание =\r\n{0}" +
                                            "\r\n(теор. значение = {1})" +
                                            "\r\nДисперсия = \r\n{2}" + "\r\n(теор. значение = {3})\r\n" +
                                            "Среднеквадратическое\r\nотклонение = \r\n{4}\r\n(теор. значение = {5})\r\n" +
                                            "Промежутки:\r\n{6}\r\n" +
                                            "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                            "Хи-квадрат (крит.) =\r\n{8}",
                                            expValueExp1, expValueExp, dispExp1, dispExp, devExp1, devExp, chi2cnt1, chi2exp1Sum, chi2critExp1);
            ExpDistrFNTB.Text = string.Format("Мат. ожидание =\r\n{0}" +
                                              "\r\n(теор. значение = {1})" +
                                              "\r\nДисперсия = \r\n{2}" + "\r\n(теор. значение = {3})\r\n" +
                                              "Среднеквадратическое\r\nотклонение = \r\n{4}\r\n(теор. значение = {5})\r\n" +
                                              "Промежутки:\r\n{6}\r\n" +
                                              "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                              "Хи-квадрат (крит.) =\r\n{8}",
                                              expValueExp2, expValueExp, dispExp2, dispExp, devExp2, devExp, chi2cnt2, chi2exp2Sum, chi2critExp2);
            PuasDistrTB.Text = string.Format("Мат. ожидание =\r\n{0}" +
                                             "\r\n(теор. значение = {1})" +
                                             "\r\nДисперсия = \r\n{2}" + "\r\n(теор. значение = {3})\r\n" +
                                             "Среднеквадратическое\r\nотклонение = \r\n{4}\r\n(теор. значение = {5})\r\n" +
                                             "Промежутки:\r\n{6}\r\n" +
                                             "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                             "Хи-квадрат (крит.) =\r\n{8}",
                                             expValuePuass1, expValuePuass, dispPuass1, dispPuass, devPuass1, devPuass, chi2cntpuass1,
                                             chi2puass1Sum, chi2critPuass1);
            PuasDistrLimTB.Text = string.Format("Мат. ожидание =\r\n{0}" +
                                                "\r\n(теор. значение = {1})" +
                                                "\r\nДисперсия = \r\n{2}" + "\r\n(теор. значение = {3})\r\n" +
                                                "Среднеквадратическое\r\nотклонение = \r\n{4}\r\n(теор. значение = {5})\r\n" +
                                                "Промежутки:\r\n{6}\r\n" +
                                                "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                                "Хи-квадрат (крит.) =\r\n{8}",
                                                expValuePuass2, expValuePuass, dispPuass2, dispPuass, devPuass2, devPuass, chi2cntpuass2,
                                                chi2puass2Sum, chi2critPuass2);
        }
コード例 #2
0
        public GeneratorForm()
        {
            InitializeComponent();
            Random rnd = new Random();
            // Теоретические значения мат. ожидания и среднеквадратического отклонения.
            double expValue  = 0.5;
            double deviation = 1 / (2 * Math.Sqrt(3));
            // Инициализация модулей.
            long module1 = (long)Math.Pow(10, 8) + 1;
            long module2 = 2147483399;
            // Инициализация множителей "а".
            long a1 = 23;
            long a2 = 40692;

            #region Процесс генерации последовательности.
            // Первый датчик.
            var resList1_long = LinearTriggerGen.Generate(rnd.Next(1, 20), a1, module1);
            var resList1      = resList1_long.ConvertToQuasi(module1);
            // Второй датчик.
            var resList2_long = LinearTriggerGen.Generate(rnd.Next(1, 20), a2, module2);
            var resList2      = resList2_long.ConvertToQuasi(module2);
            // Первый и второй датчик (логику слияния см. в методе CombineMultiSeq).
            var resCombList = LinearTriggerGen.CombineMultiSeq(new List <List <long> > {
                resList1_long, resList2_long
            }, module1)
                              .ConvertToQuasi(module1);
            // Встроенный генератор C#.
            var resListRnd = LinearTriggerGen.GenerateSystemRandom();
            #endregion
            #region Оценка периода последовательностей.
            // Период первой последовательности.
            var period1 = LinearTriggerGen.GetPeriod(resList1);
            // Период второй последовательности.
            var period2 = LinearTriggerGen.GetPeriod(resList2);
            // Период последовательности, полученной слиянием первого и второго датчика.
            var periodComb = LinearTriggerGen.GetPeriod(resCombList);
            #endregion
            #region Получение основных характеристик последовательностей.
            // Мат. ожидание.
            var seq1exp    = LinearTriggerGen.ExpValue(resList1);
            var seq2exp    = LinearTriggerGen.ExpValue(resList2);
            var seqCombexp = LinearTriggerGen.ExpValue(resCombList);
            var seqRndexp  = LinearTriggerGen.ExpValue(resListRnd);
            // Среднеквадратическое отклонение.
            var seq1dev    = LinearTriggerGen.StandardDeviation(resList1);
            var seq2dev    = LinearTriggerGen.StandardDeviation(resList2);
            var seqCombdev = LinearTriggerGen.StandardDeviation(resCombList);
            var seqRnddev  = LinearTriggerGen.StandardDeviation(resListRnd);
            #endregion
            #region Хи-квадрат (набл. и крит.)
            // Кол-во
            var chi2cnt1    = LinearTriggerGen.ChiSqrCount(resList1).PrintChiSqrCount();
            var chi2cnt2    = LinearTriggerGen.ChiSqrCount(resList2).PrintChiSqrCount();
            var chi2cntComb = LinearTriggerGen.ChiSqrCount(resCombList).PrintChiSqrCount();
            var chi2cntRnd  = LinearTriggerGen.ChiSqrCount(resListRnd).PrintChiSqrCount();
            // Хи-квадрат набл.
            var chi2view1    = LinearTriggerGen.ChiSqrView(resList1).Sum();
            var chi2view2    = LinearTriggerGen.ChiSqrView(resList2).Sum();
            var chi2viewComb = LinearTriggerGen.ChiSqrView(resCombList).Sum();
            var chi2viewRnd  = LinearTriggerGen.ChiSqrView(resListRnd).Sum();

            var chi2crit = LinearTriggerGen.InvChiSqr();
            #endregion

            // Вывод на форму.
            FirstTriggerChart.Series[0].ChartType  = SeriesChartType.FastPoint;
            SecondTriggerChart.Series[0].ChartType = SeriesChartType.FastPoint;
            ComboTriggerChart.Series[0].ChartType  = SeriesChartType.FastPoint;
            SystemRandomChart.Series[0].ChartType  = SeriesChartType.FastPoint;
            for (int i = 0; i < resList1.Count - 1; i++)
            {
                FirstTriggerLB.Items.Add(resList1[i]);
                FirstTriggerChart.Series[0].Points.AddXY(resList1[i], resList1[i + 1]);
            }
            for (int i = 0; i < resList2.Count - 1; i++)
            {
                SecondTriggerLB.Items.Add(resList2[i]);
                SecondTriggerChart.Series[0].Points.AddXY(resList2[i], resList2[i + 1]);
            }
            for (int i = 0; i < resCombList.Count - 1; i++)
            {
                ComboTriggerLB.Items.Add(resCombList[i]);
                ComboTriggerChart.Series[0].Points.AddXY(resCombList[i], resCombList[i + 1]);
            }
            for (int i = 0; i < resListRnd.Count - 1; i++)
            {
                SystemRandomLB.Items.Add(resListRnd[i]);
                SystemRandomChart.Series[0].Points.AddXY(resListRnd[i], resListRnd[i + 1]);
            }
            FirstTriggerTB.Text = string.Format("m = {0}\r\na = {1}\r\nПериод\r\nпоследовательности =\r\n{2}\r\nМат. ожидание =\r\n{3}" +
                                                "\r\n(теор. значение = {4})" +
                                                "\r\nСреднеквадратическое\r\nотклонение = \r\n{5}" + "\r\n(теор. значение = {6})" +
                                                "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                                "Хи-квадрат (крит.) =\r\n{8}",
                                                module1, a1, period1, seq1exp, expValue, seq1dev, deviation, chi2view1, chi2crit);
            FirstTriggerTB.Text += "\r\n\r\n" + chi2cnt1;
            SecondTriggerTB.Text = string.Format("m = {0}\r\na = {1}\r\nПериод\r\nпоследовательности =\r\n{2}\r\nМат. ожидание =\r\n{3}" +
                                                 "\r\n(теор. значение = {4})" +
                                                 "\r\nСреднеквадратическое\r\nотклонение = \r\n{5}" + "\r\n(теор. значение = {6})" +
                                                 "\r\n\r\nХи-квадрат (набл.) =\r\n{7}\r\n" +
                                                 "Хи-квадрат (крит.) =\r\n{8}",
                                                 module2, a2, period2, seq2exp, expValue, seq2dev, deviation, chi2view2, chi2crit);
            SecondTriggerTB.Text += "\r\n\r\n" + chi2cnt2;
            ComboTriggerTB.Text   = string.Format("m = {0}\r\n\r\nПериод\r\nпоследовательности =\r\n{1}\r\nМат. ожидание =\r\n{2}" +
                                                  "\r\nСреднеквадратическое\r\nотклонение = \r\n{3}\r\n\r\nХи-квадрат (набл.) =\r\n{4}\r\n" +
                                                  "Хи-квадрат (крит.) =\r\n{5}",
                                                  module1, periodComb, seqCombexp, seqCombdev, chi2viewComb, chi2crit);
            ComboTriggerTB.Text += "\r\n\r\n" + chi2cntComb;
            SystemRandomTB.Text  = string.Format("Мат. ожидание =\r\n{0}" +
                                                 "\r\nСреднеквадратическое\r\nотклонение = \r\n{1}\r\n\r\nХи-квадрат (набл.) =\r\n{2}\r\n" +
                                                 "Хи-квадрат (крит.) =\r\n{3}",
                                                 seqRndexp, seqRnddev, chi2viewRnd, chi2crit);
            SystemRandomTB.Text += "\r\n\r\n" + chi2cntRnd;
        }