使用不等式简化Sympy中的方程

3
我正在使用Sympy尝试使用标准的工程方法简化方程,其中你知道一个变量比另一个变量大或小得多。例如,给定方程式
C1*R2*s+C1*R2+R1+R2
并且知道
R1 >> R2
该方程可以简化为
C1*R2*s+C1*R2+R1
你通常会手动执行除以R1的操作,得到
C1*R2*s/R1+C1*R2/R1+1+R2/R1
然后在任何地方看到R2/R1 单独出现,您可以将其设置为零,然后乘以R1。我无法弄清楚如何在Sympy中完成这个步骤。显然,进行除法步骤很容易,但我还没有找到如何执行搜索和替换步骤的方法 - 只使用subs会得到答案为
R1
这不是正确的答案。因子、展开、收集似乎都没有帮助。

1个回答

2

在这里使用replace而非subs是有效的。

C1, C2, R1, R2 = sp.symbols('C1, C2, R1, R2', real = True)
s = sp.symbols('s')

expr = C1*R2*s+C1*R2+R1+R2
print('original expression:', expr)

expr_approx = (R1 * ((expr/R1).expand().replace(R2/R1,0))).simplify()
print('approximate expression:', expr_approx)
original expression: C1*R2*s + C1*R2 + R1 + R2
approximate expression: C1*R2*s + C1*R2 + R1

我没有选择好我的例子。 - Tom Spargo
假设它是 C1*R1*s + R1*Re + R2*Re。你最终会得到原方程,因为(expr/R1).expand()的结果为C1*s+Re+R2*Re/R1,而replace(R2/R1,0)无法识别 R2*Re/R1 - Tom Spargo
我几乎可以使用“替换”通配符让它正常工作,除了每个术语前面都有一个1.0(我为了清晰起见省略了这些),然后“替换”结果显示全部变成了0 - 我不知道该如何摆脱这些。因此,我真的在试图简化像 1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re 这样的东西。除以1.0是无效的 :( - Tom Spargo
@TomSpargo 使用 sympy.nsimplify(1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re) 来消除 1.0。也许其他人有更好的整体解决方案。 - Stelios
我一直在尝试使用通配符使替换工作,我认为一旦我理解了它们,这就是做到这一点的方法。 - Tom Spargo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接