예제 #1
0
        private void _Integrate(int part)
        {
            Result = (-func(a) + func(b)) / 2;

            int    partsSize = (int)quantity / parts;
            int    ost       = quantity - partsSize * parts;
            int    st        = part * partsSize + ((part < ost) ? part : ost);
            int    fn        = (part + 1) * partsSize + ((part + 1 < ost) ? part : (ost - 1));
            double s         = 0;

            for (int i = st; i <= fn; i++)
            {
                var f = func(a + h * (i + (1 / (double)2)));
                s           += f;
                donePercent += 1;
                EventProgress?.Invoke(donePercent);
                EventColumn?.Invoke((a + h * (i + (1 / (double)2))), f);
            }
            Monitor.Enter(res);
            try
            {
                Result += s;
            }
            finally
            {
                Monitor.Exit(res);
            }
        }
예제 #2
0
        private void _Integrate(int part)
        {
            Result = (-func(a) + func(b)) / 2;
            int partsSize = (int)q / parts;
            int ost       = q - partsSize * parts;
            int st        = part * partsSize;

            if (part < ost)
            {
                st += part;
            }
            else
            {
                st += ost;
            }
            int fn = (part + 1) * partsSize;

            if (part + 1 < ost)
            {
                fn += part;
            }
            else
            {
                fn += ost - 1;
            }
            double s = 0;

            for (int i = st; i <= fn; i++)
            {
                var f = func(a + h * (i + (1 / (double)2)));
                s  += f;
                dP += 1;
                EventProgress?.Invoke(dP);
                EventColumn?.Invoke((a + h * (i + (1 / (double)2))), f);
            }
            Monitor.Enter(res);
            try
            {
                Result += s;
            }
            finally
            {
                Monitor.Exit(res);
            }
        }