2017-02-02 116 views
1

我正在嘗試寫一個sympy腳本,但在L1,L2上面臨問題。歡迎任何幫助。sympy中的矩陣操作錯誤

在L1,我試圖用矩陣乘法表達式替換先前行中的值。我不能在矩陣對象中替換嗎?

在L2中,我試圖評估浮點數替換的值,但沒有得到它。爲什麼eval()不提供浮點值?

from sympy import * 
init_printing() 
x, x1, x2, x3 = symbols ('x x1 x2 x3') 
N1 = ((x-x2)*(x-x3))/((x1-x2) * (x1-x3)) 
N2 = ((x-x1)*(x-x3))/((x2-x1) * (x2-x3)) 
N = Matrix([ [N1,N2] ]) 
expr1 = N*Transpose(N) 
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1 
N1.evalf (subs={x1:0.0, x2:2.5, x3:5}) #L2 

編輯:

一個答案之後,我把代碼一些額外的線條。行L3,L4不起作用。在L3,L4,我試圖整合矩陣的f1和矩陣的行。但在兩種情況下都失敗了。如何在sympy中整合矩陣?它是否支持?

from sympy import * 
init_printing() 
x, x1, x2, x3 = symbols ('x x1 x2 x3') 
N1 = ((x-x2)*(x-x3))/((x1-x2) * (x1-x3)) 
N2 = ((x-x1)*(x-x3))/((x2-x1) * (x2-x3)) 
N = Matrix([ [N1,N2] ]) 
expr1 = N*Transpose(N) 
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1 
N1s=N1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) 
N2s=N2.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) 
Ns = Matrix([ [N1s,N2s] ]) 
f1 = Ns*x**3 
f2 = integrate(f1,(x,0,5)) #L3 
f2 = integrate(f1.row(1),(x,0,5)) #L4 

回答

1

第一行適用於我。確保您使用SymPy的最新版本(撰寫本文時爲1.0)。

第二行不起作用,因爲evalf(subs={...})不起作用,除非您替換表達式中的所有變量。見https://github.com/sympy/sympy/issues/6974。如果您只想替換一些變量,只需使用subs即可。

+0

非常感謝您的回答。你也可以評論一下'L3,L4'嗎? – vfg4341

+0

行'L3,L4'是否適合您? – vfg4341

+0

@ vfg4341最好在 – asmeurer