gpt4 book ai didi

sympy - 如何用sympy中的其他表达式重写表达式

转载 作者:行者123 更新时间:2023-12-04 11:34:34 24 4
gpt4 key购买 nike

编辑:我不是在问如何根据给定的变量(如supposed duplicated question)来求解方程,而是要如何根据问题中的另一个表达式来表示。
我相信标题具有误导性是“重复的”问题。

我对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,我应该能够简化得到

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的别名。因此, A.subs(a+c,B)本质上与 A.subs(a+c,a+c)相同,但这毫无意义。您会了解为什么 A.rewrite(B)也没有用。

我认为像 expr.subs({complicated_mutlivariable_formula: new_variable})这样的调用在Sympy中不起作用。一种执行所需操作的方法是,首先针对一个“旧”变量求解方程 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

关于sympy - 如何用sympy中的其他表达式重写表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41678621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com