Распараллелить вычисление определителя матрицы N-го порядка методом Гаусса - C#

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

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

Здравствуйте. Реализую нахождение определителя матрицы N-го порядка методом Гаусса. Нужно все дело распараллелить на нескольких потоках. Никто не подскажет, как и что можно параллелить в данной задаче?

Решение задачи: «Распараллелить вычисление определителя матрицы N-го порядка методом Гаусса»

textual
Листинг программы
public class Matrix
{
    public List<MatrixRow> LineList; // Список строк матрицы
    // ... //
}
 
public class MatrixRow
{
    public List<double> CellsList; // Список ячеек строки
    // ... //
}
 
public double DetGauss(Matrix M)
{
    double det = 1; // Хранит определитель, который вернёт функция
    var n = M.LineList.Count; // Размерность матрицы
    const double e = 1E-9; // Погрешность вычислений
 
    for (var i = 0; i < n; i++)
    {
        var k = i;
        for (var j = i + 1; j < n; j++)
            if (Math.Abs(M.LineList[j].CellsList[i]) > Math.Abs(M.LineList[k].CellsList[i]))
                k = j;
 
        if (Math.Abs(M.LineList[k].CellsList[i]) < e)
        {
            det = 0;
            break;
        }
 
        Swap(ref M, i, k);
 
        if (i != k) det *= -1;
        det *= M.LineList[i].CellsList[i];
 
        for (var j = i + 1; j < n; j++)
            M.LineList[i].CellsList[j] /= M.LineList[i].CellsList[i];
 
        for (var j = 0; j < n; j++)
            if ((j != i) && (Math.Abs(M.LineList[j].CellsList[i]) > e))
                for (k = i + 1; k < n; k++)
                    M.LineList[j].CellsList[k] -= M.LineList[i].CellsList[k] * M.LineList[j].CellsList[i];
    }
    return det;
}
// Функция меняет указанные строки указанной матрицы местами
public void Swap(ref Matrix matrix, int row1, int row2)
{
    for (var i = 0; i < matrix.LineList[row1].CellsList.Count; i++)
    {
        var s = matrix.LineList[row1].CellsList[i];
        matrix.LineList[row1].CellsList[i] = matrix.LineList[row2].CellsList[i];
        matrix.LineList[row2].CellsList[i] = s;
    }
}

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


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

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

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