将 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)]
此外,数学上更严格的 solveset
(solve
的现代替代方法)returns 数学上更正确的答案,无需简化:
>>> solveset(eq1, a)
ConditionSet(alpha, Eq(tan(alpha)/2 - D/B, 0), Reals)
关键是有无限多的解,所以它们不能作为列表给出:因此,solveset 将它们呈现为所有 alpha 的集合,使得 tan(alpha)
是 2*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 正在将三角函数扩展为指数形式,但我似乎无法说服它将结果转换回来。
我试过:
[n.rewrite(atan) for n in solve(eq1,a)]
但我得到相同的结果...
如果在求解之前简化,结果看起来会更好。
>>> solve(eq1.simplify(), a)
[atan(2*D/B)]
此外,数学上更严格的 solveset
(solve
的现代替代方法)returns 数学上更正确的答案,无需简化:
>>> solveset(eq1, a)
ConditionSet(alpha, Eq(tan(alpha)/2 - D/B, 0), Reals)
关键是有无限多的解,所以它们不能作为列表给出:因此,solveset 将它们呈现为所有 alpha 的集合,使得 tan(alpha)
是 2*D/B
。