示例#1
0
 public AplicarTeorema()
 {
     _listaDeCadenas = new List <Mu>();
     _mu             = new Mu("", "0", new List <string>());
     _adminReglas    = new AdministradorReglas();
     _limpiador      = new Limpiador();
 }
        /// <summary>
        /// Gets Besselian elements values for specified Juluan Day.
        /// </summary>
        /// <param name="jd">Julian Day of interest</param>
        /// <returns></returns>
        internal InstantBesselianElements GetInstantBesselianElements(double jd)
        {
            //if (jd < From || jd > To)
            //    throw new ArgumentException($"Polynomial Besselian elements valid only for Julian Day in range [{From} ... {To}].", nameof(jd));

            // difference, with t0, in step units
            double t = (jd - JulianDay0) / Step;

            return(new InstantBesselianElements()
            {
                X = X.Select((x, n) => x * Pow(t, n)).Sum(),
                Y = Y.Select((y, n) => y * Pow(t, n)).Sum(),
                L1 = L1.Select((l1, n) => l1 * Pow(t, n)).Sum(),
                L2 = L2.Select((l2, n) => l2 * Pow(t, n)).Sum(),
                D = D.Select((d, n) => d * Pow(t, n)).Sum(),
                Mu = To360(Mu.Select((mu, n) => mu * Pow(t, n)).Sum()),
                F1 = F1.Select((f1, n) => f1 * Pow(t, n)).Sum(),
                F2 = F2.Select((f2, n) => f2 * Pow(t, n)).Sum(),
                dX = Derivative(X, t),
                dY = Derivative(Y, t),
                dL1 = Derivative(L1, t),
                dL2 = Derivative(L2, t),
                dD = Derivative(D, t),
                dMu = Derivative(Mu, t)
            });
        }
示例#3
0
 private void GuardarInstancia(Mu mu)
 {
     if (mu != null && mu.Cadena.Length <= 30)
     {
         _listaDeCadenas.Add(mu);
     }
 }
示例#4
0
        private void btnEqual_Click(object sender, EventArgs e)
        {
            second = double.Parse(tbxScreen.Text);

            double Su;
            double Mi;
            double Mu;
            double Di;

            switch (operation)
            {
            case "+":
                Su             = obj.Sum((first), (second));
                tbxScreen.Text = Su.ToString();
                break;

            case "-":
                Mi             = obj2.Minus((first), (second));
                tbxScreen.Text = Mi.ToString();
                break;

            case "*":
                Mu             = obj3.Multiply((first), (second));
                tbxScreen.Text = Mu.ToString();
                break;

            case "/":
                Di             = obj4.Divide((first), (second));
                tbxScreen.Text = Di.ToString();
                break;
            }
        }
示例#5
0
        public void KetXuat(XmlNode nodeCha)
        {
            XmlElement nodeCon = nodeCha.OwnerDocument.CreateElement("DONTHUC");

            nodeCon.SetAttribute("Mu", Mu.ToString());
            nodeCon.SetAttribute("HeSo", HeSo.ToString("n2"));
            nodeCha.AppendChild(nodeCon);
        }
示例#6
0
 private void EncontrarMu()
 {
     if (_listaDeCadenas.Find(mu => mu.EsMu == true) == null)
     {
         _mu.EsMu = false;
     }
     else
     {
         _mu = _listaDeCadenas.Find(mu => mu.EsMu == true);
     }
 }
示例#7
0
        /// <summary>
        /// Обработчик нажатия на кнопку сохранения параметров.
        /// Появляется окно выбора директории, затем файл
        /// записывается в выбранное место. Также обрабатываются
        /// исключения, которые могут возникнуть при записи.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bSave_Click(object sender, EventArgs e)
        {
            string path = "";

            if (saveFileInput.ShowDialog()
                == DialogResult.OK)
            {
                path = saveFileInput.FileName;
            }

            try
            {
                File.WriteAllLines(path, new string[]
                                   { N.ToString(), Mu.ToString(), Mv.ToString(), Um.ToString(), Vm.ToString(),
                                     du.ToString(), dv.ToString(), u.ToString(), v.ToString(), a.ToString(),
                                     Tc.ToString(), up1.ToString(), up2.ToString(), vp1.ToString(), vp2.ToString(),
                                     Ap1.ToString(), Ap2.ToString(), gamma.ToString(), _mu.ToString(), H.ToString(),
                                     pq.ToString() });
            }
            catch (FileNotFoundException)
            {
                MessageBox.Show("Файл не существует. " +
                                "Начните заново.");
            }
            catch (IOException)
            {
                MessageBox.Show("Ошибка в работе с файлом." +
                                " Начните заново.");
            }
            catch (UnauthorizedAccessException)
            {
                MessageBox.Show("Ошибка доступа к файлу:" +
                                " нет разрешения на доступ. Начните заново.");
            }
            catch (System.Security.SecurityException)
            {
                MessageBox.Show("Ошибка безопасности при " +
                                "работе с файлом. Начните заново.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Произошла ошибка: " + ex.Message);
            }
            finally { MessageBox.Show("Работа с файлом окончена."); }
        }
示例#8
0
        private Matrix GenereteMatrix(List <Element> elem)
        {
            var n      = elem.Count;
            var matrix = new DenseMatrix(n + 1, n + 1);

            matrix[0, 0] = Mu.Evaluate(elem[0].MidPoint) / elem[0].H - Beta.Evaluate(elem[0].MidPoint) / 2 + Sigma.Evaluate(elem[0].MidPoint) * elem[0].H / 3 + Alpha;
            matrix[0, 1] = -Mu.Evaluate(elem[0].MidPoint) / elem[0].H + Beta.Evaluate(elem[0].MidPoint) / 2 + Sigma.Evaluate(elem[0].MidPoint) * elem[0].H / 6;
            for (int i = 1; i < n; ++i)
            {
                matrix[i, i - 1] = -Mu.Evaluate(elem[i - 1].MidPoint) / elem[i - 1].H - Beta.Evaluate(elem[i - 1].MidPoint) / 2 + Sigma.Evaluate(elem[i - 1].MidPoint) * elem[i - 1].H / 6;
                matrix[i, i]     = Mu.Evaluate(elem[i - 1].MidPoint) / elem[i - 1].H + Beta.Evaluate(elem[i - 1].MidPoint) / 2 + Sigma.Evaluate(elem[i - 1].MidPoint) * elem[i - 1].H / 3 + Mu.Evaluate(elem[i].MidPoint) / elem[i].H - Beta.Evaluate(elem[i].MidPoint) / 2 + Sigma.Evaluate(elem[i].MidPoint) * elem[i].H / 3;
                matrix[i, i + 1] = -Mu.Evaluate(elem[i].MidPoint) / elem[i].H + Beta.Evaluate(elem[i].MidPoint) / 2 + Sigma.Evaluate(elem[i].MidPoint) * elem[i].H / 6;
            }
            matrix[n, n - 1] = -Mu.Evaluate(elem[n - 1].MidPoint) / elem[n - 1].H - Beta.Evaluate(elem[n - 1].MidPoint) / 2 + Sigma.Evaluate(elem[n - 1].MidPoint) * elem[n - 1].H / 6;
            matrix[n, n]     = Mu.Evaluate(elem[n - 1].MidPoint) / elem[n - 1].H + Beta.Evaluate(elem[n - 1].MidPoint) / 2 + Sigma.Evaluate(elem[n - 1].MidPoint) * elem[n - 1].H / 3 + Gamma;

            return(matrix);
        }
示例#9
0
        private void CalculateErrors(ref Iteration iter)
        {
            var n           = iter.Elements.Count;
            var errors      = new DenseVector(n);
            var errorsNorms = new DenseVector(n);

            var eNormV2 = 0.0;
            var uNormV2 = 0.0;

            for (int i = 0; i < n; ++i)
            {
                var m    = Math.Pow(iter.Elements[i].H, 3) / Mu.Evaluate(iter.Elements[i].MidPoint);
                var b    = F.Evaluate(iter.Elements[i].MidPoint) - (Beta.Evaluate(iter.Elements[i].MidPoint) * iter.SolutionCenterDeriv[i]) - (Sigma.Evaluate(iter.Elements[i].MidPoint) * iter.SolutionCenter[i]);
                var d    = 10 + ((iter.Elements[i].H * Beta.Evaluate(iter.Elements[i].MidPoint)) / Mu.Evaluate(iter.Elements[i].MidPoint) * ((iter.Elements[i].H * iter.Elements[i].H * Sigma.Evaluate(iter.Elements[i].MidPoint)) / Mu.Evaluate(iter.Elements[i].MidPoint)));
                var e_h2 = (5.0 / 6) * m * (b * b / d);
                errorsNorms[i] = Math.Sqrt(Math.Abs(e_h2));
                eNormV2       += Math.Abs(e_h2);

                var q = iter.SolutionCenterDeriv[i];
                uNormV2 += iter.Elements[i].H * q * q;
            }

            iter.UNormV2      = uNormV2;
            iter.ENormV2      = eNormV2;
            iter.ErrorsNormsV = errorsNorms;

            //iter.UNorm = Math.Sqrt(uNormV2);
            iter.UNorm = Math.Sqrt(iter.Solution * GenereteMatrix(iter.Elements) * iter.Solution);
            iter.ENorm = Math.Sqrt(eNormV2);

            for (int i = 0; i < n; ++i)
            {
                errors[i] = (errorsNorms[i] * Math.Sqrt(n) * 100) / Math.Sqrt(uNormV2 + eNormV2);
            }
            iter.Errors = errors;
            if (iter.N == InitialN)
            {
                startEn = iter.ENorm;
            }

            iter.OrderOfConvergence = (iter.N != InitialN) ? (Math.Log(startEn) - Math.Log(iter.ENorm)) / (Math.Log(iter.N) - Math.Log(InitialN)) : 0;
            iter.MaxRelativeError   = iter.Errors.Maximum();
        }
示例#10
0
        private void ParseNodes(XContainer root)
        {
            var streamElements = GetElements(root, "Stream");

            StreamsCount = streamElements.Count == 0 ? 1:
                           streamElements.Max(element => int.Parse(element.Attribute("Index").Value)) + 1;

            for (int stream = 0; stream < StreamsCount; stream++)
            {
                Mu.Add(new Vector <double>(
                           ParseMu(StreamsCount == 1? GetElement(root, "Mu") : GetElements(root, "Mu")
                                   .Single(element => GetAttributeValue <int>(element.Parent, "Index") == stream))));

                Lambda.Add(new Vector <double>(
                               ParseLambda(StreamsCount == 1 ? GetElement(root, "Lambda") : GetElements(root, "Lambda")
                                           .Single(element => GetAttributeValue <int>(element.Parent, "Index") == stream), stream)));

                Ro.Add(Lambda.Last().DivideElementWise(Mu.Last()));
            }
        }
示例#11
0
        /// <summary>
        /// Обработчик нажатия на кнопку перехода к
        /// дальнейшей работе с данными, происходит
        /// запись файла входных параметров, создание
        /// и открытие новой формы на основе текущей,
        /// сокрытие текущей формы.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bProceed_Click(object sender, EventArgs e)
        {
            try
            {
                File.WriteAllLines("Input.txt", new string[]
                                   { N.ToString(), Mu.ToString(), Mv.ToString(), Um.ToString(), Vm.ToString(),
                                     du.ToString(), dv.ToString(), u.ToString(), v.ToString(), a.ToString(),
                                     Tc.ToString(), up1.ToString(), up2.ToString(), vp1.ToString(), vp2.ToString(),
                                     Ap1.ToString(), Ap2.ToString(), gamma.ToString(), _mu.ToString(), H.ToString(),
                                     pq.ToString() });
            }
            catch (Exception ex)
            {
                MessageBox.Show("Произошла ошибка: " + ex.Message);
            }

            this.Hide();

            new Operations(this, prevForm, funcs, N, Mu, Mv, Um, Vm, du, dv, u, v, a, Tc,
                           up1, up2, vp1, vp2, Ap1, Ap2, gamma, _mu, H, pq).Show();
        }
 public override string ToString() =>
 $"TukeyGH({Mu.ToStringInvariant()},{Sigma.ToStringInvariant()},{G.ToStringInvariant()},{H.ToStringInvariant()})";
示例#13
0
        private Mu CrearCadenaInicial()
        {
            Mu muInicial = new Mu("MI", "", new List <string>());

            return(muInicial);
        }
示例#14
0
        /// <summary>
        /// Метод, задающий внешний вид формы и значения
        /// параметров симуляции их дефолтными значениями,
        /// тут же происходит натсройка текста надписей
        /// и подсказок для пользователя.
        /// </summary>
        void Begin()
        {
            panel.BackColor = panelColor;

            foreach (Button b in GetAllControlsOfType <Button>(this))
            {
                b.FlatAppearance.MouseOverBackColor = hoverColor;
                b.ForeColor = textColor;
            }

            foreach (Label l in GetAllControlsOfType <Label>(this))
            {
                l.ForeColor = textColor;
            }

            du  = dv = Um = Vm = 0.1666667f;
            u   = v = vp1 = vp2 = gamma = 0;
            a   = 0.42f;
            Tc  = 20;
            up1 = 0.03125f;
            up2 = -0.03125f;
            Ap1 = Ap2 = 300;
            _mu = 3000; H = 7;
            N   = 128;
            Mu  = Mv = 8;
            pq  = 576;

            lN.Text     = $"N = {N}";
            lMu.Text    = $"Mu = {Mv}";
            lMv.Text    = $"Mv = {Mu}";
            lUm.Text    = $"Um = {Um}";
            lVm.Text    = $"Vm = {Vm}";
            ldu.Text    = $"du = {dv}";
            ldv.Text    = $"dv = {dv}";
            lu.Text     = $"u = {u}";
            lv.Text     = $"v = {v}";
            lTc.Text    = $"Tc = {Tc}";
            la.Text     = $"a = {a}";
            lup1.Text   = $"up1 = {up1}";
            lup2.Text   = $"up2 = {up2}";
            lvp1.Text   = $"vp1 = {vp1}";
            lvp2.Text   = $"vp2 = {vp2}";
            lAp1.Text   = $"Ap1 = {Ap1}";
            lAp2.Text   = $"Ap2 = {Ap2}";
            lgamma.Text = $"gamma = {gamma}";
            l_mu.Text   = $"_mu = {_mu}";
            lH.Text     = $"H = {H}";
            lpq.Text    = $"pq = {pq}";

            InN.Text     = N.ToString();
            InMu.Text    = Mu.ToString();
            InMv.Text    = Mu.ToString();
            InUm.Text    = Um.ToString();
            InVm.Text    = Vm.ToString();
            Indu.Text    = dv.ToString();
            Indv.Text    = dv.ToString();
            Inu.Text     = u.ToString();
            Inv.Text     = v.ToString();
            InTc.Text    = Tc.ToString();
            Ina.Text     = a.ToString();
            Inup1.Text   = up1.ToString();
            Inup2.Text   = up2.ToString();
            Invp1.Text   = vp1.ToString();
            Invp2.Text   = vp2.ToString();
            InAp1.Text   = Ap1.ToString();
            InAp2.Text   = Ap2.ToString();
            Ingamma.Text = gamma.ToString();
            In_mu.Text   = _mu.ToString();
            InH.Text     = H.ToString();
            Inpq.Text    = pq.ToString();

            toolTip.SetToolTip(lN, "Количество векторов наблюдений," +
                               "\nпо которым формируется статистика." +
                               "\nЧисло должно быть целое и больше 0");
            toolTip.SetToolTip(lMu, "Количество модулей, на которые" +
                               "\nразбивается антенная решетка по длине" +
                               "\nЧисло должно быть целое и больше 0");
            toolTip.SetToolTip(lMv, "Количество модулей, на которые" +
                               "\nразбивается антенная решетка по ширине" +
                               "\nЧисло должно быть целое и больше 0");
            toolTip.SetToolTip(lUm, "Ширина главного лепестка диаграммы" +
                               "\nнаправленности модуля по одному углу." +
                               "\nРекомендуемое значение: эффективная" +
                               "\nразрешающая способность модуля " +
                               "\nпо одному измерению - 1/6 радиана");
            toolTip.SetToolTip(lVm, "Ширина главного лепестка диаграммы" +
                               "\nнаправленности модуля по другому углу." +
                               "\nРекомендуемое значение: эффективная" +
                               "\nразрешающая способность модуля " +
                               "\nпо одному измерению - 1/6 радиана");
            toolTip.SetToolTip(ldu, "Сдвиг до центра " +
                               "просматриваемого сектора\nпо одному углу");
            toolTip.SetToolTip(ldv, "Сдвиг до центра" +
                               " просматриваемого сектора\nпо другому углу");
            toolTip.SetToolTip(lu, "Предполагаемое положение" +
                               " цели по одному углу,\nизменяется от -1/12 " +
                               "до 1/12 радиана с шагом 1/48 радиана");
            toolTip.SetToolTip(lv, "Предполагаемое положение" +
                               " цели по другому углу,\nизменяется от -1/12" +
                               " до 1/12 радиана с шагом 1/48 радиана");
            toolTip.SetToolTip(la, "Мощность приходящего сигнала." +
                               "\nЧисло должно быть больше 0");
            toolTip.SetToolTip(lTc, "Начало прихода сигнала");
            toolTip.SetToolTip(lvp1, "Положение помех по другому углу");
            toolTip.SetToolTip(lvp2, "Положение помех по другому углу");
            toolTip.SetToolTip(lup1, "Положение помех по одному углу");
            toolTip.SetToolTip(lup2, "Положение помех по одному углу");
            toolTip.SetToolTip(lAp1, "Мощность помех. " +
                               "Число должно быть больше 0");
            toolTip.SetToolTip(lAp2, "Мощность помех. " +
                               "Число должно быть больше 0");
            toolTip.SetToolTip(lgamma, "Параметр гамма");
            toolTip.SetToolTip(l_mu, "Параметр регуляризации корреляционной" +
                               " матрицы.\nЧисло должно быть больше 0");
            toolTip.SetToolTip(lH, "Пороговое значение мощности сигнала" +
                               " для вывода точки.\nЧисло должно быть больше 0");
            toolTip.SetToolTip(lpq, "Количество блоков в 36 областях," +
                               "\nпо которым составляется корреляционная матрица." +
                               "\nРекомендуемое значение:" +
                               "\n36 * 2000 отсчетов по времени / N векторов выборки," +
                               "\nв противном случае размерности матриц будут конфликтующими.");
            toolTip.SetToolTip(bGet, "Для того, чтобы загрузить параметры из файла,\n" +
                               "файл должен соответствовать определенным требованиям:" +
                               "\n-расширение .txt\n-параметры записаны каждый с новой строки без" +
                               "\nдругих разделителей\n-дробные числа записаны через ." +
                               "\n-параметры в файле идут в такой последовательности:" +
                               "\nN, Mu, Mv, Um, Vm, du, dv, u,\nv, a, Tc, up1, up2, vp1, vp2,\n" +
                               "Ap1, Ap2, gamma, mu, H, pq." +
                               "\nВ противном случае считывание будет некорректным.");
            toolTip.SetToolTip(bExit, "Внимание!" +
                               "\nПри возвращении прогресс текущей сессии будет потерян." +
                               "\nУбедитесь в том, что вы сохранили все файлы," +
                               "\nкоторые не хотите потерять.");
        }
示例#15
0
 public override string ToString() => $"Laplace({Mu.ToStringInvariant()},{Sigma.ToStringInvariant()})";
示例#16
0
        public void TestReglaCuatro(string cadena)
        {
            List <string> listaVacia = new List <string>();
            Mu            muTest     = new Mu(cadena, "4", listaVacia);

            switch (muTest.Cadena)
            {
            case "MUUIIUUUI":
                var result = _mockAdministrador.Object.AplicarReglaCuatroSiEsPosible(muTest);

                var expectedResult1          = new Mu("MUIIUUUI", "4", listaVacia);
                var expectedResult2          = new Mu("MUUIIUI", "4", listaVacia);
                var listaResultadosEsperados = new List <Mu>
                {
                    expectedResult1,
                    expectedResult2
                };

                if (result.Count == listaResultadosEsperados.Count && result.Count == 2)
                {
                    Assert.AreEqual(result[0].Cadena, listaResultadosEsperados[0].Cadena);
                    Assert.AreEqual(result[1].Cadena, listaResultadosEsperados[1].Cadena);
                }
                else
                {
                    Assert.Fail();
                }
                break;

            case "MIUIUUI":
                var resultCase2 = _mockAdministrador.Object.AplicarReglaCuatroSiEsPosible(muTest);

                var expectedResult3           = new Mu("MIUIUI", "4", listaVacia);
                var listaResultadosEsperados2 = new List <Mu>
                {
                    expectedResult3
                };

                if (resultCase2.Count == listaResultadosEsperados2.Count && resultCase2.Count == 1)
                {
                    Assert.AreEqual(resultCase2[0].Cadena, listaResultadosEsperados2[0].Cadena);
                }
                else
                {
                    Assert.Fail();
                }
                break;

            case "MUUIUIU":
                var resultCase3 = _mockAdministrador.Object.AplicarReglaCuatroSiEsPosible(muTest);

                var expectedResult4           = new Mu("MUIUIU", "4", listaVacia);
                var listaResultadosEsperados4 = new List <Mu>
                {
                    expectedResult4
                };

                if (resultCase3.Count == listaResultadosEsperados4.Count && resultCase3.Count == 1)
                {
                    Assert.AreEqual(resultCase3[0].Cadena, listaResultadosEsperados4[0].Cadena);
                }
                else
                {
                    Assert.Fail();
                }
                break;

            case "MUUUUUUUI":
                var resultCase4 = _mockAdministrador.Object.AplicarReglaCuatroSiEsPosible(muTest);

                var expectedResult5           = new Mu("MUI", "4", listaVacia);
                var listaResultadosEsperados5 = new List <Mu>
                {
                    expectedResult5
                };

                if (resultCase4.Count == listaResultadosEsperados5.Count && resultCase4.Count == 1)
                {
                    Assert.AreEqual(resultCase4[0].Cadena, listaResultadosEsperados5[0].Cadena);
                }
                else
                {
                    Assert.Fail();
                }
                break;

            case "MIUIUIUUUIUU":
                var resultCase5 = _mockAdministrador.Object.AplicarReglaCuatroSiEsPosible(muTest);

                var expectedResult6           = new Mu("MIUIUIUIUU", "4", listaVacia);
                var expectedResult7           = new Mu("MIUIUIUUUIU", "4", listaVacia);
                var listaResultadosEsperados6 = new List <Mu>
                {
                    expectedResult6,
                    expectedResult7
                };

                if (resultCase5.Count == listaResultadosEsperados6.Count && resultCase5.Count == 2)
                {
                    Assert.AreEqual(resultCase5[0].Cadena, listaResultadosEsperados6[0].Cadena);
                }
                else
                {
                    Assert.Fail();
                }
                break;
            }
        }