I want to solve system of equation described in the article Double Pendulum, similar like author, where in last step he claims that he "use a computer algebra program to solve equations (13) and (16)". To do this, I rewrite this equations in SymPy:
import sympy as s
m1, m2 = s.symbols('m1, m2')
g = s.symbols('g')
x1_d2, y1_d2, x2_d2, y2_d2 = s.symbols('x1_d2, y1_d2, x2_d2, y2_d2')
t1, t2, t1_d1, t1_d2, t2_d1, t2_d2 = s.symbols('t1, t2, t1_d1, t1_d2, t2_d1, t2_d2')
L1, L2 = s.symbols('L1, L2')
eq1 = x1_d2 + t1_d1**2 * L1 * s.sin(t1) - t1_d2 * L1 * s.cos(t1)
eq2 = y1_d2 - t1_d1**2 * L1 * s.cos(t1) - t1_d2 * L1 * s.sin(t1)
eq3 = x2_d2 - x1_d2 + t2_d1**2 * L2 * s.sin(t2) - t2_d2 * L2 * s.cos(t2)
eq4 = y2_d2 - y1_d2 - t2_d1**2 * L2 * s.cos(t2) - t2_d2 * L2 * s.sin(t2)
eq16 = s.sin(t2) * (m2 * y2_d2 + m2 * g) + s.cos(t2) * (m2 * x2_d2)
result1 = s.solve([eq1, eq2, eq3, eq4, eq16], \
[m1, m2, g, x1_d2, y1_d2, x2_d2, y2_d2, t1, t2, t1_d1, t1_d2, t2_d1, t2_d2, L1, L2], \
dict=True)
for r in result1:
print(r.keys())
eq13 = s.sin(t1) * (m1 * y1_d2 + m2 * y2_d2 + m2 * g + m1 * g) + s.cos(t1) * (m1 * x1_d2 + m2 * x2_d2)
result2 = s.solve([eq1, eq2, eq3, eq4, eq13], \
[m1, m2, g, x1_d2, y1_d2, x2_d2, y2_d2, t1, t2, t1_d1, t1_d2, t2_d1, t2_d2, L1, L2], \
dict=True)
for r in result2:
print(r.keys())
Looking on similar question like How can I solve system of linear equations in SymPy?
, I expected that SymPy simplify, and return equations in respect to each symbol, however for equation (16) I got the result only for: L1, g, t1, L2, t2, and not for y2_d2 t2_d2. And for equation (13) I got exception.
dict_keys([L1, g, t1, L2, t2])
dict_keys([L1, g, t1, L2, t2])
Traceback (most recent call last):
File "physics-simulations/formula.py", line 28, in <module>
dict=True)
File "/usr/lib/python3/dist-packages/sympy/solvers/solvers.py", line 1164, in solve
solution = _solve_system(f, symbols, **flags)
File "/usr/lib/python3/dist-packages/sympy/solvers/solvers.py", line 1911, in _solve_system
soln = _solve(eq2, s, **flags)
File "/usr/lib/python3/dist-packages/sympy/solvers/solvers.py", line 1752, in _solve
result = [r for r in result if
File "/usr/lib/python3/dist-packages/sympy/solvers/solvers.py", line 1753, in <listcomp>
checksol(f_num, {symbol: r}, **flags) is not False]
File "/usr/lib/python3/dist-packages/sympy/solvers/solvers.py", line 355, in checksol
return bool(abs(val.n(18).n(12, chop=True)) < 1e-9)
File "/usr/lib/python3/dist-packages/sympy/core/expr.py", line 336, in __lt__
raise TypeError("Invalid NaN comparison")
TypeError: Invalid NaN comparison
Edited:
How should my code look like, to solve/find two unknowns y1_d2, y2_d2 t1_d1, t2_d2 - equations (13, 16)?