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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        //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);
        }