2017-07-12 2 views
0

皆さん、いくつかの方程式を解く小さなPythonプログラムを実行しています。問題は、Dの最初の方程式を解く最初の結果を得るときに発生し、DはAとCに依存します。私は前の結果で次の方程式にsubsを使用しますが、sympyはそれを私に許さないので、この結果をどのように操作してsubsを可能にすることができます。リスト上の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'とは何ですか?あなたは ';'で何を達成しようとしていますか?プログラミングに使用されますか? ;-) – 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

それは働いた。ありがとう、とても助かりました。 –

関連する問題