【问题标题】:Simplifying equations in Sympy using inequalities使用不等式简化 Sympy 中的方程
【发布时间】:2016-12-13 07:30:41
【问题描述】:

我正在 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

这不是正确的答案。因素,扩展,收集,似乎没有让我到任何地方。

【问题讨论】:

    标签: sympy reduce inequality


    【解决方案1】:

    在这里使用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
    

    【讨论】:

    • 我选择的例子不够好。
    • 假设它是C1*R1*s + R1*Re + R2*Re。您最终会得到原始等式,因为(expr/R1).expand() 会导致C1*s+Re+R2*Re/R1,而replace(R2/R1,0) 无法识别R2*Re/R1
    • 我几乎可以使用replace 通配符让它工作,除了每个术语前面都有一个 1.0(为了清楚起见,我一直省略这些)和replace 然后导致所有内容0-我不知道如何摆脱那些。所以我真的在尝试简化1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re 之类的东西。除以 1.0 不起作用:(
    • @TomSpargo 使用sympy.nsimplify(1.0*C1*R1*s+1.0*R1*Re+1.0*R2*Re) 摆脱1.0。也许其他人有更好的整体解决方案。
    • 我一直在尝试使用通配符来进行替换,我想一旦我理解了它们,这就是这样做的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2022-10-04
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多