Распараллелить вычисление определителя матрицы 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д