public Point(double m_x, double s_x, double m_y, double s_y, NormalRandom norm_rand) { mu_x = m_x; sigma_x = s_x; mu_y = m_y; sigma_y = s_y; nr = norm_rand; Set_Value(); }
public Set_Point(double mu_x_c, double sigma_x_c, double mu_y_c, double sigma_y_c, int n, NormalRandom normal) { mu_x = mu_x_c; sigma_x = sigma_x_c; mu_y = mu_y_c; sigma_y = sigma_y_c; count_point = n; normalRandom = normal; Set_Value_Point(); }
public SetPoint(double muXC, double sigmaXC, double muYC, double sigmaYC, int n, NormalRandom normal) { _muX = muXC; _sigmaX = sigmaXC; _muY = muYC; _sigmaY = sigmaYC; _countPoint = n; _normalRandom = normal; Set_Value_Point(); }
private void button_Click(object sender, RoutedEventArgs e) { var xyzDataSeries3D1 = new XyzDataSeries3D <double>(); var xyzDataSeries3D2 = new XyzDataSeries3D <double>(); _n1 = 0; _n2 = 0; var mu1X = 0.0; var mu1Y = 0.0; var mu2X = 0.0; var mu2Y = 0.0; var sigma1X = 0.0; var sigma1Y = 0.0; var sigma2X = 0.0; var sigma2Y = 0.0; var eps = 0.01; string inputBuffer; try { // ввод исходных данных inputBuffer = TextBox.Text; _n1 = Convert.ToInt32(inputBuffer); inputBuffer = TextBox1.Text; _n2 = Convert.ToInt32(inputBuffer); inputBuffer = TextBox2.Text; mu1X = Convert.ToDouble(inputBuffer); inputBuffer = TextBox3.Text; mu1Y = Convert.ToDouble(inputBuffer); inputBuffer = TextBox4.Text; mu2X = Convert.ToDouble(inputBuffer); inputBuffer = TextBox5.Text; mu2Y = Convert.ToDouble(inputBuffer); inputBuffer = TextBox6.Text; sigma1X = Convert.ToDouble(inputBuffer); inputBuffer = TextBox7.Text; sigma1Y = Convert.ToDouble(inputBuffer); inputBuffer = TextBox8.Text; sigma2X = Convert.ToDouble(inputBuffer); inputBuffer = TextBox9.Text; sigma2Y = Convert.ToDouble(inputBuffer); inputBuffer = TextBox24.Text; eps = Convert.ToDouble(inputBuffer); } catch (Exception ex) { MessageBox.Show(ex.Message); } List <Point> setP1; List <Point> setP2; var normRand = new NormalRandom(); var set1 = new SetPoint(mu1X, sigma1X, mu1Y, sigma1Y, _n1, normRand); var set2 = new SetPoint(mu2X, sigma2X, mu2Y, sigma2Y, _n2, normRand); setP1 = set1.get_list_point(); setP2 = set2.get_list_point(); var ro1 = MathTpr.CalculationOfCorrelationCoefficient(setP1, mu1X, mu1Y, sigma1X, sigma1X); var ro2 = MathTpr.CalculationOfCorrelationCoefficient(setP2, mu2X, mu2Y, sigma2X, sigma2X); // определение фактических значений мат. ожиданий и среднеквадратических отклонений _averageX1 = set1.calculate_Average_Value_x(); _averageY1 = set1.calculate_Average_Value_y(); _averageX2 = set2.calculate_Average_Value_x(); _averageY2 = set2.calculate_Average_Value_y(); _sigmaX1 = Math.Sqrt(MathTpr.DispersionX(setP1, _averageX1)); _sigmaY1 = Math.Sqrt(MathTpr.DispersionY(setP1, _averageY1)); _sigmaX2 = Math.Sqrt(MathTpr.DispersionX(setP2, _averageX2)); _sigmaY2 = Math.Sqrt(MathTpr.DispersionY(setP2, _averageY2)); // построение точек на плоскости XY foreach (var item in setP1) { var x = item.X; var z = item.Y; item.Z = MathTpr.func_Gauss_XY(item.X, item.Y, sigma1X, sigma1Y, mu1X, mu1Y, ro1); var y = 0; xyzDataSeries3D1.Append(x, y, z); } foreach (var item in setP2) { var x = item.X; var z = item.Y; item.Z = MathTpr.func_Gauss_XY(item.X, item.Y, sigma2X, sigma2Y, mu2X, mu2Y, ro2); var y = 0; xyzDataSeries3D2.Append(x, y, z); } xyzDataSeries3D1.SeriesName = "S1"; xyzDataSeries3D2.SeriesName = "S2"; PointGrid.DataContext = setP1; PointGridCopy.DataContext = setP2; if (_graph != null) { _graph = new _3DGraph { Visibility = Visibility.Visible }; } // создание формы с графиком _graph?.PaintGraph(set1, set2, sigma1X, sigma1Y, mu1X, mu1Y, mu2X, mu2Y, sigma2X, sigma2Y, _n1, _n2); }
// инициализация значений void Set_Value(double sigmaX, double muX, double sigmaY, double muY, NormalRandom nr) { X = nr.NextDouble() * sigmaX + muX; Y = nr.NextDouble() * sigmaY + muY; }
public Point(double mX, double sX, double mY, double sY, NormalRandom normRand) { Set_Value(sX, mX, sY, mY, normRand); }
private void button_Click(object sender, RoutedEventArgs e) { f_x_S1 = new List <Point>(); f_x_S2 = new List <Point>(); f_y_S1 = new List <Point>(); f_y_S2 = new List <Point>(); XyzDataSeries3D <double> xyzDataSeries3D_1 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_2 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_3 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_4 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_5 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_6 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_7 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_8 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_9 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_10 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_11 = new XyzDataSeries3D <double>(); XyzDataSeries3D <double> xyzDataSeries3D_12 = new XyzDataSeries3D <double>(); n_1 = 0; n_2 = 0; double mu_1_x = 0.0; double mu_1_y = 0.0; double mu_2_x = 0.0; double mu_2_y = 0.0; double sigma_1_x = 0.0; double sigma_1_y = 0.0; double sigma_2_x = 0.0; double sigma_2_y = 0.0; double x_cen = 0.0; double y_cen = 0.0; string input_buffer; double average_x1 = 0.0; double average_x2 = 0.0; double average_y1 = 0.0; double average_y2 = 0.0; try { // ввод исходных данных input_buffer = textBox.Text; n_1 = Convert.ToInt32(input_buffer); input_buffer = textBox1.Text; n_2 = Convert.ToInt32(input_buffer); input_buffer = textBox2.Text; mu_1_x = Convert.ToDouble(input_buffer); input_buffer = textBox3.Text; mu_1_y = Convert.ToDouble(input_buffer); input_buffer = textBox4.Text; mu_2_x = Convert.ToDouble(input_buffer); input_buffer = textBox5.Text; mu_2_y = Convert.ToDouble(input_buffer); input_buffer = textBox6.Text; sigma_1_x = Convert.ToDouble(input_buffer); input_buffer = textBox7.Text; sigma_1_y = Convert.ToDouble(input_buffer); input_buffer = textBox8.Text; sigma_2_x = Convert.ToDouble(input_buffer); input_buffer = textBox9.Text; sigma_2_y = Convert.ToDouble(input_buffer); } catch (Exception ex) { MessageBox.Show(ex.Message); } List <Point> set_p_1; List <Point> set_p_2; NormalRandom norm_rand = new NormalRandom(); Set_Point set1 = new Set_Point(mu_1_x, sigma_1_x, mu_1_y, sigma_1_y, n_1, norm_rand); Set_Point set2 = new Set_Point(mu_2_x, sigma_2_x, mu_2_y, sigma_2_y, n_2, norm_rand); set_p_1 = set1.get_list_point(); set_p_2 = set2.get_list_point(); // построение точек на плоскости XY foreach (var item in set_p_1) { var x = item.Return_Value_x(); var z = item.Return_Value_y(); var y = 0; xyzDataSeries3D_1.Append(x, y, z); } foreach (var item in set_p_2) { var x = item.Return_Value_x(); var z = item.Return_Value_y(); var y = 0; xyzDataSeries3D_2.Append(x, y, z); } ScatterSeries3D_1.DataSeries = xyzDataSeries3D_1; ScatterSeries3D_2.DataSeries = xyzDataSeries3D_2; double cov_1 = 0.0; for (int j = 0; j < n_1; j++) { cov_1 += (set_p_1[j].Return_Value_x() - mu_1_x) * (set_p_1[j].Return_Value_y() - mu_1_y); } cov_1 = cov_1 / n_1; double r = cov_1 / (sigma_1_x * sigma_1_y); double k = 1 / (2 * Math.PI * sigma_1_x * sigma_1_y * Math.Sqrt(1 - r * r)); for (int i = 0; i < n_1; i++) { int x = i; int z = i; double xVal = set_p_1[i].Return_Value_x(); double zVal = set_p_1[i].Return_Value_y(); set_p_1[i].Set_Value_z(k * Math.Exp(-(1 / (2 * (1 - r * r))) * ((((xVal - mu_1_x) * (xVal - mu_1_x)) / (sigma_1_x * sigma_1_x)) - (r * 2 * (xVal - mu_1_x) * (zVal - mu_1_y)) / (sigma_1_x * sigma_1_y) + (((zVal - mu_1_y) * (zVal - mu_1_y)) / (sigma_1_y * sigma_1_y))))); // построение распределения xyzDataSeries3D_3.Append(xVal, set_p_1[i].Return_Value_z(), zVal); // построение проекции на оси x и y xyzDataSeries3D_5.Append(xVal, set_p_1[i].Return_Value_z(), 0); xyzDataSeries3D_6.Append(0, set_p_1[i].Return_Value_z(), zVal); } Column1.DataSeries = xyzDataSeries3D_3; Column3.DataSeries = xyzDataSeries3D_5; Column4.DataSeries = xyzDataSeries3D_6; double cov_2 = 0.0; for (int j = 0; j < n_2; j++) { cov_2 += (set_p_2[j].Return_Value_x() - mu_2_x) * (set_p_2[j].Return_Value_y() - mu_2_y); } cov_2 = cov_2 / n_2; double r_2 = cov_2 / (sigma_2_x * sigma_2_y); double k_2 = 1 / (2 * Math.PI * sigma_2_x * sigma_2_y * Math.Sqrt(1 - r * r)); for (int i = 0; i < n_2; i++) { double xVal = set_p_2[i].Return_Value_x(); double zVal = set_p_2[i].Return_Value_y(); set_p_2[i].Set_Value_z(k_2 * Math.Exp(-(1 / (2 * (1 - r_2 * r_2))) * ((((xVal - mu_2_x) * (xVal - mu_2_x)) / (sigma_2_x * sigma_2_x)) - (r_2 * 2 * (xVal - mu_2_x) * (zVal - mu_2_y)) / (sigma_2_x * sigma_2_y) + (((zVal - mu_2_y) * (zVal - mu_2_y)) / (sigma_2_y * sigma_2_y))))); // построение распределения xyzDataSeries3D_4.Append(xVal, set_p_2[i].Return_Value_z(), zVal); // построение проекции на оси x и y xyzDataSeries3D_7.Append(xVal, set_p_2[i].Return_Value_z(), 0); xyzDataSeries3D_8.Append(0, set_p_2[i].Return_Value_z(), zVal); } Column2.DataSeries = xyzDataSeries3D_4; Column5.DataSeries = xyzDataSeries3D_7; Column6.DataSeries = xyzDataSeries3D_8; // построение плотностей проекций множеств S1 и S2 average_x1 = set1.calculate_Average_Value_x(); average_y1 = set1.calculate_Average_Value_y(); double dispersion_x1 = 0.0; double dispersion_y1 = 0.0; average_x2 = set2.calculate_Average_Value_x(); average_y2 = set2.calculate_Average_Value_y(); double dispersion_x2 = 0.0; double dispersion_y2 = 0.0; // построение плотности проекции f(x/S1) for (int i = 0; i < n_1; i++) { dispersion_x1 += Math.Pow(set_p_1[i].Return_Value_x() - average_x1, 2); } dispersion_x1 = dispersion_x1 / n_1; double sigma_x1 = Math.Sqrt(dispersion_x1); double x1 = average_x1 - sigma_x1 * 3; for (int i = 0; i < n_1 * 18; i++) { x1 += sigma_x1 / (n_1 * 3); double f_x = ((1 / (sigma_x1 * 2.50662827)) * Math.Exp(-(((x1 - average_x1) * (x1 - average_x1)) / (2 * sigma_x1 * sigma_x1)))); f_x_S1.Add(new Point(x1, 0, f_x) { sigma_x = sigma_x1, mu_x = average_x1 }); xyzDataSeries3D_9.Append(x1, f_x, 0); } PointLineSeries3D.DataSeries = xyzDataSeries3D_9; // построение плотности проекции f(x/S2) for (int i = 0; i < n_2; i++) { dispersion_x2 += Math.Pow(set_p_2[i].Return_Value_x() - average_x2, 2); } dispersion_x2 = dispersion_x2 / n_2; double sigma_x2 = Math.Sqrt(dispersion_x2); double x2 = average_x2 - sigma_x2 * 3; for (int i = 0; i < n_2 * 18; i++) { x2 += sigma_x2 / (n_2 * 3); double f_x = (1 / (sigma_x2 * 2.50662827)) * Math.Exp(-(((x2 - average_x2) * (x2 - average_x2)) / (2 * sigma_x2 * sigma_x2))); f_x_S2.Add(new Point(x2, 0, f_x) { sigma_x = sigma_x2, mu_x = average_x2 }); xyzDataSeries3D_10.Append(x2, f_x, 0); } PointLineSeries3D_1.DataSeries = xyzDataSeries3D_10; // построение плотности проекции f(y/S1) for (int i = 0; i < n_1; i++) { dispersion_y1 += Math.Pow(set_p_1[i].Return_Value_y() - average_y1, 2); } dispersion_y1 = dispersion_y1 / n_1; double sigma_y1 = Math.Sqrt(dispersion_y1); double y1 = average_y1 - sigma_y1 * 3; for (int i = 0; i < n_1 * 18; i++) { y1 += sigma_y1 / (n_1 * 3); double f_x = (1 / (sigma_y1 * 2.50662827)) * Math.Exp(-(((y1 - average_y1) * (y1 - average_y1)) / (2 * sigma_y1 * sigma_y1))); f_y_S1.Add(new Point(0, y1, f_x) { sigma_y = sigma_y1, mu_y = average_y1 }); xyzDataSeries3D_11.Append(0, f_x, y1); } PointLineSeries3D_2.DataSeries = xyzDataSeries3D_11; // построение плотности проекции f(y/S2) for (int i = 0; i < n_2; i++) { dispersion_y2 += Math.Pow(set_p_2[i].Return_Value_y() - average_y2, 2); } dispersion_y2 = dispersion_y2 / n_2; double sigma_y2 = Math.Sqrt(dispersion_y2); double y2 = average_y2 - sigma_y2 * 3; for (int i = 0; i < n_2 * 18; i++) { y2 += sigma_y2 / (n_2 * 3); double f_x = (1 / (sigma_y2 * 2.50662827)) * Math.Exp(-(((y2 - average_y2) * (y2 - average_y2)) / (2 * sigma_y2 * sigma_y2))); f_y_S2.Add(new Point(0, y2, f_x) { sigma_y = sigma_y2, mu_y = average_y2 }); xyzDataSeries3D_12.Append(0, f_x, y2); } PointLineSeries3D_3.DataSeries = xyzDataSeries3D_12; // вывод значений точек образов S1 и S2 на экран textBox17.Text += "Образ S1\n"; foreach (var point in set_p_1) { textBox17.Text += "x= " + point.Return_Value_x().ToString() + "\n" + "y= " + point.Return_Value_y().ToString() + "\n" + "f(x,y)= " + point.Return_Value_z().ToString() + "\n\n"; } textBox17.Text += "Образ S2\n"; foreach (var point in set_p_2) { textBox17.Text += "x= " + point.Return_Value_x().ToString() + "\n" + "y= " + point.Return_Value_y().ToString() + "\n" + "f(x,y)= " + point.Return_Value_z().ToString() + "\n\n"; } }