Подтвердить что ты не робот

Решение систем уравнений с помощью 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)]

Как определить, какое значение соответствует этой переменной? Переменный порядок кажется произвольным. Документация предлагает предоставление дополнительных аргументов:

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

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

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

4b9b3361

Ответ 1

Я тоже не могу понять результаты. Первоначально я думал, что проблема заключается в том, что вы создавали новые объекты 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)]

Хорошие словари по умолчанию и указание порядка работы.