예제 #1
0
        private double CalcIntegralCqf(double start, double end, int parts, TypeOfCqf typeOfCqf)
        {
            var integralValue = 0.0;

            var sizeOfStep = (end - start) / parts;

            for (var i = 0; i < parts; i++)
            {
                double[] nodes;
                switch (typeOfCqf)
                {
                case TypeOfCqf.Iqf:
                    nodes = new double[3];

                    nodes[0] = start + sizeOfStep * i;
                    nodes[1] = start + sizeOfStep * (i + 1.0 / 2);
                    nodes[2] = start + sizeOfStep * (i + 1);

                    integralValue += _iqfHelper.CalcIntegral(nodes[0], nodes[2], nodes);
                    break;

                case TypeOfCqf.Gqf:
                    nodes = new double[2];

                    nodes[0] = start + sizeOfStep * i;
                    nodes[1] = start + sizeOfStep * (i + 1);

                    integralValue += _gqfHelper.CalcIntegral(nodes[0], nodes[1]);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(typeOfCqf), typeOfCqf, null);
                }
            }
            return(integralValue);
        }