我有以下等式:
Class System.String
Represents Text as a series of Unicode characters
Syntax Error, ',' expected
根据同情规则,这些是-lhs + rhs = 0。因此,两个方程都等于零。 我想在同情中解决这个问题
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)
但是,结果非常复杂。 sol1 = nonlinsolve([eq1,eq2],[v1,q3])
sol2 = solve([eq1,eq2],[v1,q3])
和trigsimp
也不会更改解决方案。
手工我可以将eq1 / eq2 = 0除以求解tan(q3)并求解v1的eq1。这是一个非常短的解决方案。
我的问题是:我做错了什么(其他求解器,参数化形式,处理方式......),还是只是尚未准备好解决这些问题?
答案 0 :(得分:2)
你的做法没有错。 SymPy或其他程序不会取代具有一定数学知识的人。在这种情况下,非线性求解器错过了将sin(q3)/ cos(q3)简化为tan(q3)的机会,从而将q3的出现次数减少到1。如果他们被推动遵循一个特定的策略 - 例如,"解决v1从第一个,sub到第二个,简化和解决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)))]