Ejemplo n.º 1
0
        /**************************************************************************/
        public Tuple<double, int> methodCombined(MathExpression function, MathExpression derivative, MathExpression secondDerivative, double epsilon, double left, double right)
        {
            int counter = 0;
            double x0;
            if (GetValue(function, left) * GetValue(secondDerivative, left) > 0)
            {
                x0 = left;
            }
            else
            {
                x0 = right;
            }
            if (GetValue(derivative, x0) * GetValue(secondDerivative, x0) > 0)
            {
                while (!(Math.Abs(left - right) < epsilon))
                {
                    left = left - (GetValue(function, left) * (right - left)) / (GetValue(function, right) - GetValue(function, left));
                    right = right - GetValue(function, right) / GetValue(derivative, right);
                    counter++;
                }
            }
            else
            {
                while (!(Math.Abs(left - right) < epsilon))
                {
                    left = left - GetValue(function, left) / GetValue(derivative, left);
                    right = right - (GetValue(function, right) * (right - left)) / (GetValue(function, right) - GetValue(function, left));
                    counter++;
                }
            }

            return new Tuple<double, int>((left + right) / 2, counter);
        }
Ejemplo n.º 2
0
        private void buttonCalculateExpr_Click(object sender, RoutedEventArgs e)
        {
            listBoxTokens.Items.Clear();
            textBoxReversePolishNotation.Clear();
            textBoxResult.Clear();

            string input = textBoxInput.Text;
            MathExpression expr = new MathExpression(input);

            foreach (Token t in expr.Tokens)
            {
                listBoxTokens.Items.Add(t);
            }

            foreach (Token t in expr.ReversePolishNotation)
            {
                textBoxReversePolishNotation.Text += t.Lexeme;
            }

            double result = 0;
            if (textBoxVar.Text != "")
            {
                double var = double.Parse(textBoxVar.Text);
                result = expr.Calculate(var);
            }
            else
            {
                result = expr.Calculate();
            }
            textBoxResult.Text = result.ToString();

            MathExpression expr2 = new MathExpression("1/(x*y)");
            MessageBox.Show(expr2.Calculate(new Var("x", 2), new Var("y", 5)).ToString());
        }
Ejemplo n.º 3
0
        /***************************************************************/
        public Tuple<double, int> methodChords(MathExpression function, MathExpression secondDerivative, double epsilon, double left, double right)
        {
            int counter = 0;
            double x0, result, c;

            if (GetValue(function, left) * GetValue(secondDerivative, left) > 0)
            {
                c = left;
                result = right;
            }
            else
            {
                c = right;
                result = left;
            }

            do
            {
                x0 = result;
                result = x0 - ((x0 - c) * GetValue(function, x0)) / (GetValue(function, x0) - GetValue(function, c));
                counter++;
            } while (Math.Abs(result - x0) > epsilon);
            return new Tuple<double, int>(result, counter);
        }
Ejemplo n.º 4
0
 public void MinusTest3()
 {
     expr = new MathExpression("sin(x)-2");
     Assert.AreEqual(-1, expr.Calculate(Math.PI / 2));
 }
Ejemplo n.º 5
0
 public void DivisionTest2()
 {
     expr = new MathExpression("x/2");
     Assert.AreEqual(5, expr.Calculate(10));
 }
Ejemplo n.º 6
0
 public void ComplexExpressionTest6()
 {
     expr = new MathExpression("sin(pi/3.8)*ln(100500)+arctg(2)");
     Console.WriteLine(expr.Calculate().ToString());
     Assert.AreEqual(9.58115, expr.Calculate(), 0.00001);
 }
Ejemplo n.º 7
0
 public void ComplexExpressionTest3()
 {
     expr = new MathExpression("abs(2-4)+tg(pi)");
     Assert.AreEqual(2, expr.Calculate());
 }
Ejemplo n.º 8
0
 public void ComplexExpressionTest1()
 {
     expr = new MathExpression("x^2+2*x+1");
     Assert.AreEqual(9, expr.Calculate(2));
 }
Ejemplo n.º 9
0
 public void SimpleTest3()
 {
     MathExpression expr = new MathExpression("x");
     Assert.AreEqual(0.1, expr.Calculate(0.1));
 }
Ejemplo n.º 10
0
        private void buttonCalculate_Click(object sender, EventArgs e)
        {
            MathExpression expr = new MathExpression(textBoxInitialFunction.Text.ToString());
            double a = Convert.ToDouble(textBoxA.Text.ToString());
            double b = Convert.ToDouble(textBoxB.Text.ToString());
            string inital = (expr.Calculate(b) - expr.Calculate(a)).ToString();

            if (radioButtonLeftRectangle.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcLeftRectangle();
                N *= 2;
                double I2 = funcLeftRectangle();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcLeftRectangle();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonRightRectangle.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcRightRectangle();
                N *= 2;
                double I2 = funcRightRectangle();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcRightRectangle();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonMidleRectangle.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcMidleRectangle();
                N *= 2;
                double I2 = funcMidleRectangle();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcMidleRectangle();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonTrapeze.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcTrapeze();
                N *= 2;
                double I2 = funcTrapeze();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcTrapeze();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonSimpson.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcSimpson();
                N *= 2;
                double I2 = funcSimpson();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcSimpson();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonThreeEighths.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcThreeEighths();
                N *= 2;
                double I2 = funcThreeEighths();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcThreeEighths();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonGaus.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcGaus();
                N *= 2;
                double I2 = funcGaus();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcGaus();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }

            /***********************************************************************************/

            if (radioButtonChebyshev.Checked)
            {
                int iteration = 1;
                N = 4;
                double I1 = funcChebyshev();
                N *= 2;
                double I2 = funcChebyshev();
                double EPS = Convert.ToDouble(textBoxE.Text.ToString());
                while (Math.Abs(I1 - I2) > EPS)
                {
                    iteration++;
                    I1 = I2;
                    N *= 2;
                    I2 = funcChebyshev();
                }
                textBoxIntegral.Text = I1.ToString();
                textBoxInitial.Text = inital;
                textBoxIterations.Text = iteration.ToString();
            }
        }
Ejemplo n.º 11
0
 private double funcThreeEighths()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / (3 * N);
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = expr.Calculate(a) + expr.Calculate(b);
     for (int i = 1; i < 3 * N; i++)
     {
         a += h;
         if (i % 3 == 0)
         {
             resault += 2 * expr.Calculate(a);
         }
         else
         {
             resault += 3 * expr.Calculate(a);
         }
     }
     return resault * h * 3.0 / 8.0;
 }
Ejemplo n.º 12
0
 private double funcSimpson()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / N;
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = expr.Calculate(a) + expr.Calculate(b);
     for (int i = 0; i < N - 1; i++)
     {
         a += h;
         if (i % 2 == 0)
         {
             resault += 4 * expr.Calculate(a);
         }
         else
         {
             resault += 2 * expr.Calculate(a);
         }
     }
     return resault * h / 3.0;
 }
Ejemplo n.º 13
0
 private double funcRightRectangle()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / N;
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = expr.Calculate(b);
     for (int i = 0; i < N - 1; i++)
     {
         b -= h;
         resault += expr.Calculate(b);
     }
     return resault * h;
 }
Ejemplo n.º 14
0
 private double funcGaus()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / N;
     double[] coefs = new double[] { 0.478629, 0.236927, 0.568889, 0.236927, 0.478629 };
     double[] points = new double[] { -0.9061800, -0.538469, 0, 0.538469, 0.9061800 };
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = 0.0;
     double left = a;
     double right = a + h;
     for (int i = 0; i < N; i++)
     {
         for(int j = 0; j < points.Length; j++)
         {
             resault += coefs[j] * expr.Calculate((left + right) / 2.0 + (right - left) / 2.0 * points[j]);
         }
         left = right;
         right += h;
     }
     return resault * h / 2.0;
 }
Ejemplo n.º 15
0
 private double funcChebyshev()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / N;
     double[] points = new double[] { 0.832498, 0.374541, 0, -0.374541, -0.832498 };
     double coef = 2.0 / points.Length;
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = 0.0;
     double left = a;
     double right = a + h;
     for (int i = 0; i < N; i++)
     {
         for (int j = 0; j < points.Length; j++)
         {
             resault += (right - left) / points.Length * expr.Calculate((left + right) / 2.0 + (right - left) / 2.0 * points[j]);
         }
         left = right;
         right += h;
     }
     return resault;
 }
Ejemplo n.º 16
0
 public void SeveralVariablesTest5()
 {
     MathExpression expr = new MathExpression("x*y+y*z+z*x");
     Assert.AreEqual(11, expr.Calculate(1, 2, 3));
 }
Ejemplo n.º 17
0
 public void SimpleTest2()
 {
     MathExpression expr = new MathExpression("x");
     Assert.AreEqual(2, expr.Calculate(2));
 }
Ejemplo n.º 18
0
 private double funcTrapeze()
 {
     double a = Convert.ToDouble(textBoxA.Text.ToString());
     double b = Convert.ToDouble(textBoxB.Text.ToString());
     double h = (b - a) / N;
     MathExpression expr = new MathExpression(textBoxFunction.Text.ToString());
     double resault = expr.Calculate(a) + expr.Calculate(b);
     for (int i = 0; i < N - 1; i++ )
     {
         a += h;
         resault += 2 * expr.Calculate(a);
     }
     return resault * h / 2.0;
 }
Ejemplo n.º 19
0
 public void UnaryMinusTest1()
 {
     expr = new MathExpression("-2+3");
     Console.WriteLine(expr.ToString());
     Assert.AreEqual(1, expr.Calculate());
 }
Ejemplo n.º 20
0
 public void MultiplicationTest2()
 {
     expr = new MathExpression("x*2");
     Assert.AreEqual(6, expr.Calculate(3));
 }
Ejemplo n.º 21
0
 public void ComplexExpressionTest2()
 {
     expr = new MathExpression("sin(pi/2)+(x+2)*5");
     Assert.AreEqual(21, expr.Calculate(2));
 }
Ejemplo n.º 22
0
 public void PlusTest2()
 {
     expr = new MathExpression("x+2");
     Assert.AreEqual(5, expr.Calculate(3));
 }
Ejemplo n.º 23
0
 public void ComplexExpressionTest5()
 {
     expr = new MathExpression("x^ 2 + 2.5");
     Assert.AreEqual(6.5, expr.Calculate(2));
 }
Ejemplo n.º 24
0
 public void SeveralVariablesTest1()
 {
     MathExpression expr = new MathExpression("x+y");
     Assert.AreEqual(5, expr.Calculate(new Var("x", 2), new Var("y", 3)));
 }
Ejemplo n.º 25
0
 public void DerivativeTest()
 {
     MathExpression expr = new MathExpression("e^x+sin(x)");
     Assert.AreEqual(2, expr.Derivative(0), 0.000001);
 }
Ejemplo n.º 26
0
 public void SeveralVariablesTest2()
 {
     MathExpression expr = new MathExpression("1/(x*y)");
     Assert.AreEqual(0.1, expr.Calculate(new Var("x", 2), new Var("y", 5)));
 }
Ejemplo n.º 27
0
 public void MinusTest2()
 {
     expr = new MathExpression("x-2");
     Assert.AreEqual(1, expr.Calculate(3));
 }
Ejemplo n.º 28
0
 public void SeveralVariablesTest3()
 {
     MathExpression expr = new MathExpression("x+y");
     Assert.AreEqual(5, expr.Calculate(2, 3));
 }
Ejemplo n.º 29
0
 public void SeveralVariablesTest4()
 {
     MathExpression expr = new MathExpression("1/(x*y)");
     Assert.AreEqual(0.1, expr.Calculate(2, 5));
 }
Ejemplo n.º 30
0
 public double GetValue(MathExpression function, double x)
 {
     return function.Calculate(x);
 }