我正在使用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
这不是正确的答案。因子、展开、收集似乎都没有帮助。
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
这不是正确的答案。因子、展开、收集似乎都没有帮助。
C1*R1*s + R1*Re + R2*Re
。你最终会得到原方程,因为(expr/R1).expand()
的结果为C1*s+Re+R2*Re/R1
,而replace(R2/R1,0)
无法识别R2*Re/R1
。 - Tom Spargo1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re
这样的东西。除以1.0是无效的 :( - Tom Spargosympy.nsimplify(1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re)
来消除1.0
。也许其他人有更好的整体解决方案。 - Stelios