我有一个类似的公式:
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)
。是否有其他选择因子或另一种方法来进一步分离变量?
答案 0 :(得分:6)
如果可以从因子算法(在这种情况下是分母)中排除某些东西,那就很容易了。我不知道如何做到这一点,所以这是一个手动解决方案:
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选项,手动构建这些表达式。我不知道一个很好的通用解决方案。
如果你有很多术语,在[3]中可以是列表理解。
您还可以检查是否可以将其视为v1和v2中的多元多项式。它可能会提供更好的解决方案。
答案 1 :(得分: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