如何根据 sympy 中的另一个表达式重写一个表达式
How to rewrite an expression in terms of an other expression in sympy
编辑:我不是在问如何根据给定变量求解方程(如 中所示),而是如何根据另一个变量表示表达式,如问题。
我认为 "duplicated" 问题的标题具有误导性。
我对 SymPy 还很陌生。我有一种表达方式,一旦用另一种表达方式表达出来,就会变得非常好。
问题是我不知道如何"force"用另一个来表达原来的表达。
这是一个基本示例:
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
A.rewrite(B)
A 和 B 可能是相当复杂的表达式。作为参考,这是我的 real-case 场景:
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
St = -(r + 1)**t*(w - S)*sp.log(r + 1)/((r + 1)**t - 1)
St
一旦我用 V 来写 St,我应该能够简化得到
St = rS(t)+rV
但我无法在 SymPy 中完成。
首先请注意,当您执行类似
的操作时
a,b,c = sp.symbols('a b c')
A = a+b+c
B = a+c
变量 A
、B
不是 Sympy 可以理解和操作的新 Sympy 符号,相反,它们是 Sympy 表达式的别名 a+b+c
和 a+c
。所以,A.subs(a+c,B)
和A.subs(a+c,a+c)
本质上是一样的,当然是没有意义的。你明白为什么 A.rewrite(B)
也没有用了。
我认为 expr.subs({complicated_mutlivariable_formula: new_variable})
这样的调用在 Sympy 中不起作用。一种方法是先针对 "old" 变量之一求解方程 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()
编辑:我不是在问如何根据给定变量求解方程(如
我对 SymPy 还很陌生。我有一种表达方式,一旦用另一种表达方式表达出来,就会变得非常好。 问题是我不知道如何"force"用另一个来表达原来的表达。
这是一个基本示例:
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
A.rewrite(B)
A 和 B 可能是相当复杂的表达式。作为参考,这是我的 real-case 场景:
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
St = -(r + 1)**t*(w - S)*sp.log(r + 1)/((r + 1)**t - 1)
St
一旦我用 V 来写 St,我应该能够简化得到
St = rS(t)+rV
但我无法在 SymPy 中完成。
首先请注意,当您执行类似
的操作时a,b,c = sp.symbols('a b c')
A = a+b+c
B = a+c
变量 A
、B
不是 Sympy 可以理解和操作的新 Sympy 符号,相反,它们是 Sympy 表达式的别名 a+b+c
和 a+c
。所以,A.subs(a+c,B)
和A.subs(a+c,a+c)
本质上是一样的,当然是没有意义的。你明白为什么 A.rewrite(B)
也没有用了。
我认为 expr.subs({complicated_mutlivariable_formula: new_variable})
这样的调用在 Sympy 中不起作用。一种方法是先针对 "old" 变量之一求解方程 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()