2017-11-19 5 views
2

삼각 함수와 비선형 방정식의 시스템을 해결 : sympy에 따르면나는 다음과 같은 식을 가지고

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) 

이러한 -lhs + 우 = 0이다 규칙. 따라서, 두 방정식은 모두 0입니다. 내가

sol1 = nonlinsolve([eq1,eq2],[v1,q3]) 
sol2 = solve([eq1,eq2],[v1,q3]) 

그러나 sympy에 집합을 해결하고자, 결과는 매우 복잡하다. 또한 trigsimpsimplify은 솔루션을 변경하지 않습니다. 손으로 eq1/eq2 = 0으로 나누고 tan (q3)을 풀면 v1의 eq1을 풀 수 있습니다. 이것은 매우 짧은 해결책입니다. 제 질문은 : 내가 뭔가 잘못하고있는 것입니다 (다른 해결사, 매개 변수화, 취급, ...), 아니면 우아하게 이러한 것들을 해결할 준비가되지 않았습니까?

답변

2

당신의 접근 방식이 잘못되었습니다. SymPy 또는 다른 프로그램은 수학에 대한 지식이있는 사람들을 대체하려고하지 않습니다. 이 경우 비선형 솔버는 죄 (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)))] 
+0

를 출력하지만 만약 우아한 해결책은 구조와 그것을 적용하는 규칙에 매우 의존한다. 이 귀중한 통찰력과 대안의 해결책에 감사드립니다! 이러한 일반적인 일상적 사용 사례의 제한 사항을 보는 데 약간 실망합니다. – mike

관련 문제