示例#1
0
 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();
 }
示例#2
0
 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();
 }
示例#3
0
 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();
 }
示例#4
0
        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);
        }
示例#5
0
 // инициализация значений
 void Set_Value(double sigmaX, double muX, double sigmaY, double muY, NormalRandom nr)
 {
     X = nr.NextDouble() * sigmaX + muX;
     Y = nr.NextDouble() * sigmaY + muY;
 }
示例#6
0
 public Point(double mX, double sX, double mY, double sY, NormalRandom normRand)
 {
     Set_Value(sX, mX, sY, mY, normRand);
 }
示例#7
0
        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";
            }
        }