繁体   English   中英

SymPy 不返回简单三角方程组的解

[英]SymPy returns no solution for a simple set of trigonometric equations

我正在尝试解决以下方程式:

cos(a) - cos(b) - 1 = 0

罪(a) - 罪(b) = 0

使用 SymPy 我没有得到(a,b)解决方案。

from sympy import symbols, sin, cos, solve, Eq

a, b = symbols("a b")
eq1 = Eq(cos(a) - cos(b) - 1, 0)
eq2 = Eq(sin(a) - sin(b), 0)
solve([eq1, eq2], [a, b]

但是,至少存在一种解决方案:

a = 60°

b = 120°

为什么 SymPy 不能求解三角方程组?

我认为solve并不是这项工作的最佳工具。 它可能会失败,因为可能有很多解决方案。 您可以尝试使用nsolve对系统进行数值求解。 但是,在您的情况下,最初的猜测确实很“挑剔”。 例如:

from sympy import *
a, b = symbols("a b")
eq1 = Eq(cos(a) - cos(b) - 1, 0)
eq2 = Eq(sin(a) - sin(b), 0)

nsolve((cos(a) - cos(b) - 1, sin(a) - sin(b)), [a, b], (0.5, 0.5))
# ZeroDivisionError: matrix is numerically singular

# one solution
nsolve((cos(a) - cos(b) - 1, sin(a) - sin(b)), [a, b], (0.5, 0.6))
# out: Matrix([[7.33038285837618], [8.37758040957278]]) # radians

# the solution you are looking for
nsolve((cos(a) - cos(b) - 1, sin(a) - sin(b)), [a, b], (0.5, 0.95))
# out: Matrix([[1.04719755119660], [2.09439510239320]])

如果你用exp重写——我认为solve是自动完成的,但可能只针对一个方程——你会得到解决方案:

>>> solve([i.rewrite(exp) for i in (cos(a) - cos(b) - 1,sin(a) - sin(b))]) 
[{a: pi/3, b: 2*pi/3}, {a: -I*log(-(-1)**(2/3)), b: -2*pi/3}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM