Ускорить работу вложенного цикла for() C#
Формулировка задачи:
Добрый день.
Имеется цикл в котором подбираются коэффициенты к массивам таким образом, чтобы коэф регрессии стремился к нулю
Можно ли каким-то образом оптимизировать код, чтобы ускорить расчет?
При конструкции с одним циклом, когда имеется только a1[] и a2[] расчет занимает 10 сек, с двумя - несколько минут, с тремя минут 15.
Ну а если n увеличить до 2000, чтобы повысить качество расчета, то вообще не дожидался, вырубал.
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 } } }
Решение задачи: «Ускорить работу вложенного цикла 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д