1

Sympy (バージョン 0.7.3、Python 2.7.5、Mac OS X) ソルバーを使用していくつかの行列方程式を解いていますが、一貫性のない動作に遭遇し、結果全体が台無しになりました。正確には、解くべき方程式の順序によって結果が変わるようです。

最小限の作業例は、次のコードによって生成されます。

from sympy import *
axx, bxx, byy = symbols('axx bxx byy')

このコマンド

solve([axx - bxx, byy])

結果として得られます{axx: bxx, byy: 0}が、方程式の順序を切り替えます

solve([byy, axx - bxx])

これは{byy: 0, bxx: axx}もちろん数学的には同じですが、SymPysubs関数を使用してこのソリューションを適用すると違いが生じます。

axx.subs({byy: 0, bxx: axx})

を返しますがaxx

axx.subs({axx: bxx, byy: 0})

を返しますがbxx、これは後の計算で明らかに多くの問題を引き起こす可能性があります。

SymPy を一貫した方法で動作させる方法を教えていただければ幸いです。{axx: bxx}結果がかかはあまり気にしませんが{bxx: axx}、式をどの順序で渡しても同じになるはずです。

4

2 に答える 2

3

クラスタノフが指摘したように、2 番目の引数を solve に渡します。これは、どのシンボルを解くかを指示します。たとえば、b変数の観点から物事が必要な場合は、次のようにします。

In [48]: solve([axx - bxx, byy], [bxx, byy])
Out[48]: {bxx: axx, byy: 0}

In [49]: solve([byy, axx - bxx], [bxx, byy])
Out[49]: {bxx: axx, byy: 0}

これを行わないと、推測するだけになります。ご存知のように、推測は任意であり、方程式の順序やシンボル名などに依存する場合があります。

于 2013-08-29T23:54:25.480 に答える