sympy solveset 无法求解方程组,而 solve 没有问题

sympy solveset fails to solve set of equations, while solve has no problem

按照建议,我尝试使用 sympy.solveset 而不是 sympy.solve 来求解一组两个方程。

from sympy import *
a1, a1dot, pa1, pa1dot, a2, a2dot, pa2, pa2dot, m, l = symbols('a1, a1dot, pa1, pa1dot, a2, a2dot, pa2, pa2dot, m, l')

eq1 = 2*m*l**2*a1dot + m*l**2*a2dot*cos(a1 - a2) - pa1 #equation one
eq2 = m*l**2*a2dot + m*l**2*a1dot*cos(a1 - a2) - pa2  #equation two

使用 solveset([eq1, eq2], (a1dot, a2dot)) 给我一个“[eq1, eq1] 不是有效的 SymPy 表达式”错误(eq1, eq2 被扩展为它们在错误消息中代表的完整表达式)。 但是使用 solve([eq1, eq2], (a1dot, a1dot)) 工作得很好并且给出了正确的结果。但是,我想遵循 SympPy 文档中给出的建议,改用 solveset。那我错过了什么?

文档应该修复说如果你想用solve就可以了。

您不能使用 solveset 求解方程组,因为它仅用于求解单个单变量方程。较新的方程组求解器是 linsolvenonlinsolve。这些中的任何一个都适用于这个系统,但使用 solve:

也没有错
In [2]: solve([eq1, eq2], [a1dot, a2dot])
Out[2]: 
⎧      -pa₁ + pa₂⋅cos(a₁ - a₂)          pa₁⋅cos(a₁ - a₂) - 2⋅pa₂ ⎫
⎪a1̇: ───────────────────────────, a2̇: ───────────────────────────⎪
⎨     2      2               2         2      2               2  ⎬
⎪    l ⋅m⋅cos (a₁ - a₂) - 2⋅l ⋅m      l ⋅m⋅cos (a₁ - a₂) - 2⋅l ⋅m⎪
⎩                                                                ⎭

In [3]: linsolve([eq1, eq2], [a1dot, a2dot])
Out[3]: 
⎧⎛  -pa₁ + pa₂⋅cos(a₁ - a₂)      pa₁⋅cos(a₁ - a₂) - 2⋅pa₂ ⎞⎫
⎪⎜───────────────────────────, ───────────────────────────⎟⎪
⎨⎜ 2      2               2     2      2               2  ⎟⎬
⎪⎝l ⋅m⋅cos (a₁ - a₂) - 2⋅l ⋅m  l ⋅m⋅cos (a₁ - a₂) - 2⋅l ⋅m⎠⎪
⎩                                                          ⎭

In [4]: nonlinsolve([eq1, eq2], [a1dot, a2dot])
Out[4]: 
⎧⎛-pa₁ + pa₂⋅cos(a₁ - a₂)   pa₁⋅cos(a₁ - a₂) - 2⋅pa₂⎞⎫
⎪⎜────────────────────────, ────────────────────────⎟⎪
⎨⎜ 2   ⎛   2             ⎞   2   ⎛   2             ⎞⎟⎬
⎪⎝l ⋅m⋅⎝cos (a₁ - a₂) - 2⎠  l ⋅m⋅⎝cos (a₁ - a₂) - 2⎠⎠⎪
⎩                                                    ⎭