Python中矩阵的行列式
我接到一个任务,要写一个算法,输入一个方阵(就是行和列数量相同的矩阵),然后检查这个矩阵的规律性(也就是计算它的行列式)。输出的结果需要包含规律性和行列式的值。
其中一个矩阵(5X5)看起来是这样的:
10 1 7 0.5 -0.5
2 7 1 1 1
5 3 12 2 -1
3 2 1 8 0.2
0.1 0.2 0.3 0.2 1
我用Python写了一个程序。但是当我输入这个矩阵时,程序给出的行列式结果是错误的。所以我现在想知道问题出在哪里。
这是我的程序:
from numpy import *
print "Zadaj dimenziju matrice"
a=[]
n=input ("Red matrice: ")
for i in range (n):
a.append([])
for j in range (n):
r=raw_input("Unesite element a["+str(i+1)+"]["+str(j+1)+"] element: ")
a[i].append(r)
M=array(a)
print M
def rem(TT):
d=TT.shape
r=[]
for i in range(d[0]):
r.append([])
for j in range(d[0]):
if i==0:
continue
elif j==n:
continue
else:
r[i].append(TT[i][j])
r.pop(0)
return array(r)
def det (MM):
b=0
d=MM.shape
if d==(1,1):
return MM[0][0]
else:
for j in range (d[0]):
global n
n=j
k=float(MM[0][j])
kk=float(det(rem(MM)))
s=k*kk
b=b+((-1)**(j))*int(s)
return b
print "Determinanta je: ", det(M)
2 个回答
0
看看这个
matrix=[]
def det(IC,i):
global matrix,row
determinent=0
m=1
for j in range(len(matrix)):
if j not in IC:
m+=1
if i == row-1:
determinent = matrix[i][j]
else:
determinent+=(-1)**(m)*matrix[i][j]*det(IC+[j],i+1)
return determinent
row=int(input("enter order"))
for i in range(row):
rowEntry=[int(x) for x in input().split(' ')]
matrix.append(rowEntry)
print(matrix)
print(det([],0))
2
你已经在使用numpy了,所以你可以利用numpy的线性代数工具。
这里有一个使用你矩阵的例子:
import numpy
M = numpy.matrix([[10,1,7,0.5,-0.5],[2,7,1,1,1],[5,3,12,2,-1],[3,2,1,8,0.2],[0.1,0.2,0.3,0.2,1]])
mDet = numpy.linalg.det(M)
你只需要在代码开头删除你自己写的行列式函数,然后加上这一行就可以了:
from numpy.linalg import det
你只需要调用一下det
。你的代码大概会是这样的:
from numpy import *
from numpy.linalg import det
print "Zadaj dimenziju matrice"
a=[]
n=input ("Red matrice: ")
for i in range (n):
a.append([])
for j in range (n):
r=raw_input("Unesite element a["+str(i+1)+"]["+str(j+1)+"] element: ")
a[i].append(r)
M=array(a)
print M
print "Determinanta je: ", det(M)