2017-01-16 13 views
4

EDIT:与えられた変数に関して数式を解く方法は問いませんが(supposed duplicated questionのように)、その質問に指定されている他のもの。 私は誤解を招くタイトルを持つことは「重複した」質問だと思います。式をsympyの他の式で書き換える方法

私はSymPyで非常に新しいです。私は、いったん他の表現に関して表現されると、非常に良い表現になるはずの表現を持っています。 問題は、元の表現を他の表現で表現する方法を強制する方法がわかりません。

これは基本的な例である:

import sympy as sp 
sp.init_printing(use_unicode=True) 
a,b,c = sp.symbols('a b c') 
A = a+b+c 
B = a+c 
C = A.subs(a+c,B) # Expected/wanted: C = B+b 
C 

C equation

A.rewrite(B) 

error message

A及びBは、かなり複雑な表現とすることができます。参考までに、これは私の本当の場合のシナリオです:

import sympy as sp 
sp.init_printing(use_unicode=True) 
t, w, r = sp.symbols('t w r') 
S = sp.Function('S')(t) 
V = (S-w*(1+r)**t)/(((1+r)**t)-1) 
V 

V equation

St = -(r + 1)**t*(w - S)*sp.log(r + 1)/((r + 1)**t - 1) 
St 

St equation

私はVの面で聖を書くたら、私はちょうど

を取得するために簡素化することができるはず

St = rS(t)+ rV

しかし、私はSymPyでそれを行うことができません。

あなたが

a,b,c = sp.symbols('a b c') 
A = a+b+c 
B = a+c 

変数ABはSympyを理解し、上で動作することができますない新しいSympyシンボルあるような何かを行う際に、むしろ、彼らはSympyの別名がa+b+ca+c式であることを

答えて

2

まずノートそれぞれ、したがって、A.subs(a+c,B)は本質的にはA.subs(a+c,a+c)と同じですが、もちろん無意味です。あなたはなぜA.rewrite(B)も役に立たない理由を知ることができます。

expr.subs({complicated_mutlivariable_formula: new_variable})のようなコールは、Sympyでは機能しません。あなたが望むことを実行する1つの方法は、最初に "古い"変数の1つに関して式complicated_mutlivariable_formula = new_variableを解くことです。一意の解が存在すると仮定すると、subs()を使用してこの変数を置き換えます。

# sympy Symbol A will be used to represent expression V 
A = sp.symbols('A') 

# Solve the equation V==A with respect to w, which has a unique solution as a function of A 
w_A = sp.solve(sp.Eq(V,A), w)[0] 

# Now substitute w 
St.subs({w:w_A}).simplify() 

enter image description here

:第二の例については、このアプローチを適用

関連する問題