Ejemplo n.º 1
0
        /// <summary>
        /// Прогнозирование временного ряда алгоритмом ETS
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ForecastBt_Click(object sender, EventArgs e)
        {
            Application       xl  = new Application();
            WorksheetFunction wsf = xl.WorksheetFunction;

            dgv.DataSource = GetData(monthCalendar1).DefaultView;
            if (dgv.Rows.Count == 0)
            {
                MessageBox.Show("Не загружены данные из базы", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            // если есть данные
            var _OTS = GetData(monthCalendar2);
            int ch = 0, ch1 = 1;
            int count = dgv.RowCount;

            // интервалы выборки
            double[] x = new double[count];
            // значения выборки
            double[] y = new double[count];
            _x = new double[24 * (monthCalendar2.SelectionRange.End.Subtract(monthCalendar2.SelectionRange.Start).Days + 1)];
            _y = new double[_x.Length];
            double[] otsFact = new double[_x.Length];

            for (int k = 0; k < count; k++)
            {
                x[k] = Convert.ToDouble(dgv.Rows[k].Index + 1);
                y[k] = Convert.ToDouble(dgv.Rows[k].Cells[1].Value);
                ch++;
            }
            // получаем интервалы в часах для прогнозных точек
            for (int i = 0; i < _x.Length; i++)
            {
                _x[i] = ch1;
                ch1++;
            }
            // запускаем алгоритм прогнозирования ETS
            for (int i = 0; i < _y.Length; i++)
            {
                _y[i]      = Math.Round(wsf.Forecast_ETS(_x[i] + Convert.ToDouble(x.Length), y, x, 1, 1), 3);
                otsFact[i] = Convert.ToDouble(_OTS.Rows[i].Field <Decimal>("OTS"));
                Diagram.Series[0].Points.Add(otsFact[i]);
                Diagram.Series[1].Points.Add(_y[i]);
            }
        }