Добрый день, требуется написать послед. и параллельные версии программы которая решает слау методом квадратных корней.
Написал послед. и уже долго сижу думаю, как ее распараллелить. Ведь, чтобы перейти к след шагу решения нужно дождаться результатов предыдущего шага.
фрагмент кода, где идет вычисление решения.
// A = U(t)*U, далее находим U and U(t)
double temp;
double[,] U = new double[n, n];
for(int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
U[i, j] = 0;
}
for (int i = 0; i < n; i++)
{
temp = 0;
for (int k=0;k<i;k++)
temp = temp + Math.Pow(U[k, i], 2);
U[i, i] =Math.Sqrt(A[i, i] - temp);
for (int j = i; j < n; j++)
{
temp = 0;
for (int k = 0; k < i; k++)
temp = temp + U[k, i] * U[k, j];
U[i, j] = (A[i, j] - temp) / U[i, i];
}
}
for (int i = 0; i<n;i++)
{
for (int j=0; j < n; j++)
{
Console.Write("{0} ", U[i, j]);
}
Console.WriteLine();
}
double[] x = new double[n];
double[] y = new double[n];
for (int i=0;i<n;i++)
{
temp = 0;
for(int k=0;k<i;k++)
temp = temp + U[k, i] * y[k];
y[i] = (b[i] - temp) / U[i, i];
}
for(int i=n-1;i>=0;i--)
{
temp = 0;
for (int k = i + 1; k < n; k++)
temp = temp + U[i, k] * x[k];
x[i] = (y[i] - temp) / U[i, i];
}
for (int i = 0; i < n; i++)
Console.Write("{0} ", x[i]);
Console.WriteLine();