получить симпатичный результат как функцию триггера, а не как сложный лог - PullRequest
0 голосов
/ 10 ноября 2018

Я делаю некоторые манипуляции с уравнениями триггера и хотел бы получить результаты обратно в форме триггера.

Что я делаю, это:

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

но я получаю тот же результат ...

1 Ответ

0 голосов
/ 10 ноября 2018

Если вы упростите до решения, результат будет выглядеть лучше.

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

Кроме того, более математически строгий solveset (современная альтернатива solve) возвращает более математически правильный ответ без необходимости упрощения:

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

Дело в том, что существует бесконечно много решений, поэтому они не могут быть заданы в виде списка: так, solveset представляет их как множество всей альфа-версии, такой что tan(alpha) равно 2*D/B.

...