Решение систем уравнений с SymPy - PullRequest
14 голосов
/ 25 февраля 2012

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

Но, похоже, это не имеет никакого эффекта.

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

1 Ответ

15 голосов
/ 25 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...