protected override double Calculate(double a, double b, int n, string integral) { double res = 0; double h = (b - a) / n; for (int i = 1; i <= n; ++i) { res += MyParser.calculate(integral, (a + i * h)); } res *= h; return(res); }
protected override double Calculate(double a, double b, int n, string integral) { double res = 0; double h = (b - a) / n; bool even = false; for (int i = 1; i < n; ++i) { res += (even ? 2 : 4) * MyParser.calculate(integral, (a + i * h)); even = !even; } res += MyParser.calculate(integral, a) + MyParser.calculate(integral, b); res *= h / 3; return(res); }
//public override KeyValuePair<double, int> CalculateIntegral(double a, double b, double eps, string integral) //{ // int n = 3; // double i1 = Calculate(a, b, n, integral); // double i2 = 0; // int k = 2; // do // { // i2 = 0; // for (int i = 0; i < k; i++) // { // i2 += Calculate(a + i * (b - a) / k, a + (i + 1) * (b - a) / k, n, integral); // } // double tmp = i2; // i2 = i1; // i1 = tmp; // k++; // } while (Math.Abs(i1 - i2) >= eps); // return new KeyValuePair<double, int>(i1, k); //} protected override double Calculate(double a, double b, int n, string integral) { if (n == 8 || n > 9) { n = 9; } double res = 0; double A = (b - a) / 2; double B = (b + a) / 2; double[] x = ChebyshevCoefs.arr[7].x; for (int i = 0; i < ChebyshevCoefs.arr.Length; i++) { if (ChebyshevCoefs.arr[i].n == n) { x = ChebyshevCoefs.arr[i].x; } } for (int i = 0; i < x.Length; i++) { res += MyParser.calculate(integral, A * x[i] + B); } return(2 * res * A / n); }