Ускорить работу вложенного цикла 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();