我有以下等式:

q1dd,b1,q2,q3,v1,q2dd,a1,a2,b2 = symbols('\ddot{q}_1 b1 q2 q3 v1 \ddot{q}_2 a1 a2 b2')
eq1 = -q1dd+b1*cos(q2)*sin(q3)*v1
eq2 = -q2dd+a1*sin(q2)+a2*cos(q2) + b2*cos(q3)*v1
display(eq1)
display(eq2)

根据 sympy 规则,这些是 -lhs+rhs=0。因此,两个方程都等于零。
我想在 sympy 中解决集合
sol1 = nonlinsolve([eq1,eq2],[v1,q3])
sol2 = solve([eq1,eq2],[v1,q3])

然而,结果 super 复杂。 trigsimpsimplify 也不会改变解决方案。
手动我可以除以 eq1/eq2 = 0 并求解 tan(q3) 并求解 v1 的 eq1。这是一个非常简短的解决方案。
我的问题是:我做错了什么(其他求解器、参数化形式、处理等),还是 sympy 还没有准备好优雅地解决这些问题?

最佳答案

你的做法没有错。 SymPy 或其他程序不会取代具有一定数学知识的人。在这种情况下,非线性求解器错过了将 sin(q3)/cos(q3) 简化为 tan(q3) 的机会,从而将 q3 的出现次数减少到 1。如果他们被迫遵循特定的策略——例如,“从第一个求解 v1,从第二个开始,简化并求解 q3”——那么解决方案就会毫不费力地出来。

v1sol = solve(eq1, v1)[0]
q3sol = solve(simplify(eq2.subs(v1, v1sol)), q3)[0]
print([v1sol, q3sol])

这输出
[\ddot{q}_1/(b1*sin(q3)*cos(q2)), -atan(\ddot{q}_1*b2/(b1*(-\ddot{q}_2 + a1*sin(q2) + a2*cos(q2))*cos(q2)))]

关于python - 用三角函数求解非线性方程组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47380953/

10-12 21:25