【问题标题】:sympy solveset fails to solve set of equations, while solve has no problemsympy solveset 无法求解方程组,而 solve 没有问题
【发布时间】:2021-08-06 12:35:36
【问题描述】:

按照建议,我尝试使用 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 文档中给出的建议并改用求解集。那我错过了什么?

【问题讨论】:

    标签: python sympy equation


    【解决方案1】:

    文档应该固定说如果你愿意可以使用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⎠⎠⎪
    ⎩                                                    ⎭
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多