当前位置:  开发笔记 > IOS > 正文

如何根据sympy中的其他表达式重写表达式

如何解决《如何根据sympy中的其他表达式重写表达式》经验,为你挑选了1个好方法。

编辑:我不是问如何用给定的变量来解决方程式(如在这个假定的重复问题中),而是如何用问题中指定的另一个表示表达式.我认为这是一个具有误导性标题的"重复"问题.

我是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方程

A.rewrite(B)

错误信息

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方程

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

St方程式

一旦我按照V语言编写St,我应该能够简化以获得公正

St = rS(t)+ rV

但我无法在SymPy中做到这一点.



1> Stelios..:

首先请注意,当你做某些事情时

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

变量A,B不是该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()

在此输入图像描述

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有