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

get sympy result as trig function rather than complex log

我正在对三角方程进行一些操作,希望结果以三角形式返回。

我正在做的是:

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 正在将三角函数扩展为指数形式,但我似乎无法说服它将结果转换回来。

我试过:

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

但我得到相同的结果...

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

>>> solve(eq1.simplify(), a)
[atan(2*D/B)]

此外,数学上更严格的 solvesetsolve 的现代替代方法)returns 数学上更正确的答案,无需简化:

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

关键是有无限多的解,所以它们不能作为列表给出:因此,solveset 将它们呈现为所有 alpha 的集合,使得 tan(alpha)2*D/B