57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
# Распределенные вычисления и приложения Л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 |