2017-05-31 179 views
1

我設法創造這種蟒陣列:如何將Python數組轉換爲SymPy矩陣來計算行列式?

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

(我改變了矩陣的一些值)

現在,我想知道是否有可能將其轉換爲一個SymPy矩陣,以便我可以計算行列式(給定MainMatrix中的所有值不是整數,有些是SymPy符號)。我想這樣的事情:

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

(是的,我知道,第一行是不行的,但我只是把它顯示我的意圖)

解決這一轉換,或任何其他選擇找到MainMatrix的決定因素(記住所有條目不是​​整數,有些是SymPy符號)將不勝感激。

回答

1

Acording到文檔的例子,是因爲這樣做只是簡單:

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) 
+0

如果我做到這一點,然後嘗試分配/更改使用 MainMatrix [I-1] [I] = 2 #JustAnExample 然後,它是給我一個錯誤在MainMatrix一個值: 類型錯誤: '零'對象不支持項目分配 我如何解決這個問題? – Raj

+0

@Raj您可以在問題中添加所有可能的詳細信息嗎?因爲它適用於我,但也許我失去了一些東西 –

+0

@Raj我的意思是,你想構建的矩陣 –

2

MainMatrix已經在正確的形式。你只需要將它傳遞給sympy.Matrix

M = Matrix(MainMatrix) 
+0

你是對的,再加上一個很好的答案 –