""" 递归(拉普拉斯展开)计算n阶行列式 传入的一定为"正方形" input: [ [1,2,3,4], [5,6,7,8], [9,1,2,3], [4,5,6,7], ] """ #获取 表示余子式的行列式 def get_clild(x=0,y=0,args=[ [0,0,0], [0,0,0], [0,0,0] ]): result=[] for index_row in range(len(args)): if index_row==x: continue temp=[] index_temp=0 for index_rank in range(len(args)): if index_rank==y: continue temp.append(args[index_row][index_rank]) result.append(temp) return result #计算 def calc(args=[ [0,0,0], [0,0,0], [0,0,0], ],x=0,y=0): if len(args)==2: return args[1][1]*args[0][0]-args[1][0]*args[0][1] elif len(args)>=2: result=0 for i in range(len(args)): # 获得余子式 child_item = get_clild(x, y+i, args) result+=( args[x][y+i] * ( (-1)**(x+y+i) ) * calc(child_item,0,0) ) return result """ 输入行列式的形式变成和test_arg一致的形式 调用calc()得到返回结果 """ if __name__=="__main__": test_arg00=[ [1,2,3,4], [5,6,7,8], [9,1,2,3], [4,5,6,7] ] test_arg01=[ [1,1,1], [1,2,3], [1,5,1] ] test_arg02=[ [0,-7,9,-11], [0,-7,7,-12], [0,2,-1,2], [1,4,-7,6] ] # get_clild(1,1,test_arg) print(str(calc(test_arg02)))
转载于:https://my.oschina.net/u/3526387/blog/1546288