Как решить нелинейную систему в симпатии по отношению к указанной переменной

#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, создающий код и вывод, который можно скопировать и вставить во что-то подобное. Это лучше и быстрее, чем использовать скриншоты.