用同伦解方程组

2024-04-27 05:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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)]

如何确定哪个值适合哪个变量?变量顺序似乎是任意的。The documentation suggests提供其他参数:

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

但这似乎没有效果。

提前感谢您的帮助!


Tags: thefromimport顺序vareqvi方程
1条回答
网友
1楼 · 发布于 2024-04-27 05:25:50

我也不知道输出结果。最初我认为问题是因为您创建了新的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)]

默认情况下是很好的字典,指定顺序也行。

相关问题 更多 >