Python 如何在Symphy中推动替换

Python 如何在Symphy中推动替换,python,sympy,Python,Sympy,我有下面的公式,其中a,b,c,d都是符号 p = a + b + 2*c + d q = a + b + c + d 我想这样做: p = p.subs(a + b + c + d, q) 想要得到这个: p = q + c 但p保持不变 我应该怎么做才能达到p=q+c subs()执行的匹配似乎是为了严格排序,因此它没有拆分“2*c”项 我应该使用replace()而不是subs() 编辑: 代码如下: import sympy a, b, c, d = sympy.symbols(

我有下面的公式,其中a,b,c,d都是符号

p = a + b + 2*c + d
q = a + b + c + d
我想这样做:

p = p.subs(a + b + c + d, q)
想要得到这个:

p = q + c
但p保持不变

我应该怎么做才能达到p=q+c

subs()执行的匹配似乎是为了严格排序,因此它没有拆分“2*c”项

我应该使用replace()而不是subs()

编辑: 代码如下:

import sympy

a, b, c, d = sympy.symbols('a,b,c,d')

p = a + b + 2*c + d
q = a + b + c + d

r = p.subs(a + b + c + d, q)

print r
编辑#2


我的问题与groups.google链接类似,只是在这种情况下subs()完成了它的工作

首先是对代码的评论:因为你将q定义为a+b+c+d之和,所以你永远看不到变化,即使它确实有效(但它没有)。其他可行的方法如下:

>>> p = a + b + 2*c + d
>>> q = var('q')
>>> p.extract_additively(a+b+c+d) + q
c + q

还有一种提取乘法的方法。

你能给我们完整的代码吗?代码被添加到原始帖子中!谢谢你的回答!看起来我可能需要编写一个自定义函数来简化表达式,以便更简洁地表示。我有一个相关的问题,在我的情况下,我有p和q表达式,这两个表达式都已经定义好了(如原始问题),有没有办法用q来简洁地表示p?或者q总是会被扩展成a,b,c,d项?如果不是,我想我的定制函数只需要先“盲”q,然后在p或其他东西上绕过extract_additily函数。