示例#1
0
 //возвращает копию выборки
 public Sampling Clone()
 {
     Sampling Result = new Sampling();
     for (int i = 0; i < GetVolume(); i++)
     {
         Result.AddValue(GetValue(i));
     }
     return Result;
 }
        private Sampling sampling = null; //выборка

        #endregion Fields

        #region Constructors

        //конструктор
        public KolmogorovController(ZedGraphControl panel, Sampling sample, AnswerContainer answer, int type)
        {
            //сохрание входных даных в локальные переменные
            FuncType = type;
            DrawPanel = panel;
            lock (sample)
            {
                sampling = sample;
            }
            lock (answer)
            {
                Answer = answer;
            }
        }
        private List<double> UniversalBorders = null; //границы интервалов универсального метода

        #endregion Fields

        #region Constructors

        //конструктор
        public PirsonController(ZedGraphControl panel, Sampling sample, AnswerContainer answer, int type,int intervals, List<double> Borders)
        {
            //сохрание входных даных в локальные переменные
            FuncType = type;
            DrawPanel = panel;
            Intervals = intervals;
            UniversalBorders = Borders;
            lock(sample)
            {
                sampling = sample;
            }
            lock(answer)
            {
                Answer = answer;
            }
        }
示例#4
0
        public void DrawGraph1(ZedGraphControl control,Sampling sampling,int type)
        {
            GraphPane pane = control.GraphPane;     // Получим панель для рисования
            pane.CurveList.Clear();                 // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
            pane.Title.Text = "Выборка и её характеристика"; // Название панели и осей
            pane.XAxis.Title.Text = "N";
            pane.YAxis.Title.Text = "X";
            PointPairList list2 = new PointPairList();      // Создадим список точек
            list2.Add(0, sampling.AvеrageValue());          // добавим в список точки
            list2.Add(sampling.GetVolume(), sampling.AvеrageValue());

            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve2 = pane.AddCurve("среднее значение", list2, Color.Green, SymbolType.None);
            myCurve2.Line.Width = 2.0F; // Толщина графиков

            IDensityFunction function1 = null;
            switch (type)
            {
                case 0:
                    function1 = UniversalDistributionFunction.Create();
                    break;

                case 1:
                    function1 = InverseDistributionFunction.Create();
                    break;

                case 2:
                    function1 = DiscreteDistributionFunction.Create();
                    break;

                default:
                    throw new Exception("Неизвестная функция");
            }
            double Expectation = function1.GetExpectation();
            double MeanSquareDeviation = function1.GetMeanSquareDeviation();

            PointPairList list3 = new PointPairList();      // Создадим список точек
            list3.Add(0, Expectation);          // добавим в список точки
            list3.Add(sampling.GetVolume(), Expectation);

            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve3 = pane.AddCurve("математическое ожидание", list3, Color.Red, SymbolType.None);
            myCurve3.Line.Width = 2.0F; // Толщина графиков

            PointPairList list4 = new PointPairList();      // Создадим список точек
            list4.Add(sampling.GetVolume(), Expectation + MeanSquareDeviation); // добавим в список точки
            list4.Add(0, Expectation + MeanSquareDeviation);
            list4.Add(0, Expectation - MeanSquareDeviation);// добавим в список точки
            list4.Add(sampling.GetVolume(), Expectation - MeanSquareDeviation);

            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve4 = pane.AddCurve("СКО", list4, Color.Maroon, SymbolType.None);
            myCurve4.Line.Width = 2.0F; // Толщина графиков

            PointPairList list = new PointPairList();       // Создадим список точек
            list.Add(0, 0);
            for (int i = 0; i < sampling.GetVolume(); i++)  // Заполняем список точек
            {
                // добавим в список точку
                list.Add(i+1, 0);
                list.Add(i+1, sampling.GetValue(i));
                list.Add(i+1, 0);
            }
            // Создадим кривую с названием "Sinc",
            // которая будет рисоваться голубым цветом (Color.Blue),
            // Опорные точки выделяться не будут (SymbolType.None)
            LineItem myCurve = pane.AddCurve("Генерируемые  значения", list, Color.DarkOrchid, SymbolType.None);
            myCurve.Line.Width = 2.0F;
            pane.XAxis.Scale.Min = -1; // Устанавливаем интересующий нас интервал по оси X
            if(sampling.GetVolume()>=50)
            {
                pane.XAxis.Scale.Max = 51;
            }
            else
            {
                pane.XAxis.Scale.Max = sampling.GetVolume() + 1;
            }

            double Min = sampling.Min();
            double Max = sampling.Max();

            pane.YAxis.Scale.Min = Min - (Max - Min) / 20; // Устанавливаем интересующий нас интервал по оси Y
            pane.YAxis.Scale.Max = Max + (Max - Min) / 20;

            pane.XAxis.MajorGrid.IsVisible = true;  // Включаем отображение сетки напротив крупных рисок по оси X

            // Задаем вид пунктирной линии для крупных рисок по оси X:
            // Длина штрихов равна 10 пикселям, ...
             pane.XAxis.MajorGrid.DashOn = 10;

            // затем 5 пикселей - пропуск
             pane.XAxis.MajorGrid.DashOff = 5;

            // Включаем отображение сетки напротив крупных рисок по оси Y
             pane.YAxis.MajorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
                pane.YAxis.MajorGrid.DashOn = 10;
             pane.YAxis.MajorGrid.DashOff = 5;

            // Включаем отображение сетки напротив мелких рисок по оси X
            pane.YAxis.MinorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси Y:
            // Длина штрихов равна одному пикселю, ...
            pane.YAxis.MinorGrid.DashOn = 1;

            // затем 2 пикселя - пропуск
            pane.YAxis.MinorGrid.DashOff = 2;

            // Включаем отображение сетки напротив мелких рисок по оси Y
            pane.XAxis.MinorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.XAxis.MinorGrid.DashOn = 1;
            pane.XAxis.MinorGrid.DashOff = 2;

            //Цвет сетки
            pane.XAxis.MajorGrid.Color = Color.LightGray;
            pane.YAxis.MajorGrid.Color = Color.LightGray;

            //Оси
            pane.XAxis.MajorGrid.IsZeroLine = true;
            pane.YAxis.MajorGrid.IsZeroLine = true;

            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            control.AxisChange();

            // Обновляем график
            control.Invalidate();
        }