#python #sympy
Вопрос:
Я хотел бы знать, как решить нелинейную систему уравнений относительно определенной переменной. Рассмотрим этот пример:
import sympy as sp
from sympy.solvers import solve
t2, t3, c = sp.symbols('theta_2 theta_3 c')
f1 = 2*sp.cos(t2) - 10*sp.cos(t3) - c
f2 = 2*sp.sin(t2) - 10*sp.sin(t3)
solve([f1, f2], c)[c]
Есть какие-нибудь идеи?
Комментарии:
1. Пожалуйста, не публикуйте изображения кода, публикуйте только код, способный к копированию.
2. @blorgon Я опубликую ячейку кода, когда у меня будет возможность, но мне нужен был латекс для удобства чтения.
Ответ №1:
Если вы укажете theta3 как неизвестный, то solve исключит его из решения для c:
In [9]: solve([f1, f2], [c, t3], dict=True)
Out[9]:
⎡⎧ _______________ ⎫ ⎧ _______________ ⎫⎤
⎢⎪ ╱ 2 ⎛sin(θ₂)⎞⎪ ⎪ ╱ 2 ⎛sin(θ₂)⎞⎪⎥
⎢⎨c: - 2⋅╲╱ cos (θ₂) 24 2⋅cos(θ₂), θ₃: asin⎜───────⎟⎬, ⎨c: 2⋅╲╱ cos (θ₂) 24 2⋅cos(θ₂), θ₃: π - asin⎜───────⎟⎬⎥
⎢⎪ ⎝ 5 ⎠⎪ ⎪ ⎝ 5 ⎠⎪⎥
⎣⎩ ⎭ ⎩ ⎭⎦
Теперь вы можете извлечь решения только для c:
In [10]: sol = solve([f1, f2], [c, t3], dict=True)
In [11]: [s[c] for s in sol]
Out[11]:
⎡ _______________ _______________ ⎤
⎢ ╱ 2 ╱ 2 ⎥
⎣- 2⋅╲╱ cos (θ₂) 24 2⋅cos(θ₂), 2⋅╲╱ cos (θ₂) 24 2⋅cos(θ₂)⎦
Вывод, который я здесь показываю, взят из isympy, который может хорошо печататься, если вы используете терминал с поддержкой unicode, создающий код и вывод, который можно скопировать и вставить во что-то подобное. Это лучше и быстрее, чем использовать скриншоты.