没什么说的,这是之前写着玩儿的函数,可以参考着耍耍
from copy import deepcopy
def pretty(matrix):
# 优化输出
if isinstance(matrix,str):
return '矩阵输出失败!'
row = len(matrix)
col = len(matrix[0])
for i in range(row):
print('|', end=' ')
for j in range(col):
print("{:6.3f}".format(matrix[i][j]),end=' ')
print(' |', end='\n')
return '计算成功'
def det(matrix):
# 求行列式的值
n = len(matrix)
if n == 2:
return (matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0])
if n == 1:
return matrix[0][0]
else:
algebraic_cofactor_list = [] # 储存第一行每个元素的余子式
for i in range(n):
cofactor_matrix = []
for j in range(n - 1):
cofactor_matrix.append([])
for k in range(n):
if k != i:
cofactor_matrix[j].append(matrix[j + 1][k])
algebraic_cofactor_list.append(det(cofactor_matrix))
max = 0
for i in range(n):
max += ((-1) ** (i)) * algebraic_cofactor_list[i] * matrix[0][i]
return max
def transposition(old_matrix):
# 获得转置矩阵
row = len(old_matrix)
col = len(old_matrix[0])
new_matrix = []
for i in range(col):
new_matrix.append([])
for j in range(row):
new_matrix[i].append(old_matrix[j][i])
return new_matrix
def adjoint(old_matrix):
# 获得伴随矩阵
n = len(old_matrix)
new_matrix = []
for x in range(n):
new_matrix.append([])
for y in range(n):
new_matrix[x].append(algebraicCofactorList(x, y, old_matrix))
return new_matrix
def algebraicCofactorList(x, y, matrix):
# 获得(x,y)位置的代数余子式
new_matrix = deepcopy(matrix)
new_matrix.remove(new_matrix[x])
for i in range(len(matrix) - 1):
new_matrix[i].pop(y) # remove是从头查找与值相同的元素移除,而pop是指定位置移除
algebraic_cofactor = det(new_matrix) * ((-1) ** (x + y))
return algebraic_cofactor
def inverseMatrix(matrix):
# 返回逆矩阵
try:
adjoint_matrix = adjoint(transposition(matrix))
for i in range(len(matrix)):
for j in range(len(matrix)):
adjoint_matrix[i][j] /= det(matrix)
new_matrix = adjoint_matrix
return new_matrix
except:
return '矩阵可能是奇异矩阵,请输入一个新的矩阵!'
if __name__ == '__main__':
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix_1 = [[1, 0, 0], [0, 2, 0], [0, 0, 3]]
matrix_2 = [[1, 2, 3], [4, 5, 6], [7, 8, 10]]
# matrix = transposition(matrix) # 返回转置矩阵
# print(matrix)
# pretty(matrix) # 优化矩阵输出
# print(det(matrix)) # 求一个矩阵行列式的值
# print(inverseMatrix(matrix_1)) # 返回逆矩阵
print(pretty(inverseMatrix(matrix_1)))
输出样例:
| 1.000 0.000 0.000 |
| 0.000 0.500 0.000 |
| 0.000 0.000 0.333 |
计算成功