Ускорить работу вложенного цикла for() C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Имеется цикл в котором подбираются коэффициенты к массивам таким образом, чтобы коэф регрессии стремился к нулю
for (int i2=5; i2<=5; i2=i2+0.01){
for (int i3=5; i3<=5; i3=i3+0.01){
for (int i4=5; i4<=5; i4=i4+0.01){
for (int n=0; n<=150; n++){
rez[n] = a1[n] + a2[n]*i2 + a3[n]*i3 + a4[n]*i4;}
koef = KoefLinearRegression(rez);
if (koef<koef_min)
{
i2_min=i2; i3_min=3; i4_min=i4
}
}
}
Можно ли каким-то образом оптимизировать код, чтобы ускорить расчет? При конструкции с одним циклом, когда имеется только a1[] и a2[] расчет занимает 10 сек, с двумя - несколько минут, с тремя минут 15. Ну а если n увеличить до 2000, чтобы повысить качество расчета, то вообще не дожидался, вырубал.

Решение задачи: «Ускорить работу вложенного цикла for() C#»

textual
Листинг программы
double[] a = new double[11];
            double[] b = new double[11];
            var count = Environment.TickCount;
                    for (double s2 = 0; s2 <= 3; s2++)
                    {
                        for (double s3 = 0; s3 <= 5000; s3++)
                        {
                            for (double s4 = 0; s4 <= 5000; s4++)
                            {
                                 for (int i = 0; i <= 10; i++)
                                 {
                                     a[i] = i*i;
                                 }
                            }
                        }
                    }
            Console.WriteLine("a[0] = " + a[0]);
            Console.WriteLine("a[10] = " + a[10]);
            Console.WriteLine("Однопоточный: " + (Environment.TickCount - count));
            count = Environment.TickCount;
            Parallel.For(0,4, s2 =>
            {
                for (double s3 = 0; s3 <= 5000; s3++)
                {
                    for (double s4 = 0; s4 <= 5000; s4++)
                    {
                        for (int i = 0; i <= 10; i++)
                        {
                            b[i] = i*i;
                        }
                    }
                }
            });
            Console.WriteLine("b[0] = " + b[0]);
            Console.WriteLine("b[10] = " + b[10]);
            Console.WriteLine("Многопоточный: " + (Environment.TickCount - count));
            Console.ReadKey();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы