如何针对指定变量在 sympy 中求解非线性系统
How to solve a non-linear system in sympy with respect to a specified variable
我想知道如何求解关于某个变量的非线性方程组。考虑这个例子:
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]
有什么想法吗?
如果您将 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 的终端生成可以复制粘贴到类似 SO 的代码和输出,它可以很好地打印。这比使用屏幕截图更好更快。
我想知道如何求解关于某个变量的非线性方程组。考虑这个例子:
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]
有什么想法吗?
如果您将 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 的终端生成可以复制粘贴到类似 SO 的代码和输出,它可以很好地打印。这比使用屏幕截图更好更快。