2017-07-12 32 views
0

大家好我正在運行一個小型的python程序,它解決了一些方程,當我獲得解決D的第一個方程的第一個結果時,問題就出現了,並且我得到了D依賴於A和C,然後我在下一個等式中使用subs與先前的結果,但sympy不讓我做到這一點,所以我怎麼操縱這個結果,並使潛在可能。在列表中使用subs

在此先感謝。

import sympy as sp 

g, a, A, C, D, K, x = sp.symbols("g a A C D K x") 

X=(A*sp.cos(g*x/a))+(sp.sin(g*x/a))+(C*sp.exp(-g*x/a))+(D*sp.exp(-g*(a-x)/a)) 

dx1=sp.diff(X,x,1) 

dx2=sp.diff(X,x,2) 

eq1= sp.Eq(X.subs(x,0),0) 
eq2= sp.Eq(dx2.subs(x,0)/dx1.subs(x,0),K) 
eq3= sp.Eq(X.subs(x,a),0) 
eq4= sp.Eq(dx2.subs(x,a)/dx1.subs(x,a),-K) 

D1=sp.solve(eq1,D) 
eq33=D1.subs(D,D1) 
C33=sp.solve(eq33,C) 
Df=D1.subs(C,C33) 
eq22=sp.subs(eq2,[C,D],[C33,D11]); 
A22=solve(eq22,A) 
pretty(A22) 
+0

對不起,這是一個錯誤,它的D1 –

+0

有一個編輯功能,用它來清理你的代碼。什麼是'D11'?你用';'來完成什麼?用於c編程? ;-) – Hannebambel

回答

0
import sympy as sp 

g, a, A, C, D, K, x = sp.symbols("g a A C D K x") 

X=(A*sp.cos(g*x/a))+(sp.sin(g*x/a))+(C*sp.exp(-g*x/a))+(D*sp.exp(-g*(a-x)/a)) 

dx1=sp.diff(X,x,1) 

dx2=sp.diff(X,x,2) 

eq1= sp.Eq(X.subs(x,0),0) 
eq2= sp.Eq(dx2.subs(x,0)/dx1.subs(x,0),K) 
eq3= sp.Eq(X.subs(x,a),0) 
eq4= sp.Eq(dx2.subs(x,a)/dx1.subs(x,a),-K) 

D1=sp.solve(eq1,D) 
eq33=D1[0].subs(D,D1) 
C33=sp.solve(eq33,C) 
Df=D1[0].subs(C,C33[0]) 
eq22=eq2.subs((C,D),(C33[0],D1[0])) 
A22=sp.solve(eq22,A) 
sp.pprint(A22) 

這應該工作。您可以通過簡單地調用D1[0]來獲取列表中的第一個對象。請注意,可能有多個解決方案,因此在D1中有多個條目。

+0

它工作。謝謝,這非常有幫助。 –