2017-01-16 89 views
4

編輯其他表達方面重寫的表達式:我不問如何求解方程在給定的變量方面(如本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中完成。

回答

2

首先要注意的是,當你這樣做

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

變量AB是Sympy能夠理解和操作上的新Sympy符號,相反,它們是爲Sympy別名表達式a+b+ca+c , 分別。因此,A.subs(a+c,B)基本上與A.subs(a+c,a+c)相同,當然這是毫無意義的。你會明白爲什麼A.rewrite(B)也沒用。

我不認爲像Sympy expr.subs({complicated_mutlivariable_formula: new_variable})工作需要。一種方法是先解決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