/////////////////////////////////// РАСЧЕТЫ ///////////////////////////////////// //Автоматическая проверка гипотезы //Считает критерий, степени свободы, критическое значение //и сам сравнивает void auto_check(AbstractDistribution distr) { //Вычисляем значения double pirson_vis = calc_pirson(distr); int degrees_of_freedom = calc_degrees_of_freedom(distr); double pirson_crit = CriticalPirsonCriterion.GetCriticalValue((double)cbAlpha.SelectedItem, degrees_of_freedom); //Отображаем значения txtPirsonVis.Text = pirson_vis.ToString("N4"); txtDegreesOfFreedom.Text = degrees_of_freedom.ToString(); txtPirsonCrit.Text = pirson_crit.ToString("N4"); //Пишемм вывод if (pirson_vis < pirson_crit) { labelResult.Text = "НЕ ОТВЕРГАЕМ ГИПОТЕЗУ"; labelResult.ForeColor = Color.Green; } else { labelResult.Text = "ОТВЕРГАЕМ ГИПОТЕЗУ"; labelResult.ForeColor = Color.Red; } labelResult.Visible = true; }
private void PirsonTableForm_Load(object sender, EventArgs e) { var table = CriticalPirsonCriterion.GetTable(); var sign_level = CriticalPirsonCriterion.GetSignificanceLevel(); //Отображаем таблицу var templ_row = new DataGridViewRow(); for (int i = 0; i < sign_level.Count + 1; i++) { templ_row.Cells.Add(new DataGridViewTextBoxCell()); if (i == 0) { gridPirson.Columns.Add("c0", " "); } else { gridPirson.Columns.Add("c" + i, sign_level[i - 1].ToString()); } } gridPirson.RowTemplate = templ_row; int i_ = 1; foreach (var row_ in table) { var row_index = gridPirson.Rows.Add(); var row = gridPirson.Rows[row_index]; row.Cells["c0"].Value = i_; int j = 1; foreach (var alpha in row_.Keys) { row.Cells["c" + j].Value = row_[alpha]; j++; } i_++; } }
AbstractDistribution distr; //Распределение, для которого проверяется гипотеза /// <summary> /// Создает новый объект класса CheckDistributionForm с заданным распределением /// </summary> /// <param name="distr">Объект распределения</param> public CheckDistributionForm(AbstractDistribution distr) { InitializeComponent(); //Сохраняем распределение. Отображаем его имя this.distr = distr; lblDistrType.Text = distr.Name; //Заголовки графиков if (distr.DistributionType == DistributionType.DISCRETE) { graphEmp.GraphPane.Title.Text = "Полигон относительных частот"; } else { graphEmp.GraphPane.Title.Text = "Гистограмма относительных частот"; } graphTheor.GraphPane.Title.Text = "Теоретическая функция распределения"; //Отображает полигон относительных частот и график теоретического закона распределения //draw_distribution(graphEmp, distr.Distribution); draw_emp_graph(graphEmp, distr); draw_distribution(graphTheor, distr.GetTheoreticalFreq()); //Делаем одинаковый масштаб double min_1 = graphTheor.GraphPane.YAxis.Scale.Min; double min_2 = graphEmp.GraphPane.YAxis.Scale.Min; double max_1 = graphTheor.GraphPane.YAxis.Scale.Max; double max_2 = graphEmp.GraphPane.YAxis.Scale.Max; graphTheor.GraphPane.YAxis.Scale.Min = Math.Min(min_1, min_2); graphEmp.GraphPane.YAxis.Scale.Max = Math.Max(max_1, max_2); graphEmp.GraphPane.YAxis.Scale.MajorStep = graphTheor.GraphPane.YAxis.Scale.MajorStep; graphEmp.GraphPane.YAxis.Scale.MinorStep = graphTheor.GraphPane.YAxis.Scale.MinorStep; graphTheor.AxisChange(); graphTheor.Invalidate(); //Загружает значения уровней значимости в ComboBox cbAlpha.DataSource = CriticalPirsonCriterion.GetSignificanceLevel(); //Отображаем формулу распределения pboxFunction.BackgroundImage = distr.Funtion; //Отображаем точечные оценки //Магия foreach (DataGridViewColumn col in gridPointValues.Columns) { col.DataPropertyName = col.Name; } var bs = new BindingSource(); gridPointValues.RowTemplate.Height = 68; bs.DataSource = distr.PointValues.Select(x => new { ParamName = x.ParamName, Formula = x.Formula, Value = x.Value }).ToList(); gridPointValues.DataSource = bs; gridPointValues.Columns["Value"].DefaultCellStyle.Format = "N2"; //Настройка числа знаков после запятой для таблицы расчета gridCalcTable.Columns["Pi"].DefaultCellStyle.Format = "N2"; gridCalcTable.Columns["ni"].DefaultCellStyle.Format = "N2"; gridCalcTable.Columns["sums"].DefaultCellStyle.Format = "N2"; }