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