From c4a260ebda20c6a79e5884ca7c3002f81be33ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D1=8C=D1=84=D0=B8=D1=8F=20=D0=A2=D1=83=D0=BA?= =?UTF-8?q?=D0=B0=D0=B5=D0=B2=D0=B0?= Date: Sat, 26 Oct 2024 22:26:14 +0400 Subject: [PATCH] tukaeva_alfiya_lab_6 is ready --- tukaeva_alfiya_lab_6/README.md | 29 +++++++ tukaeva_alfiya_lab_6/project/main.py | 117 +++++++++++++++++++++++++++ tukaeva_alfiya_lab_6/result.png | Bin 0 -> 48113 bytes 3 files changed, 146 insertions(+) create mode 100644 tukaeva_alfiya_lab_6/README.md create mode 100644 tukaeva_alfiya_lab_6/project/main.py create mode 100644 tukaeva_alfiya_lab_6/result.png diff --git a/tukaeva_alfiya_lab_6/README.md b/tukaeva_alfiya_lab_6/README.md new file mode 100644 index 0000000..4e3d5a5 --- /dev/null +++ b/tukaeva_alfiya_lab_6/README.md @@ -0,0 +1,29 @@ +# Лабораторная работа №6 - Определение детерминанта матрицы с помощью параллельных вычислений + +## Задание + +* Кратко: реализовать нахождение детерминанта квадратной матрицы. Что такое детерминант матрицы (или определитель) можно посмотреть по ссылке. + +* Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять нахождение отдельной группы множителей. + + +## Работа программы: + + 1. Инициализирует три матрицы размером 100x100, 300x300 и 500x500 со случайными значениями. + + 2. det(matrix) реализует алгоритм Гаусса для нахождения детерминанта квадратной матрицы. + + 3. parallel_det(matrix, num_threads=1) использует пул потоков для ускорения вычислений. Для каждой строки матрицы создается поток, который обрабатывает все строки под ней, применяя необходимые преобразования. + + +### Результат: + +![](result.png "") + +### Вывод: + +Параллельные вычисления могут значительно ускорить процесс нахождения детерминанта, особенно когда речь идет о больших матрицах. Тем не менее, иногда результаты вычисленного детерминанта могут различаться между последовательным и параллельным подходами. + + +# Видео +https://vk.com/video230744264_456239110?list=ln-LZEUeze0D4JCSQZ4LK diff --git a/tukaeva_alfiya_lab_6/project/main.py b/tukaeva_alfiya_lab_6/project/main.py new file mode 100644 index 0000000..adacac0 --- /dev/null +++ b/tukaeva_alfiya_lab_6/project/main.py @@ -0,0 +1,117 @@ +import random +import time +import copy +from multiprocessing import Pool +import concurrent.futures +from copy import deepcopy + + +class Matrix: + def __init__(self) -> None: + self.matrix_100 = [[0] * 100 for _ in range(100)] + self.matrix_300 = [[0] * 300 for _ in range(300)] + self.matrix_500 = [[0] * 500 for _ in range(500)] + + def str_matrix(self, type_list: str): + _str = "" + + current_matrix = getattr(self, type_list) + + for i in range(len(current_matrix)): + _str += "[ " + + for j in range(len(current_matrix[0])): + _str += str(current_matrix[i][j]) + " " + + _str += " ]\n" + + return _str + + +def init_matrix(matrix: Matrix, size: int): + for i in range(size): + for j in range(size): + matrix.__dict__[f"matrix_{size}"][i][j] = random.randint(0, 5) + + +def parallel_det(matrix, num_threads=1): + n = len(matrix) + m = deepcopy(matrix) + det_value = 1 + + for i in range(n): + if m[i][i] == 0: + for j in range(i + 1, n): + if m[j][i] != 0: + m[i], m[j] = m[j], m[i] + det_value *= -1 + break + else: + return 0 + + with concurrent.futures.ThreadPoolExecutor(max_workers=num_threads) as executor: + futures = [executor.submit(process_row, i, j, m, n) for j in range(i + 1, n)] + concurrent.futures.wait(futures) + + det_value *= m[i][i] + m = [list(row) for row in m] # Обновляем строки матрицы + + return det_value + + +def process_row(i, j, m, n): + factor = m[j][i] / m[i][i] + for k in range(i, n): + m[j][k] -= factor * m[i][k] + return m[j] + + +def det(matrix): + n = len(matrix) + m = [row[:] for row in matrix] + det_value = 1 + + for i in range(n): + if m[i][i] == 0: + for j in range(i + 1, n): + if m[j][i] != 0: + m[i], m[j] = m[j], m[i] + det_value *= -1 + break + else: + return 0 + + for j in range(i + 1, n): + factor = m[j][i] / m[i][i] + for k in range(i, n): + m[j][k] -= factor * m[i][k] + + det_value *= m[i][i] + + return det_value + + +def benchmark(): + matrix = Matrix() + init_matrix(matrix, 100) + init_matrix(matrix, 300) + init_matrix(matrix, 500) + + sizes = [100, 300, 500] + for size in sizes: + current_matrix = getattr(matrix, f'matrix_{size}') + + start_time = time.time() + seq_result = det(current_matrix) + seq_time = time.time() - start_time + print(f"Последовательный детерминант {size}x{size}: {seq_result}, Время: {seq_time:.6f}с") + + + start_time = time.time() + par_result = parallel_det(current_matrix, num_threads=4) # Измените число потоков по необходимости + par_time = time.time() - start_time + print(f"Параллельный детерминант {size}x{size}: {par_result}, Время: {par_time:.6f}с") + + +if __name__ == "__main__": + benchmark() diff --git a/tukaeva_alfiya_lab_6/result.png b/tukaeva_alfiya_lab_6/result.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c61fcdb47e7ba1a773e27710ccc5d69d5ed768 GIT binary patch literal 48113 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