From e83e9844f72c0115833330b8628229d952c91fcf Mon Sep 17 00:00:00 2001 From: Kseniy <––ƒ––iputilin201@gmail.com> Date: Mon, 9 Dec 2024 20:01:43 +0400 Subject: [PATCH] kurushina_ksenia_lab_6 --- kurushina_ksenia_lab_6/README.md | 53 +++++++++++++++++++++++++ kurushina_ksenia_lab_6/img.png | Bin 0 -> 35270 bytes kurushina_ksenia_lab_6/main.py | 65 +++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 kurushina_ksenia_lab_6/README.md create mode 100644 kurushina_ksenia_lab_6/img.png create mode 100644 kurushina_ksenia_lab_6/main.py diff --git a/kurushina_ksenia_lab_6/README.md b/kurushina_ksenia_lab_6/README.md new file mode 100644 index 0000000..462b3c9 --- /dev/null +++ b/kurushina_ksenia_lab_6/README.md @@ -0,0 +1,53 @@ +# Лабораторная работа №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 \ No newline at end of file diff --git a/kurushina_ksenia_lab_6/img.png b/kurushina_ksenia_lab_6/img.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8a840370ac5462a40de2adedf3cf918e39b53a GIT binary patch literal 35270 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