2017-04-03 66 views
0

我正在使用收集功能來隔離一些術語。 它返回一個字典,我不能使用給定的鍵來訪問它。這裏的例子:sympy collect返回字典,無法訪問密鑰

import sympy as sp 
t = sp.Symbol('t') 
K1,K2,K3,K4 = sp.symbols("K1 K2 K3 K4") 
W,R,L,C = sp.symbols("omega R L C") 
Vi_t = 10*sp.cos(W*t) 
Vi_yp_t = (1/L)*sp.diff(Vi_t,t) 
Yp = K3*sp.cos(W*t)+K4*sp.sin(W*t) 
dYp = sp.diff(Yp,t) 
d2Yp = sp.diff(dYp,t) 
malha = d2Yp +(R/L)*dYp + (1/L*C)*Yp 
malha_separada = sp.collect(malha,(sp.sin(W*t),sp.cos(W*t)),evaluate=False) 

打印這給: Copy/Paste here won't work well

我可以訪問關鍵的 「1」 malha_separada [1],但我罪(歐米茄* T)所做的任何嘗試給出了關鍵錯誤。 Symbol,W,/ omega ... 任何想法?

回答

1

必須使用sp.cos(W*t)sp.sin(W*t)

import sympy as sp 
t = sp.Symbol('t') 
K1,K2,K3,K4 = sp.symbols("K1 K2 K3 K4") 
W,R,L,C = sp.symbols("omega R L C") 
Vi_t = 10*sp.cos(W*t) 
Vi_yp_t = (1/L)*sp.diff(Vi_t,t) 
Yp = K3*sp.cos(W*t)+K4*sp.sin(W*t) 
dYp = sp.diff(Yp,t) 
d2Yp = sp.diff(dYp,t) 
malha = d2Yp +(R/L)*dYp + (1/L*C)*Yp 
malha_separada = sp.collect(malha, (sp.sin(W*t), sp.cos(W*t)), evaluate=False) 
print(malha_separada[1]) 
print(malha_separada[sp.cos(W*t)]) 
print(malha_separada[sp.sin(W*t)]) 

輸出:

C*(K3*cos(omega*t) + K4*sin(omega*t))/L + R*(-K3*omega*sin(omega*t) + K4*omega*cos(omega*t))/L 
-K3*omega**2 
-K4*omega**2 
+0

這工作,謝謝。在問之前我曾經這樣做過,一定是犯了一個錯字。 – Matg0d