Пример #1
0
        public double Count(MethodContext context)
        {
            int n = 6;

            double[] a   = new double[n + 1];
            double[] y   = new double[n];
            double[] z   = new double[n];
            double[] w   = new double[n];
            double   res = 0;

            double[] u = new double[n];
            int      N = 0;

            if (n % 2 == 0)
            {
                N = n / 2;
            }
            else
            {
                N = (n - 1) / 2;
            }

            // calculate coefficients of Legendre polynomial
            for (int i = 0; i <= N; i++)
            {
                a[n - 2 * i] = (Math.Pow(-1, i) * fact(2 * n - 2 * i)) / (Math.Pow(2, n) * fact(i) * fact(n - i) * fact(n - 2 * i));
            }

            // calculate coefficients
            for (int i = 0; i < n; i++)
            {
                double _a = 3.14 * (i + 0.75) / (n + 0.5);
                double _b = 3.14 * (i / n);
                z[i] = Math.Cos(3.14 * (i + 0.75) / (n + 0.5));
                y[i] = z[i];
                w[i] = 2 / ((1 - Math.Pow(z[i], 2)) * (derP_n(a, n, n % 2, z[i]) * derP_n(a, n, n % 2, z[i])));
            }

            // broaden abcisses from [-1,1] to [A,B]
            for (int i = 0; i < n; i++)
            {
                u[i] = ((context.B - context.A) * y[i] / 2) + (context.B + context.A) / 2;
            }

            for (int i = 0; i < n; i++)
            {
                res += w[i] * context.Function.Evaluate(u[i]);
            }

            res *= (context.B - context.A) / 2;

            return(res);
        }
        public double Count(MethodContext context)
        {
            double h = (context.B - context.A) / context.N;

            double toReturn = 0;

            for (int i = 0; i < context.N; ++i)
            {
                double start = context.A + i * h;
                double end   = context.A + (i + 1) * h;

                toReturn += h * context.Function.Evaluate((start + end) / 2);
            }

            return(toReturn);
        }
Пример #3
0
        public double Count(MethodContext context)
        {
            double h = (context.B - context.A) / context.N;

            double toReturn = context.Function.Evaluate(context.A);

            for (int i = 1; i < context.N; ++i)
            {
                toReturn += 2 * context.Function.Evaluate(context.A + i * h);
            }

            toReturn += context.Function.Evaluate(context.B);

            toReturn *= (context.B - context.A) / (2 * context.N);

            return(toReturn);
        }
        public double Count(MethodContext context)
        {
            double M = context.N / 2;
            double h = (context.B - context.A) / (2 * M);

            double res = context.Function.Evaluate(context.A);

            for (int i = 1; i <= M; ++i)
            {
                res += 2 * context.Function.Evaluate(context.A + h * (2 * i - 1));
                res += 4 * context.Function.Evaluate(context.A + h * 2 * i);
            }

            res += context.Function.Evaluate(context.B);

            res *= (context.B - context.A) / (6 * M);

            return(res);
        }