Ejemplo n.º 1
0
        //Разбитие исходной выборки в корреляционную таблицу
        private void btnSeparate_Click_1(object sender, EventArgs e)
        {
            double bx, by;
            double?start_x = null, start_y = null;

            try
            {
                bx = double.Parse(txtBx.Text);
                by = double.Parse(txtBy.Text);

                if (txtStartX.Text.Length > 0)
                {
                    start_x = double.Parse(txtStartX.Text);
                }
                if (txtStartY.Text.Length > 0)
                {
                    start_y = double.Parse(txtStartY.Text);
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Некорректный формат значений", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            cor_table = new CorrelationTable(data.ToList(), bx, by, start_x, start_y);
            make_creation_table(cor_table);

            cortable_exists = true;
            setup_gui();
        }
Ejemplo n.º 2
0
        //Открытие корреляционной таблицы из файла
        private void menuOpenCorrelationTable_Click(object sender, EventArgs e)
        {
            var dlg = new OpenFileDialog();

            //dlg.Filter = "*.csv|Таблица CSV";
            if (dlg.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            reset_all();

            try
            {
                cor_table = CsvParser.ReadCorrelationTable(dlg.FileName);
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "Ошибка при чтении корреляционной таблицы", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            make_creation_table(cor_table);

            cortable_exists = true;
            setup_gui();
        }
Ejemplo n.º 3
0
        //Расчет других странных сумм
        double get_NijUiVj(CorrelationTable table, int[] Ni, double[] Ui, int[] Nj, double[] Vj)
        {
            double sum1 = 0;

            for (int x = 0; x < table.Width; x++)
            {
                for (int y = 0; y < table.Height; y++)
                {
                    sum1 += table[x, y] * Ui[x] * Vj[y];                            //???
                }
            }
            return(sum1);
        }
Ejemplo n.º 4
0
        /////////////////////////////////////////////////////////////////////////////

        //Находит число элементов
        int get_n(CorrelationTable table)
        {
            int sum = 0;

            for (int i = 0; i < table.Width; i++)
            {
                for (int j = 0; j < table.Height; j++)
                {
                    sum += table[i, j];
                }
            }

            return(sum);
        }
Ejemplo n.º 5
0
        int[] get_Ni(CorrelationTable table)
        {
            var ni = new int[table.Width];

            for (int x = 0; x < table.Width; x++)
            {
                int sum = 0;
                for (int y = 0; y < table.Height; y++)
                {
                    sum += table[x, y];
                }

                ni[x] = sum;
            }

            return(ni);
        }
Ejemplo n.º 6
0
        //Создание корреляционной таблицы заданного размера
        private void btnCreate_Click_1(object sender, EventArgs e)
        {
            if ((cortable_exists || cortable_empty_exists) && (MessageBox.Show("Создать новую таблицу? Это удалит текущие данные.", "Создание корреляционной таблицы", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No))
            {
                return;
            }

            reset_all();

            int n_x = (int)numCreateCols.Value;
            int n_y = (int)numCreateRows.Value;

            cor_table = new CorrelationTable(n_x, n_y);
            make_creation_table(cor_table);

            cortable_empty_exists = true;
            setup_gui();
        }
Ejemplo n.º 7
0
        public CorrelationCalc(CorrelationTable table)
        {
            this.Table = table;

            N  = get_n(table);
            Ni = get_Ni(table);
            Nj = get_Nj(table);

            var dxdy = get_DxDy(table);

            Dx = dxdy.X;
            Dy = dxdy.Y;

            Ui = get_ui(table, Dx);
            Vj = get_vj(table, Dy);

            NiUi  = get_NiUi(table.Width, Ni, Ui);
            NjVj  = get_NiUi(table.Height, Nj, Vj);
            NiUi2 = get_NiUi(table.Width, Ni, Ui.Select(x => x * x).ToArray());
            NjVj2 = get_NiUi(table.Height, Nj, Vj.Select(x => x * x).ToArray());

            Qu      = NiUi2 - NiUi * NiUi / N;
            Qv      = NjVj2 - NjVj * NjVj / N;
            NijUiVj = get_NijUiVj(table, Ni, Ui, Nj, Vj);
            Quv     = NijUiVj - NiUi * NjVj / N;;

            //Расчет среднего
            X = table.Bx * NiUi / N + Dx;
            Y = table.By * NjVj / N + Dy;

            //Расчет дисперсии
            Sx = table.Bx * table.Bx * Qu / (N - 1);
            Sy = table.By * table.By * Qv / (N - 1);

            //Расчет коэффициента корреляции:
            R = Quv / Math.Sqrt(Qu * Qv);

            //Расчет коээфициентов линейной регрессии
            B1  = table.By / table.Bx * Quv / Qu;
            B1_ = table.Bx / table.By * Quv / Qv;

            B0  = Y - B1 * X;
            B0_ = X - B1_ * Y;
        }
Ejemplo n.º 8
0
        //Находимт среднее наиболее часто встречающегося интервала
        PointD get_DxDy(CorrelationTable table)
        {
            //Находим наибллее часто встреч.
            int max = 0, max_x = 0, max_y = 0;

            for (int i = 0; i < table.Width; i++)
            {
                for (int j = 0; j < table.Height; j++)
                {
                    if (table[i, j] > max)
                    {
                        max   = table[i, j];
                        max_x = i;
                        max_y = j;
                    }
                }
            }

            return(new PointD(table.GetX(max_x).Middle, table.GetY(max_y).Middle));
        }
Ejemplo n.º 9
0
        ///////////////////////////////////////////////////////////////////////////////////////
        /// СОЗДАНИЕ, ОТКРЫТИЕ, ВВОД КОРРЕЛЯЦИОННОЙ ТАБЛИЦЫ
        ///////////////////////////////////////////////////////////////////////////////////////


        //Очищает все таблицы и прочее
        private void reset_all()
        {
            gridCorrelationInput.Rows.Clear();
            gridCorrelationInput.Columns.Clear();

            data                = new BindingList <PointD>();
            data.AllowEdit      = false;;
            data.AllowNew       = false;
            data.AllowRemove    = false;
            gridData.DataSource = data;

            cor_table = null;
            cor_calc  = null;

            txtX.Text  = "";
            txtY.Text  = "";
            txtSx.Text = "";
            txtSy.Text = "";
            txtR.Text  = "";

            gui_flags_set(false);
            setup_gui();
        }
Ejemplo n.º 10
0
 double[] get_vj(CorrelationTable table, double dy)
 {
     return(table.YHeaders.Select(y => (y.Middle - dy) / table.By).ToArray());
 }
Ejemplo n.º 11
0
 //Находим странные Ui, Vj
 double[] get_ui(CorrelationTable table, double dx)
 {
     return(table.XHeaders.Select(x => (x.Middle - dx) / table.Bx).ToArray());
 }
Ejemplo n.º 12
0
        ///////////////////////////////////////////////////////////////////////////////////////
        /// ТАБЛИЧНЫЙ ГРАФОН
        ///////////////////////////////////////////////////////////////////////////////////////

        //Создание таблицы для ручного ввода корреляционной таблицы
        //Или отображение уже готовй таблицы
        //MVC плачет кровавыми слезами
        private void make_creation_table(CorrelationTable table)
        {
            gridCorrelationInput.Rows.Clear();
            gridCorrelationInput.Columns.Clear();

            //int cell_size = 40;
            var templ_row    = new DataGridViewRow();
            var gray_style   = new DataGridViewCellStyle();
            var normal_style = new DataGridViewCellStyle();

            gray_style.BackColor   = Color.LightGray;
            gray_style.Alignment   = DataGridViewContentAlignment.MiddleCenter;
            normal_style.Alignment = DataGridViewContentAlignment.MiddleCenter;

            //Создаем столбцы
            //Левый столбец - гранцы интервалов по У
            templ_row.Cells.Add(new DataGridViewTextBoxCell());
            gridCorrelationInput.Columns.Add("WTF".ToString(), "");

            //Остальные столбцы
            for (int i = 0; i < table.Width; i++)
            {
                templ_row.Cells.Add(new DataGridViewTextBoxCell());
                gridCorrelationInput.Columns.Add("C" + i.ToString(), "");
                //gridCorrelationInput.Columns[i + 1].Width = cell_size;
            }

            //Заполняем таблицу

            //Первая строка
            gridCorrelationInput.Rows.Add();
            foreach (DataGridViewTextBoxCell c in gridCorrelationInput.Rows[0].Cells)
            {
                c.Style = gray_style;
            }
            gridCorrelationInput[0, 0].Value    = "Y\\X";
            gridCorrelationInput[0, 0].ReadOnly = true;

            for (int x = 0; x < table.Width; x++)
            {
                gridCorrelationInput[x + 1, 0].Value = table.XHeaders[x];
            }

            //Остальные строки
            for (int y = 0; y < table.Height; y++)
            {
                gridCorrelationInput.Rows.Add();
                //gridCorrelationInput.Rows[y + 1].Height = cell_size;

                gridCorrelationInput[0, y + 1].Value = table.YHeaders[y];
                gridCorrelationInput[0, y + 1].Style = gray_style;

                for (int x = 0; x < table.Width; x++)
                {
                    gridCorrelationInput[x + 1, y + 1].Style = normal_style;
                    gridCorrelationInput[x + 1, y + 1].Value = table[x, y].ToString();
                }
            }

            //Переход на вкладку с таблией
        }