用SymPy求解方程组

时间:2012-02-25 01:37:20

标签: python sympy

我正在尝试用SymPy 0.7.1解决一组方程式:

from sympy import *
equations = [
    Eq(S('vf'), S('vi + a*t')),
    Eq(S('d'), S('vi*t + 1/2*a*t**2')),
    Eq(S('a'), S('10')),
    Eq(S('d'), S('60')),
    Eq(S('vi'), S('5'))
]
print solve(equations)

产生正确的结果,但是按照奇怪的顺序:

[(-4, 10, 60, -35, 5), (3, 10, 60, 35, 5)]

如何识别哪个值适合哪个变量?变量顺序似乎是任意的。 The documentation suggests提供其他参数:

print solve(equations, var('a'), var('d'), var('t'), var('vi'), var('vf'))

但这似乎没有效果。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:15)

我也无法弄清楚输出。最初我认为问题是因为你正在创建新的var对象而不是重用原始对象,但事实证明并非如此。如果可能的话,我只需升级到0.7.1-git,其中表现得更好:

>>> import sympy
>>> sympy.__version__
'0.7.1-git'
>>> from sympy import S, Eq, solve
>>> 
>>> vf, d, a, vi, t = S('vf d a vi t'.split())
>>> equations = [
...     Eq(vf, vi+a*t),
...     Eq(d, vi*t + a*t**2/2),
...     Eq(a, 10),
...     Eq(d, 60),
...     Eq(vi, 5)]
>>> 
>>> solve(equations)
[{vf: -35, t: -4, a: 10, vi: 5, d: 60}, {vf: 35, t: 3, a: 10, vi: 5, d: 60}]
>>> solve(equations, [a, t, vi, vf, d])
[(10, -4, 5, -35, 60), (10, 3, 5, 35, 60)]

默认情况下不错的词典,并指定顺序有效。