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 に答える