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);
        }
Example #2
0
        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);
        }