繁体   English   中英

Sympy - 从三角方程得到两个解,我只期待一个

[英]Sympy - got two solutions from trigonometric equation, I was expecting only one

我正在尝试用 sympy 求解三角方程。 我在理解 sympy 正在做什么时遇到问题:我只期待一个解决方案,但我得到了两个。 这是代码:

import sympy as sp
sp.var("a, b, c, d, z")
myeq = sp.Eq(c * sp.sin(a * (b / 2 - z)) + d * sp.cos(a * (b / 2 - z)), 0)
sol = sp.solve(myeq, z)
print(sol)

Output: [(a*b - 4*atan((c - sqrt(c**2 + d**2))/d))/(2*a), (a*b - 4*atan((c + sqrt(c**2 + d**2))/d))/(2*a)]

我期待的解决方案是: [b / 2 + atan(c / d) / a]

我错过了什么? 对于这种特定情况,是否有可能获得单一解决方案?

如果您重新排列方程式以将sincos组合成tan ,您将得到您正在寻找的内容:

>>> solve(c/d*tan(a*(b/2-z))-1,z)
[b/2 - atan(d/c)/a]

如果您不这样做,SymPy 将根据exp重写和求解 ...在这种情况下,您可以验证,它将在exp(l*a*z)中是二次的。

可以像这样尝试将两个参数的总和重写为比率:

>>> def ratio(eq):
...     if isinstance(eq, Eq):
...         eq=eq.rewrite(Add)
...     A, B = eq.as_two_terms()
...     if not A.is_Add and not B.is_Add:
...         return Eq(A/B, 1)
>>> trigsimp(ratio(eq))
Eq(c*tan(a*b/2 - a*z)/d, 1)

(如果没有两个项可以使用,则 function 将返回 None。)如您所见,在这种情况下,您会得到一个新的方程,可以根据需要求解。

暂无
暂无

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

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