2012-02-25 19 views
13

estoy tratando de resolver un conjunto de ecuaciones con sympy 0.7.1:Resolver sistemas de ecuaciones con 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) 

produce el resultado correcto, pero en un orden extraño:

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

¿Cómo puedo identificar qué valor se ajusta a qué variable? El orden variable parece arbitrario. The documentation suggests proporcionan argumentos adicionales:

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

Pero esto parece tener ningún efecto.

¡Gracias de antemano por cualquier ayuda!

Respuesta

14

No puedo entender las salidas tampoco. Originalmente pensé que el problema era porque creabas nuevos objetos var en lugar de reutilizar los originales, pero resultó que no era así. Si es posible, me gustaría simplemente actualizar a 0.7.1-GIT, donde las cosas son mucho mejor atendidos:

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

diccionarios Niza por defecto, y especificando los trabajos de orden.

Cuestiones relacionadas