static public double SzalF(InitialStatisticalAnalys ISAX, InitialStatisticalAnalys ISAY, List <Data> Q, string RegresTypeN) { double Szal = 0; for (int i = 0; i < ISAX.unsortl.Length; i++) { Szal += Math.Pow(ISAY.unsortl[i] - RegresType.Model(ISAX.unsortl[i], Q, RegresTypeN), 2); } Szal /= (ISAX.unsortl.Length - Q.Count); return(Math.Sqrt(Szal)); }
static public void Repaint(InitialStatisticalAnalys gr, InitialStatisticalAnalys gr2, Correlation_RegressionAnalysis CRA, Chart chart1, Chart chart2) { chart1.ChartAreas[0].AxisX.LabelStyle.Format = "###,##0.000"; chart1.ChartAreas[0].AxisY.LabelStyle.Format = "###,##0.000"; chart2.ChartAreas[0].AxisX.LabelStyle.Format = "###,##0.000"; chart2.ChartAreas[0].AxisY.LabelStyle.Format = "###,##0.000"; ///++++++++++++++++++++++++++++++++++++++++++++++ ///GISTOGAMA_PAINT ///++++++++++++++++++++++++++++++++++++++++++++++ chart1.Series.Clear(); chart2.Series.Clear(); if (CRA.f == null) { return; } chart1.Series.Add(CorelPaint(gr.unsortl, gr2.unsortl, Color.DarkBlue, "f")); chart1.ChartAreas[0].AxisX.Minimum = gr.Min.Q - gr.Len.Q * 0.05; chart1.ChartAreas[0].AxisX.Maximum = gr.Max.Q + gr.Len.Q * 0.05; chart1.ChartAreas[0].AxisX.Interval = Math.Round(gr.Len.Q * 0.1, 3); chart1.ChartAreas[0].AxisY.Interval = Math.Round(gr2.Len.Q * 0.1, 3); chart1.ChartAreas[0].AxisY.Minimum = gr2.Min.Q - gr2.Len.Q * 0.05; chart1.ChartAreas[0].AxisY.Maximum = gr2.Max.Q + gr2.Len.Q * 0.05; chart2.ChartAreas[0].AxisX.Minimum = chart2.ChartAreas[0].AxisY.Minimum = 0; chart2.ChartAreas[0].AxisX.Maximum = CRA.f.GetLength(0); chart2.ChartAreas[0].AxisY.Maximum = CRA.f.GetLength(1); chart2.ChartAreas[0].AxisX.Interval = chart2.ChartAreas[0].AxisY.Interval = 100; chart1.Titles[0].Text = "y"; chart1.Titles[1].Text = "x"; chart2.Titles[0].Text = "x"; chart2.Titles[1].Text = "y"; chart2.ChartAreas[0].AxisY.CustomLabels.Clear(); /*for (int j = 0; j < CRA.f.GetLength(0); j++) * { * string str2 = ""; * for (int k = 0; k < CRA.f.GetLength(1); k++) * { * str2 = "f" + j.ToString() + "_" + k.ToString(); * chart2.Series.Add(str2); * chart2.Series[str2].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point; * chart2.Series[str2].MarkerStyle = MarkerStyle.Square; * chart2.Series[str2].IsVisibleInLegend = false; * chart2.Series[str2].MarkerSize = (chart2.Size.Width - 20 + k * 10) / CRA.f.GetLength(0); * //chart2.Series[str2]["PixelPointWidth"] = "200";//PointWidth * double z = CRA.f[j, k]; * if (z > 0.07) * chart2.Series[str2].Color = Color.Black; * else * { * int r = 255 - (int)(255 * CRA.f[j, k] / 0.07); * chart2.Series[str2].Color = Color.FromArgb(r, r, r); * } * //chart2.Series[str2].Color = Color.FromArgb(r, r, r); * //chart2.Series[str2]["StackedGroupName"] = "Group" + j.ToString(); * chart2.Series[str2].Points.AddXY(j + 0.5, * k + 0.5); * } * }*/ Image d = PaintData.Paintf(CRA, 1000, 1000); NamedImage ni = new NamedImage("backimage", d); chart2.Images.Add(ni); chart2.ChartAreas[0].BackImageAlignment = ChartImageAlignmentStyle.Center; chart2.ChartAreas[0].BackImageWrapMode = ChartImageWrapMode.Scaled; chart2.ChartAreas[0].BackImage = "backimage"; if (CRA.Doubl == true && CRA.Nezal == true) { chart1.Series.Add("Лін Рег" + ":" + CRA.RegresTypeVib); chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Color = Color.Yellow; chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].BorderWidth = 3; if (CRA.RegresTypeVib == RegresTypeName.LineRegresion) { //CRA.ABTeil ///teilor chart1.Series.Add("Лін Рег Тейл"); chart1.Series["Лін Рег Тейл"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Лін Рег Тейл"].Color = Color.Green; chart1.Series["Лін Рег Тейл"].Points.AddXY(gr.Min.Q, CRA.ABTeil[0] + gr.Min.Q * CRA.ABTeil[1]); chart1.Series["Лін Рег Тейл"].BorderWidth = 3; chart1.Series["Лін Рег Тейл"].Points.AddXY(gr.Max.Q, CRA.ABTeil[0] + gr.Max.Q * CRA.ABTeil[1]); } chart1.Series.Add("Тол меж"); chart1.Series["Тол меж"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Тол меж"].Color = Color.DarkRed; chart1.Series["Тол меж"].BorderWidth = 2; chart1.Series.Add("Тол меж2"); chart1.Series["Тол меж2"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Тол меж2"].Color = chart1.Series["Тол меж"].Color; chart1.Series["Тол меж2"].IsVisibleInLegend = false; chart1.Series["Тол меж2"].BorderWidth = 2; chart1.Series.Add("Дов інтр"); chart1.Series["Дов інтр"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Дов інтр"].Color = Color.DarkMagenta; chart1.Series["Дов інтр"].BorderWidth = 2; chart1.Series.Add("Дов інтр2"); chart1.Series["Дов інтр2"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series["Дов інтр2"].Color = chart1.Series["Дов інтр"].Color; chart1.Series["Дов інтр2"].IsVisibleInLegend = false; chart1.Series["Дов інтр2"].BorderWidth = 2; if (CRA.RegresTypeVib != RegresTypeName.ParabRegresion) { for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005) { double Sx0 = Math.Sqrt(CRA.Szal * (1 + 1.0 / gr.l.Count) + CRA.Q[1].QSigma * Math.Pow(x0 - gr.Mx.Q, 2)); if (CRA.RegresTypeVib == RegresTypeName.LineRegresion) { chart1.Series["Дов інтр"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * Sx0); chart1.Series["Дов інтр2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * Sx0); } chart1.Series["Тол меж"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * CRA.Szal); chart1.Series["Тол меж2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * CRA.Szal); } for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005) { chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib)); } } else if (CRA.RegresTypeVib == RegresTypeName.ParabRegresion) { double x2 = InitialStatisticalAnalys.StartMoment(gr.l, 2); double x3 = InitialStatisticalAnalys.StartMoment(gr.l, 3); double x4 = InitialStatisticalAnalys.StartMoment(gr.l, 4); double Tt = Distributions.StudentQuantile(1 - gr.alf.Q / 2, gr.unsortl.Length - 3); for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005) { double Sx0 = Math.Sqrt(Math.Pow(CRA.Szal2, 2) * (1 + 1.0 / gr.l.Count) + Math.Pow(CRA.Q[4].QSigma * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q), 2) + Math.Pow(CRA.Q[5].QSigma * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3), 2)); /* * chart1.Series["Дов інтр"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * Sx0); * chart1.Series["Дов інтр2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * Sx0);*/ chart1.Series["Дов інтр"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q) + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3) - Tt * Sx0); chart1.Series["Дов інтр2"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q) + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3) + Tt * Sx0); chart1.Series["Тол меж"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q) + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3) - Tt * CRA.Szal2); chart1.Series["Тол меж2"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q) + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3) + Tt * CRA.Szal2); } for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005) { chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q) + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3)); } } } }
private void Button1_Click(object sender, EventArgs e) { Random rand = new Random(); if (type < 2) { double Q1 = 0, Q2 = 0, Q3 = 0, N = 0; try { Q1 = Convert.ToDouble(Q1textBox.Text); Q2 = Convert.ToDouble(Q2textBox.Text); Q3 = Convert.ToDouble(Q3textBox.Text); N = Convert.ToDouble(NtextBox.Text); } catch (Exception ex) { MessageBox.Show("Невірні дані\n" + ex.Message, "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (type == 0) { if (comboBox1.Text == Distributions.Normal) { for (int i = 0; i < N; i++) { RezDat.Add(SimpleRNG.GetNormal(Q1, Q2)); } } else if (comboBox1.Text == Distributions.Exp) { for (int i = 0; i < N; i++) { RezDat.Add(Math.Log(1.0 / (1 - rand.NextDouble())) / Q1); } } else if (comboBox1.Text == Distributions.Line) { for (int i = 0; i < N; i++) { RezDat.Add((rand.NextDouble() * (Q2 - Q1) + Q1)); } } } else if (type == 1) { for (int i = 0; i < FirstData.Length; i++) { double dat = RegresType.Model(FirstData[i], new double[] { Q1, Q2, Q3 }, comboBox1.Text); double eps = SimpleRNG.GetNormal(0, N); if (double.IsInfinity(dat) || double.IsNaN(dat)) { MessageBox.Show("Неможливо створити даний тип регресії\n", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error); RezDat.Clear(); return; } dat = dat + eps; RezDat.Add(dat); } } } else if (type == 2) { double A0 = 0, N = 0; double[] A = new double[ISA.Count]; try { N = Convert.ToDouble(NtextBox.Text); A0 = Convert.ToDouble(Q2textBox.Text); string[] As = Regex.Split(Q1textBox.Text, ";"); if (As.Length != A.Length) { throw new System.ArgumentException("Невірний вектор A", "Помилка"); } for (int i = 0; i < As.Length && i < A.Length; i++) { A[i] = Convert.ToDouble(As[i]); } } catch { goto error; } for (int i = 0; i < ISA[0].unsortl.Length; i++) { double dat = 0; for (int j = 0; j < A.Length; j++) { dat += A[j] * ISA[j].unsortl[i]; } dat += A0; double eps = SimpleRNG.GetNormal(0, N); dat = dat + eps; RezDat.Add(dat); } } this.DialogResult = DialogResult.OK; this.Close(); return; error: this.DialogResult = DialogResult.Cancel; this.Close(); }