13

我有一个等式:

     R₂⋅V₁ + R₃⋅V₁ - R₃⋅V₂
i₁ = ─────────────────────
     R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃

已定义,我想将其拆分为仅包含单个变量的因素 - 在本例中为 V1 和 V2。

因此,我期望

        -R₃                        (R₂ + R₃)
i₁ = V₂⋅───────────────────── + V₁⋅─────────────────────
        R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃      R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃

但到目前为止我能得到的最好的结果是

     -R₃⋅V₂ + V₁⋅(R₂ + R₃)
i₁ = ─────────────────────
     R₁⋅R₂ + R₁⋅R₃ + R₂⋅R₃

使用equation.factor(V1,V2). 是否有其他选择因素或其他方法可以进一步分离变量?

4

2 回答 2

7

如果可以从因子算法(本例中的分母)中排除某些东西,那将很容易。我不知道如何做到这一点,所以这是一个手动解决方案:

In [1]: a
Out[1]: 

r₁⋅v₁ + r₂⋅v₂ + r₃⋅v₂
─────────────────────
r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃

In [2]: b,c = factor(a,v2).as_numer_denom()

In [3]: b.args[0]/c + b.args[1]/c
Out[3]: 

        r₁⋅v₁                v₂⋅(r₂ + r₃)    
───────────────────── + ─────────────────────
r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃   r₁⋅r₂ + r₁⋅r₃ + r₂⋅r₃

您还可以查看 Add 和 Mul 中的 evaluate=False 选项,以手动构建这些表达式。我不知道一个很好的通用解决方案。

如果您有很多术语,则 In[3] 可以是列表理解。

您还可以检查是否可以将其视为 v1 和 v2 中的多元多项式。它可能会提供更好的解决方案。

于 2012-03-10T23:25:37.790 回答
3

在这里,我已经sympy 0.7.2安装并sympy.collect()为此目的进行了工作:

import sympy
i1 = (r2*v1 + r3*v1 - r3*v2)/(r1*r2 + r1*r3 + r2*r3)

sympy.pretty_print(sympy.collect(i1, (v1, v2)))

# -r3*v2 + v1*(r2 + r3)
# ---------------------
# r1*r2 + r1*r3 + r2*r3
于 2013-04-26T14:53:09.910 回答