2012-02-25 15 views
13

sto cercando di risolvere una serie di equazioni con SymPy 0.7.1:Sistemi Risoluzione di equazioni 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 il risultato corretto, ma in uno strano ordine:

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

Come posso identificare quale valore si adatta a quale variabile? L'ordine variabile sembra arbitrario. The documentation suggests fornendo ulteriori argomenti:

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

Ma questo sembra non avere alcun effetto.

Grazie in anticipo per qualsiasi aiuto!

risposta

14

Non riesco nemmeno a capire le uscite. Inizialmente pensavo che il problema fosse dovuto al fatto che stavi creando nuovi oggetti var piuttosto che riutilizzare quelli originali, ma non era quello. Se possibile, mi piacerebbe semplicemente l'aggiornamento a 0.7.1-git, dove le cose sono molto meglio educati:

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

dizionari di Nizza per impostazione predefinita, e specificando i lavori di ordine.