Python中矩阵的行列式

-1 投票
2 回答
3194 浏览
提问于 2025-04-18 02:49

我接到一个任务,要写一个算法,输入一个方阵(就是行和列数量相同的矩阵),然后检查这个矩阵的规律性(也就是计算它的行列式)。输出的结果需要包含规律性和行列式的值。

其中一个矩阵(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)

撰写回答