DAS_2024_1/bazunov_andrew_lab_6/README.md
2024-12-20 01:00:01 +04:00

57 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Распределенные вычисления и приложения Л6
## _Автор Базунов Андрей Игревич ПИбд-42_
---
> ### Задание
> - Кратко: реализовать нахождение детерминанта квадратной матрицы. Что такое детерминант матрицы (или определитель)
> - Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять нахождение отдельной группы множителей.
---
## Алгоритм:
### Функция вычисления определителя матрицы
<details>
<summary>Код</summary>
```python
def minor(matrix, i, j):
return [row[:j] + row[j + 1:] for row in (matrix[:i] + matrix[i + 1:])]
def determinant(matrix: list, threads=1) -> float:
if len(matrix) == 1:
return matrix[0][0]
elif len(matrix) == 2:
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
det = 0
futures = []
with ThreadPoolExecutor(max_workers=threads) as executor:
for col in range(len(matrix)):
cofactor = (-1) ** col * matrix[0][col]
futures.append(executor.submit(lambda m, cof: cof * determinant(m), minor(matrix, 0, col), cofactor))
for future in futures:
det += future.result()
return det
```
</details>
| Размер матрицы | 1 Поток (сек) | 5 Потоков (сек) | 20 Потоков (сек) |
|----------------|---------------|-----------------|------------------|
| 1x1 | 0.0 | 0.0 | 0.0 |
| 2x2 | 0.0 | 0.0 | 0.0 |
| 3x3 | 0.00018 | 0.00019 | 0.00017 |
| 4x4 | 0.00061 | 0.00072 | 0.0007 |
| 5x5 | 0.00247 | 0.00359 | 0.00336 |
| 6x6 | 0.01306 | 0.01931 | 0.02129 |
| 7x7 | 0.08692 | 0.14062 | 0.15682 |
| 8x8 | 0.59383 | 1.03971 | 1.27658 |
| 9x9 | 5.23021 | 9.72031 | 11.71564 |
Видео отчет: https://vkvideo.ru/video236673313_456239579