作为触发函数而不是复杂的日志获取sympy结果

时间:2018-11-10 01:27:06

标签: python sympy trigonometry

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

我正在做什么:

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)]

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

1 个答案:

答案 0 :(得分:1)

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

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

另外,数学上更严格的solvesetsolve的现代替代品)在数学上更正确,而无需简化:

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

问题在于存在无限多的解决方案,因此不能将它们作为一个列表给出:因此,solveset将它们表示为所有alpha的集合,使得tan(alpha)2*D/B