2012-02-25 4 views
13

Я пытаюсь решить систему уравнений с SymPy 0.7.1:решения систем уравнений с SymPy

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

Но это, кажется, не имеют никакого эффекта.

Заранее благодарим за любую помощь!

ответ

14

Я тоже не могу понять выход. Первоначально я думал, что проблема заключается в том, что вы создавали новые объекты var, вместо того, чтобы повторно использовать оригинальные, но это оказалось не таким. Если это возможно, я бы просто перейти на 0.7.1-мерзавца, где вещи гораздо лучше себя ведет:

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

Ницца словарей по умолчанию, и с указанием работ порядка.

 Смежные вопросы

  • Нет связанных вопросов^_^