2024-01-19 11:42:30 +04:00

80 lines
2.9 KiB
Python

import time
import numpy as np
from multiprocessing import Pool
def calculate_determinant(args):
matrix, i = args
multiplier = matrix[0][i]
if i % 2 != 0:
multiplier *= -1
matrix = np.delete(matrix, 0, axis=0)
submatrix = np.delete(matrix, i, axis=1)
return np.linalg.det(submatrix) * multiplier
def parallel_determinant(matrix, parallel):
n = matrix.shape[0]
if parallel:
pool = Pool(processes=n)
results = []
start_time = time.time()
for i in range(n):
results.append(pool.apply_async(calculate_determinant, args=((matrix, i),)))
pool.close()
pool.join()
result = np.sum([res.get() for res in results])
end_time = time.time()
else:
start_time = time.time()
result = np.linalg.det(matrix)
end_time = time.time()
execution_time = end_time - start_time
return result, execution_time
def test(parallel):
mx = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
result = parallel_determinant(mx, parallel)
print(f"Определитель матрицы: {result[0]}")
print(f"Время выполнения: {result[1]} сек.")
def matrix10x10(parallel):
mx = np.random.randint(0, 100, size=(10, 10))
result = parallel_determinant(mx, parallel)
print(f"Определитель матрицы: {result[0]}")
print(f"Время выполнения: {result[1]} сек.")
def matrix25x25(parallel):
mx = np.random.randint(0, 100, size=(25, 25))
result = parallel_determinant(mx, parallel)
print(f"Определитель матрицы: {result[0]}")
print(f"Время выполнения: {result[1]} сек.")
def matrix50x50(parallel):
mx = np.random.randint(0, 100, size=(50, 50))
result = parallel_determinant(mx, parallel)
print(f"Определитель матрицы: {result[0]}")
print(f"Время выполнения: {result[1]} сек.")
if __name__ == '__main__':
# print("Матрица 10x10:")
# print("Результат нахождения детерминанта параллельно:")
# matrix10x10(parallel=True)
# print("Результат нахождения детерминанта обычным способом:")
# matrix10x10(parallel=False)
# print("Матрица 25x25:")
# print("Результат нахождения детерминанта параллельно:")
# matrix25x25(parallel=True)
# print("Результат нахождения детерминанта обычным способом:")
# matrix25x25(parallel=False)
print("Матрица 50x50:")
print("Результат нахождения детерминанта параллельно:")
matrix50x50(parallel=True)
print("Результат нахождения детерминанта обычным способом:")
matrix50x50(parallel=False)