private async void Button_Click(object sender, RoutedEventArgs e) { try { var eq = new Equestion( Convert.ToDouble(alpha.Text), Convert.ToDouble(beta.Text), Convert.ToDouble(gamma.Text), F.Text, Convert.ToDouble(a.Text), Convert.ToDouble(b.Text), Convert.ToDouble(A.Text), Convert.ToDouble(B.Text), Convert.ToInt32(r.Text), Convert.ToInt32(N.Text), Convert.ToDouble(epsilon.Text)); closer.Visibility = Visibility.Visible; var solution = await eq.SolveUnlinearAsyncFake(w => 2 *w *w + 3); closer.Visibility = Visibility.Hidden; var n = Convert.ToInt32(N.Text); var h = (Convert.ToDouble(b.Text) - Convert.ToDouble(a.Text)) / n; ExpressionEvaluator evaluator = new ExpressionEvaluator(); double[] realSol = null; if (!string.IsNullOrEmpty(xReal.Text)) { realSol = Enumerable.Range(0, Convert.ToInt32(N.Text) + 1).Select(w => w * h).Select(w => (double)evaluator.Evaluate(xReal.Text, new { t = w })).ToArray(); } resultView.Items.Clear(); resultView.Items.Add(GenerateItem("t", "Численное решение", "Точное решение", "Норма")); for (int i = 0; i < n + 1; i++) { resultView.Items.Add(GenerateItem((h * i).ToString(), solution[i].ToString(), realSol == null ? "(none)" : realSol[i].ToString(), realSol == null ? "(none)" : (Math.Abs(realSol[i] - solution[i])).ToString())); } } catch (Exception ex) { MessageBox.Show("Проверьте корректность введенных данных\n" + ex.Message); } }
private async void Button_Click(object sender, RoutedEventArgs e) { abortBtn.IsEnabled = true; IsContinueSolving = true; try { sw.Start(); eq = new Equestion( Convert.ToDouble(alpha.Text), Convert.ToDouble(beta.Text), Convert.ToDouble(gamma.Text), F.Text, Convert.ToDouble(a.Text), Convert.ToDouble(b.Text), Convert.ToDouble(A.Text), Convert.ToDouble(B.Text), Convert.ToInt32(r.Text), Convert.ToInt32(N.Text), Convert.ToDouble(epsilon.Text)); closer.Visibility = Visibility.Visible; solution = await eq.SolveUnlinearAsync(); n = Convert.ToInt32(N.Text); h = (Convert.ToDouble(b.Text) - Convert.ToDouble(a.Text)) / n; ExpressionEvaluator evaluator = new ExpressionEvaluator(); realSol = null; if (!string.IsNullOrEmpty(xReal.Text)) { realSol = Enumerable.Range(0, Convert.ToInt32(N.Text) + 1).Select(w => w * h).Select(w => (double)evaluator.Evaluate(xReal.Text, new { t = w })).ToArray(); } // Ищем нужное N if (!string.IsNullOrEmpty(epsilon2.Text)) { currentN.Visibility = Visibility.Visible; var firstInt = eq.N; bool isContinue = true; while (isContinue) { isContinue = false; currentNValue.Text = eq.N.ToString(); var eps2 = Convert.ToDouble(epsilon2.Text); eq.N = eq.N * 2; eq.h = eq.h / 2; var k = eq.N / firstInt; var newSol = (await eq.SolveUnlinearAsync()).Where((w, i) => i % k == 0).ToArray(); if (!IsContinueSolving) { return; } var summ = 0.0; for (int i = 0; i < solution.Length; i++) { summ += Math.Pow(newSol[i] - solution[i], 2.0); } summ = Math.Sqrt(summ); if (summ > eps2) { isContinue = true; } solution = newSol; } eq.N = eq.N / 2; closer.Visibility = Visibility.Hidden; } SomeWork(); } catch (Exception ex) { MessageBox.Show("Проверьте корректность введенных данных\n" + ex.Message); } }