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()); }
public void SeveralVariablesTest5() { MathExpression expr = new MathExpression("x*y+y*z+z*x"); Assert.AreEqual(11, expr.Calculate(1, 2, 3)); }
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; }
public void MinusTest3() { expr = new MathExpression("sin(x)-2"); Assert.AreEqual(-1, expr.Calculate(Math.PI / 2)); }
public void DivisionTest2() { expr = new MathExpression("x/2"); Assert.AreEqual(5, expr.Calculate(10)); }
public void ComplexExpressionTest5() { expr = new MathExpression("x^ 2 + 2.5"); Assert.AreEqual(6.5, expr.Calculate(2)); }
public void ComplexExpressionTest2() { expr = new MathExpression("sin(pi/2)+(x+2)*5"); Assert.AreEqual(21, expr.Calculate(2)); }
public void UnaryMinusTest1() { expr = new MathExpression("-2+3"); Console.WriteLine(expr.ToString()); Assert.AreEqual(1, expr.Calculate()); }
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; }
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(); } }
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; }
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; }
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; }
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; }
public void SimpleTest2() { MathExpression expr = new MathExpression("x"); Assert.AreEqual(2, expr.Calculate(2)); }
public void SimpleTest3() { MathExpression expr = new MathExpression("x"); Assert.AreEqual(0.1, expr.Calculate(0.1)); }
public void MultiplicationTest2() { expr = new MathExpression("x*2"); Assert.AreEqual(6, expr.Calculate(3)); }
public void ComplexExpressionTest1() { expr = new MathExpression("x^2+2*x+1"); Assert.AreEqual(9, expr.Calculate(2)); }
public void PlusTest2() { expr = new MathExpression("x+2"); Assert.AreEqual(5, expr.Calculate(3)); }
public void ComplexExpressionTest3() { expr = new MathExpression("abs(2-4)+tg(pi)"); Assert.AreEqual(2, expr.Calculate()); }
public void SeveralVariablesTest1() { MathExpression expr = new MathExpression("x+y"); Assert.AreEqual(5, expr.Calculate(new Var("x", 2), new Var("y", 3))); }
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); }
public void SeveralVariablesTest2() { MathExpression expr = new MathExpression("1/(x*y)"); Assert.AreEqual(0.1, expr.Calculate(new Var("x", 2), new Var("y", 5))); }
public void MinusTest2() { expr = new MathExpression("x-2"); Assert.AreEqual(1, expr.Calculate(3)); }
public void SeveralVariablesTest3() { MathExpression expr = new MathExpression("x+y"); Assert.AreEqual(5, expr.Calculate(2, 3)); }
public void SeveralVariablesTest4() { MathExpression expr = new MathExpression("1/(x*y)"); Assert.AreEqual(0.1, expr.Calculate(2, 5)); }
public double GetValue(MathExpression function, double x) { return function.Calculate(x); }