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) }); }
private void GuardarInstancia(Mu mu) { if (mu != null && mu.Cadena.Length <= 30) { _listaDeCadenas.Add(mu); } }
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; } }
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); }
private void EncontrarMu() { if (_listaDeCadenas.Find(mu => mu.EsMu == true) == null) { _mu.EsMu = false; } else { _mu = _listaDeCadenas.Find(mu => mu.EsMu == true); } }
/// <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("Работа с файлом окончена."); } }
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); }
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(); }
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())); } }
/// <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()})";
private Mu CrearCadenaInicial() { Mu muInicial = new Mu("MI", "", new List <string>()); return(muInicial); }
/// <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которые не хотите потерять."); }
public override string ToString() => $"Laplace({Mu.ToStringInvariant()},{Sigma.ToStringInvariant()})";
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; } }