public static List <BisectionResultRow> ComputeList(BisectionResultRow InitialRow) { //initiialize BisectionResultRow Row = InitialRow; List <BisectionResultRow> List = new List <BisectionResultRow>(); //loop until exceed epsillon while (!Row.ISAccurateEnough) { List.Add(Row); Row = Row.NextIteration(); } return(List); }
private void Button_EvaluateExpression_Click(object sender, RoutedEventArgs e) { try { Expr expression = Infix.ParseOrThrow(TextBox_ExpressionInput.Text); Symbol symbol = Symbol.NewSymbol(TextBox_InputSymbol.Text); var result = new BisectionResultRow(symbol, expression) { A = Double.Parse(TextBox_InputA.Text), B = Double.Parse(TextBox_InputB.Text), Epsillon = Double.Parse(TextBox_InputEpsilon.Text) }; var results = BisectionResultRow.ComputeList(result); this.ListView_Solution.ItemsSource = results; UIHelper.ResizeListViewColumnsToContent(this.ListView_Solution, null); var lastResult = results.Last(); int decimalPlaces = UIHelper.CountDigitsAfterDecimal(TextBox_InputEpsilon.Text); this.FC_Aproximation.Formula = lastResult.B.ToString(); this.FC_AproximationRounded.Formula = Math.Round(lastResult.B, decimalPlaces).ToString(); this.FC_AproximationChopped.Formula = UIHelper.TruncateDecimal((decimal)lastResult.B, decimalPlaces).ToString(); SnackBarNotif.MessageQueue.Enqueue( UIHelper.NewSnackbarMessage( PackIconKind.KeyboardVariant, "Success! Check solution and results!", Colors.DarkGreen, 0.5 ) ); } catch { //show error message SnackBarNotif.MessageQueue.Enqueue( UIHelper.NewSnackbarMessage( PackIconKind.KeyboardVariant, "Invalid Input! Function Input (Value to Aprox.) syntax is invalid!", Colors.HotPink, 0.5 ) ); } }
public BisectionResultRow NextIteration() { BisectionResultRow Next = new BisectionResultRow(this.Symbol, this.FunctionExpression) { Iteration = this.Iteration + 1, Epsillon = this.Epsillon }; if (IsCPositive) { switch (GetPositiveSymbol()) { case FormulaSymbols.A: Next.A = this.C; Next.B = this.B; break; case FormulaSymbols.B: Next.A = this.A; Next.B = this.C; break; } } else { switch (GetNegativeSymbol()) { case FormulaSymbols.A: Next.A = this.C; Next.B = this.B; break; case FormulaSymbols.B: Next.A = this.A; Next.B = this.C; break; } } return(Next); }