如何将Python数组转换为SymPy矩阵以计算行列式?

时间:2017-05-31 17:48:58

标签: python arrays python-2.7 matrix sympy

我设法创建了这种python数组:

MainMatrix=[[0 for x in range(n)] for y in range(n)]

(我在矩阵中更改了一些值)

现在,我想知道是否可以将其转换为SymPy Matrix,以便我可以计算行列式(假设MainMatrix中的所有值都不是整数,而有些是SymPy符号)。我想要这样的东西:

M=Matrix([MainMatrix])          #Conversion of Array to SymPy Matrix
M.det()                         #Computation of Determinant of the Matrix

(是的,我知道第一行不起作用,但我只是想表明我的意图)

这种转换的解决方案,或者找到MainMatrix的决定因素的任何其他替代方案(请记住,所有条目都不是整数,有些是SymPy符号)将不胜感激。

2 个答案:

答案 0 :(得分:2)

您的MainMatrix格式正确。您只需将其传递给sympy.Matrix

M = Matrix(MainMatrix)

答案 1 :(得分:1)

根据文档的例子,这很简单:

from sympy import *
import math

n=3

n_atoms=8

MainMatrix=Matrix([[0 for x in range(n)] for y in range(n)])

KappaMatrix=Matrix([0 for x in range(n-1)])

MassMatrix=Matrix([0 for x in range(n)])

Kappa=3

ka_by_pi=4

for i in range(1,n):

    KappaMatrix[i-1]=3

for i in range(1,n+1):

    MassMatrix[i-1]=3

for i in range(2,n):

    MainMatrix[i-1]= -KappaMatrix[i-2]/MassMatrix[i-1]

    MainMatrix[i-1]= (KappaMatrix[i-2] + KappaMatrix[i-1])/MassMatrix[i-1]

    MainMatrix[i-1]= -KappaMatrix[i-1]/MassMatrix[i-1]

    MainMatrix[0]=(KappaMatrix[0]+Kappa)/MassMatrix[0]

    MainMatrix[0]=-(KappaMatrix[0])/MassMatrix[0]

    i=symbols('i')

    MainMatrix[0]= -(Kappa/MassMatrix[0])*(math.cos(math.pi*ka_by_pi)+(i*math.sin(math.pi*ka_by_pi)))

    MainMatrix[n-1]= -(Kappa/MassMatrix[n-1])*(math.cos(math.pi*ka_by_pi)-(i*math.sin(math.pi*ka_by_pi)))

    MainMatrix[n-1]=-(KappaMatrix[n-2])/MassMatrix[n-1]

    MainMatrix[n-1]=(KappaMatrix[n-2]+Kappa)/MassMatrix[n-1]

    t=symbols('t')

for j in range(0,n_atoms):
    MainMatrix[j]=MainMatrix[j]-(t**2)

print(MainMatrix)