# 首先,使用numpy直接求解 import numpy as np a=np.random.random((3, 3)) # a[0,0]=0 np.linalg.det(a)
# 自己编写算法求解 def get_det(a): mutifier=1 i_value,j_value=a.shape # 如果第一行第一列不为0 if a[0][0]!=0: for col in range(j_value): for i in range(i_value): if i>=col+1: # 需要消元的列 # 如果不等于0,消元 if a[i][col]!=0: k=-1*a[i][col]/a[0+col][col] for j in range(col,j_value): a[i][j]=a[i][j]+k*a[0+col][j] value=mutifier for i in range(i_value): for j in range(j_value): if i==j: value*=a[i][j] return value if a[0][0]==0: col=0 for j in range(j_value): if a[0][j]!=0: if col==0: col=j # 如果一行为0,值为0 if col==0: return 0 # 如若不是,就交换两列 else: first_result=[] second_result=[] for i in range(i_value): first_result.append(a[i][0]) second_result.append(a[i][col]) a[:,0]=second_result a[:,col]=first_result return -1*get_det(a) get_det(a)
可以看出,两个结果是一致的,仅仅差很多小数位后的数字,这很可能是因为python计算的精度不高造成的。
分析时间复杂度
假设现有的行列式是n*n的,那么,采用高斯消元法求行列式需要的计算步骤近似为: (n-1)*(n-2)*……(1)=(n-1)!