用SymPy求解方程组

Tim*_*ean 14 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)
Run Code Online (Sandbox Code Playgroud)

产生正确的结果,但是以一种奇怪的顺序:

[(-4, 10, 60, -35, 5), (3, 10, 60, 35, 5)]
Run Code Online (Sandbox Code Playgroud)

如何确定哪个值适合哪个变量?变量顺序似乎是任意的. 文档建议提供其他参数:

print solve(equations, var('a'), var('d'), var('t'), var('vi'), var('vf'))
Run Code Online (Sandbox Code Playgroud)

但这似乎没有效果.

在此先感谢您的帮助!

DSM*_*DSM 16

我也无法弄清楚输出.最初我认为问题是因为你正在创建新的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)]
Run Code Online (Sandbox Code Playgroud)

默认情况下,好的词典,并指定顺序有效.