代码之家  ›  专栏  ›  技术社区  ›  piojo

辛:如何用x来解

  •  2
  • piojo  · 技术社区  · 7 年前

    我在sympy中模拟一些电压,我在让系统简化输出方面遇到了问题。我可以要求系统不要在输出中包含不需要的变量吗?我希望消除 V . 我跑了:

    from sympy import *
    var('V1 V2 V Vout R1 R2 Rf')
    
    solve([
        -V + V1*Rf/(Rf+R1),
        -V + (V2-Vout)*Rf/(Rf+R2),
    ], Vout)
    # output: {Vout: -R2*V/Rf - V + V2}
    

    我能告诉它给我一个结果吗 V1 , V2 , R1 , R2 Rf ,但不是 V ?

    请注意,手动移除 V 不是理想的,因为并非所有的方程都这么简单。当我手动移除它(并决定 R1=R2 )我发现了一个类似的问题--

    solve([
        Eq(V1*Rf/(Rf+R1), (V2-Vout)*Rf/(Rf+R2)),
        Eq(R1, R2)
    ], Vout)
    # output: {Vout: (R1*V2 - R2*V1 - Rf*V1 + Rf*V2)/(R1 + Rf)}
    

    两个 R1 R2 包含在输出中。如何使系统消除一个?(顺便说一下,消除 R2 会导致 R1

    {Vout: -V1 + V2}
    

    (请注意电子爱好者:您可能会注意到一个差分放大器。我知道初始方程有问题。弄清楚Jupyter/Sympy真的能帮助我发现问题所在。)

    1 回复  |  直到 7 年前
        1
  •  1
  •   user6655984    7 年前

    如果将v添加到要求解的变量中,它将不会出现在右侧:

    solve([
        -V + V1*Rf/(Rf+R1),
        -V + (V2-Vout)*Rf/(Rf+R2),
    ], (Vout, V))
    

    退货 {V: Rf*V1/(R1 + Rf), Vout: (-V1*(R2 + Rf) + V2*(R1 + Rf))/(R1 + Rf)} . 访问VOUT的解决方案 solve(..., (Vout, V))[Vout]

    同样地,

    solve([
        Eq(V1*Rf/(Rf+R1), (V2-Vout)*Rf/(Rf+R2)),
        Eq(R1, R2)
    ], (Vout, R2))[Vout]
    

    退货 -V1 + V2 .