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})

return bxx,这显然会给后面的计算带来很多麻烦。

如果有人能告诉我如何使 SymPy 以一致的方式运行,我将不胜感激。我真的不在乎结果是否为{axx: bxx}{bxx: axx},但无论我在方程式中以何种顺序传递,它都应该是相同的。

4

2 回答 2

3

正如 Krastanov 所指出的,将第二个参数传递给 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 回答
-1

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

文件说_

'manual=True(默认为 False)'</p>

不要使用 polys/matrix 方法来求解方程组,一次求解一个,就像您可能“手动”一样。

不管这应该是什么意思。

但是,solve([axx - bxx, byy], manual = True)两者solve([axx - bxx, byy], manual = True)都给出相同的结果。

于 2013-08-29T13:37:07.233 回答