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}
、式をどの順序で渡しても同じになるはずです。