Python 将sympy结果作为trig函数而不是复杂日志获取

Python 将sympy结果作为trig函数而不是复杂日志获取,python,sympy,trigonometry,Python,Sympy,Trigonometry,我正在做一些三角方程的操作,希望结果以三角形式返回 我现在做的是: from sympy import * B,D,a=symbols(r'B,D,alpha',real=True,positive=True) eq1=Eq(D,B*((sin(a)*sin(a))/(sin(a+a)))) solve(eq1,a) 我希望结果是atan(2*D/B),但我得到了: [-I*log(-sqrt((B + 2*I*D)/(B - 2*I*D))), -I*log((B + 2*I*D)/(B -

我正在做一些三角方程的操作,希望结果以三角形式返回

我现在做的是:

from sympy import *
B,D,a=symbols(r'B,D,alpha',real=True,positive=True)
eq1=Eq(D,B*((sin(a)*sin(a))/(sin(a+a))))
solve(eq1,a)
我希望结果是
atan(2*D/B)
,但我得到了:

[-I*log(-sqrt((B + 2*I*D)/(B - 2*I*D))), -I*log((B + 2*I*D)/(B - 2*I*D))/2]
我知道sympy正在将trig函数扩展为指数形式,但我似乎无法说服它将结果转换回来

我试过:

[n.rewrite(atan) for n in solve(eq1,a)]

但是我得到了同样的结果…

如果在求解之前简化,结果看起来会更好

>>> solve(eq1.simplify(), a)
[atan(2*D/B)]
此外,数学上更严格的
solveset
(是
solve
的现代替代方案)会返回数学上更正确的答案,而无需简化:

>>> solveset(eq1, a)
ConditionSet(alpha, Eq(tan(alpha)/2 - D/B, 0), Reals)

关键是有无限多个解决方案,因此它们不能作为列表给出:因此,solveset将它们表示为所有alpha的集合,因此
tan(alpha)
2*D/B

您是否尝试过使用simplify()或trigsimp(),我在结果中尝试了这些,但运气不佳。当然,我没有尝试它们/之前/解决方案,这确实解决了问题。在这种情况下,我将其用于工程目的,因此一个解决方案就足够了…;-)谢谢我想尽一切办法修复输出,但没有想到调整输入。