![](/img/trans.png)
[英]How to expand one exponential complex equation to two trigonometric ones in 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]
我错过了什么? 对于这种特定情况,是否有可能获得单一解决方案?
如果您重新排列方程式以将sin
和cos
组合成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.