defcalculate_det_1(det): # 行列式为0时直接返回0 if det == 0: return0 # 行列式为一阶时直接返回结果 iflen(det) == 1: return det[0]
n = len(det) p = get_permutations(range(1, n + 1)) result = 0 # 遍历全排列 for r in p: t = get_t(r) i = 0 part = (-1) ** t # 遍历排列中元素并计算结果 for c in r: part *= det[i][c - 1] i += 1 result += part return result
defcalculate_det_2(det): n = len(det) result = 1 # 遍历列 for col inrange(n): row = col result *= det[row][col] # 寻找不是0的行 while det[row][col] == 0and row < n - 1: row += 1 # 化简行列式 for i inrange(row + 1, n): if det[i][col] == 0: pass else: k = - det[i][col] / det[row][col] for j inrange(col, n): det[i][j] += det[row][j] * k return result
defcalculate_det_3(det): n = len(det) # 处理基础情况 if n == 1: return det[0][0] if n == 2: return det[0][0]*det[1][1] - det[0][1]*det[1][0] # 求代数余子式并计算结果 result = 0 for i inrange(n): C = [] for j inrange(n): C.append(det[j][1:]) C.remove(C[i]) if i % 2 == 1: result -= calculate_det_3(C) * det[i][0] else: result += calculate_det_3(C) * det[i][0] return result