我正在使用Sympy(版本0.7.3,python2.7.5,macosx)解算器来解一些矩阵方程,我遇到了一个不一致的行为,它破坏了我的整个结果。准确地说,结果似乎取决于应解方程的顺序。在
最小工作示例由以下代码生成:
from sympy import *
axx, bxx, byy = symbols('axx bxx byy')
这个命令
^{pr2}$得到{axx: bxx, byy: 0}
作为结果,而切换方程的顺序
solve([byy, axx - bxx])
给出{byy: 0, bxx: axx}
,这在数学上是相同的,但在使用SymPy subs
函数应用此解时会有所不同,即:
axx.subs({byy: 0, bxx: axx})
返回axx
,而
axx.subs({axx: bxx, byy: 0})
返回bxx
,这显然会给以后的计算带来很多麻烦。在
如果有人能告诉我如何让SymPy表现得始终如一,我将不胜感激。我不在乎结果是{axx: bxx}
还是{bxx: axx}
,但不管我以什么顺序传递方程,结果都应该是一样的。在
使用
manual=True
似乎解决了我的问题,尽管我不知道为什么。在documentation上写着
不管是什么意思。在
然而,}都给出了相同的结果。在
solve([axx - bxx, byy], manual = True)
和{正如Krastanov所指出的,传递第二个要求解的参数,它告诉它要为什么符号求解。例如,如果您想要使用
b
变量,那么如果你不这样做,它只会猜测,正如你发现的,猜测是任意的,可能取决于方程的顺序,甚至符号名称。在
相关问题 更多 >
编程相关推荐