不可预知的行为

2024-09-30 06:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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},但不管我以什么顺序传递方程,结果都应该是一样的。在


Tags: from版本示例顺序矩阵代码生成macosx算器
2条回答

使用manual=True似乎解决了我的问题,尽管我不知道为什么。在

documentation上写着

‘manual=True (default is False)’

do not use the polys/matrix method to solve a system of equations, solve them one at a time as you might “manually”.

不管是什么意思。在

然而,solve([axx - bxx, byy], manual = True)和{}都给出了相同的结果。在

正如Krastanov所指出的,传递第二个要求解的参数,它告诉它要为什么符号求解。例如,如果您想要使用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}

如果你不这样做,它只会猜测,正如你发现的,猜测是任意的,可能取决于方程的顺序,甚至符号名称。在

相关问题 更多 >

    热门问题