Add lab6
This commit is contained in:
parent
7ae3de0e65
commit
880d359158
27
shadaev_anton_lab_6/README.md
Normal file
27
shadaev_anton_lab_6/README.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Лабораторная работа №6
|
||||||
|
Цель:
|
||||||
|
1. Реализовать нахождение детерминанта квадратной матрицы.
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
Запускаем скрипт `main.py`, вывод будет консольным.
|
||||||
|
|
||||||
|
## Код:
|
||||||
|
![img.png](img.png)
|
||||||
|
|
||||||
|
`determinant_block`: Эта функция принимает квадратный блок матрицы и использует функцию np.linalg.det из библиотеки NumPy для вычисления его детерминанта.
|
||||||
|
|
||||||
|
![img_1.png](img_1.png)
|
||||||
|
|
||||||
|
`determinant_parallel`: Эта функция осуществляет разбиение исходной матрицы на квадратные блоки, а затем применяет библиотеку multiprocessing для параллельного вычисления детерминантов блоков. Путем создания пула процессов, она разделяет матрицу на блоки и передает каждый блок в пул процессов для параллельного вычисления детерминанта. После этого результаты собираются и перемножаются для получения общего детерминанта матрицы.
|
||||||
|
|
||||||
|
![img_2.png](img_2.png)
|
||||||
|
|
||||||
|
В блоке `if __name__ == "__main__":` генерируется случайная матрица указанного размера, после чего функция determinant_parallel вызывается с различным числом процессов (num_processes). Замеряется время выполнения для каждого размера матрицы и каждого количества процессов. Также проводится измерение времени выполнения для последовательного (однопоточного) вычисления детерминанта с использованием функции determinant_block.
|
||||||
|
|
||||||
|
# Работа программы
|
||||||
|
|
||||||
|
Вывод:
|
||||||
|
|
||||||
|
![img.png](screenshots/img.png)
|
||||||
|
|
||||||
|
Из полученных результатов видно, что реализованный алгоритм не проявляет эффективность при использовании различного числа потоков для указанных размеров матрицы. Вероятно, это связано с процессом разбиения квадратной матрицы на более мелкие блоки во время вычислений.
|
BIN
shadaev_anton_lab_6/img.png
Normal file
BIN
shadaev_anton_lab_6/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
BIN
shadaev_anton_lab_6/img_1.png
Normal file
BIN
shadaev_anton_lab_6/img_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
shadaev_anton_lab_6/img_2.png
Normal file
BIN
shadaev_anton_lab_6/img_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 79 KiB |
40
shadaev_anton_lab_6/main.py
Normal file
40
shadaev_anton_lab_6/main.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import numpy as np
|
||||||
|
from multiprocessing import Pool
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def determinant_block(matrix_block):
|
||||||
|
return np.linalg.det(matrix_block)
|
||||||
|
|
||||||
|
|
||||||
|
def determinant_parallel(matrix, num_processes):
|
||||||
|
size = matrix.shape[0]
|
||||||
|
step = size // num_processes
|
||||||
|
|
||||||
|
pool = Pool(processes=num_processes)
|
||||||
|
blocks = []
|
||||||
|
for i in range(0, size, step):
|
||||||
|
blocks.append(matrix[i:i+step, i:i+step])
|
||||||
|
|
||||||
|
dets = pool.map(determinant_block, blocks)
|
||||||
|
return np.product(dets)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sizes = [100, 300, 500]
|
||||||
|
processes = [2, 4, 8]
|
||||||
|
|
||||||
|
for size in sizes:
|
||||||
|
matrix = np.random.rand(size, size)
|
||||||
|
|
||||||
|
for p in processes:
|
||||||
|
start = time.time()
|
||||||
|
det = determinant_parallel(matrix, p)
|
||||||
|
end = time.time()
|
||||||
|
print(f"{size}x{size} матрица с {p} процессами заняла {end - start:.5f} сек")
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
det_seq = determinant_block(matrix)
|
||||||
|
end = time.time()
|
||||||
|
print(f"{size}x{size} умн. последовательно заняло {end - start:.5f} сек")
|
||||||
|
print("=======================================")
|
BIN
shadaev_anton_lab_6/screenshots/img.png
Normal file
BIN
shadaev_anton_lab_6/screenshots/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
Loading…
Reference in New Issue
Block a user