3.6 KiB
3.6 KiB
Лабораторная работа №6: Определение детерминанта матрицы с использованием параллельных вычислений
Задание
Необходимо разработать два алгоритма для вычисления детерминанта квадратной матрицы:
- Обычный алгоритм — выполняется последовательно.
- Параллельный алгоритм — с возможностью ручного задания количества потоков. Каждый поток отвечает за вычисление определённой группы множителей.
Описание работы программы
Программа предназначена для вычисления детерминанта квадратной матрицы двумя способами:
- Обычным (последовательным) методом.
- Параллельным, который ускоряет выполнение за счёт многопоточности.
Обычный алгоритм
-
minor(matrix, row, col)
- Вспомогательная функция для формирования минора матрицы. Удаляет указанную строку и столбец, подготавливая данные для рекурсивного вычисления.
-
determinant(matrix)
- Основная функция для вычисления детерминанта. Использует метод разложения Лапласа.
- Для матриц 2x2 результат вычисляется напрямую.
- Для матриц большего размера рекурсивно вызывает себя для вычисления детерминантов подматриц.
Параллельный алгоритм
-
parallel_determinant(matrix, num_threads=4)
- Основная функция, распределяющая вычисления детерминанта между потоками.
- Количество потоков задаётся вручную.
-
worker(start_row, end_row)
- Вспомогательная функция, используемая потоками. Выполняет вычисления на заданном диапазоне строк.
- Результаты отдельных потоков объединяются для получения итогового детерминанта.
Особенности реализации
- Вычисления для небольших матриц выполняются быстрее обычным алгоритмом.
- Параллельный подход показывает значительное ускорение при обработке больших матриц (при оптимальной настройке количества потоков).
Результаты работы
Для каждой матрицы программа выводит:
- Значение детерминанта, рассчитанное обоими алгоритмами.
- Время выполнения для каждого из методов.
Результаты тестирования представлены в виде графиков и таблиц, сохранённых в PNG-файлах проекта.