Как решить sin (z)=2 в Sympy?


Sympy работает с комплексными числами, поэтому есть возможность решать уравнения типа sin(z)=2. Однако я не могу этого понять. У кого-нибудь есть идея, как решить ее в Sympy?

Кстати, решение имеет вид:

z=frac{pi}{2}+ln(2pmsqrt{3})i

z=frac{pi}{2}+ln(2pmsqrt{3}) i< / code>

Я добавлю очень специализированный метод для решения этой проблемы в Sympy, который вряд ли может быть обобщен:
from sympy import *
z=symbols('z')
r=re(sin(z)-2)
i=im(sin(z))
x,y=symbols('x,y',real=True)
eq1=r.subs({re(z):x,im(z):y})
eq2=i.subs({re(z):x,im(z):y})
solve((eq1,eq2),(x,y))

Выход - [(pi/2, log(-sqrt(3) + 2)), (pi/2, log(sqrt(3) + 2))]. У кого-нибудь есть лучшее решение?

2 4

2 ответа:

Если вы предпочитаете формат log, Используйте .rewrite(log), например

In [4]: asin(2).rewrite(log)
Out[4]:
      ⎛  ___        ⎞
-ⅈ⋅log⎝╲╱ 3 ⋅ⅈ + 2⋅ⅈ⎠

Сочетая это с ответом игр, вы можете получить:

In [3]: sols = solve(sin(z) - 2, z)

In [4]: sols
Out[4]: [π - asin(2), asin(2)]

In [5]: [i.rewrite(log) for i in sols]
Out[5]:
⎡         ⎛  ___        ⎞        ⎛  ___        ⎞⎤
⎣π + ⅈ⋅log⎝╲╱ 3 ⋅ⅈ + 2⋅ⅈ⎠, -ⅈ⋅log⎝╲╱ 3 ⋅ⅈ + 2⋅ⅈ⎠⎦
И кстати, решений действительно бесконечно много, потому что sin является 2*pi периодическим. SymPy в настоящее время не поддерживает предоставление всех из них напрямую, но достаточно легко получить их с помощью sin(z + 2*pi*n) вместо sin(z):
In [8]: n = Symbol('n', integer=True)

In [9]: sols = solve(sin(z + 2*pi*n) - 2, z)

In [10]: sols
Out[10]: [-2⋅π⋅n + asin(2), -2⋅π⋅n + π - asin(2)]

In [11]: [i.rewrite(log) for i in sols]
Out[11]:
⎡              ⎛  ___        ⎞                    ⎛  ___        ⎞⎤
⎣-2⋅π⋅n - ⅈ⋅log⎝╲╱ 3 ⋅ⅈ + 2⋅ⅈ⎠, -2⋅π⋅n + π + ⅈ⋅log⎝╲╱ 3 ⋅ⅈ + 2⋅ⅈ⎠⎦

Здесь n - любое целое число.

Ну, вы должны установить его так

sin(z) - 2 = 0

Вот так:

>>> from sympy.solvers import solve
>>> from sympy import *
>>> z = Symbol('z')
>>> solve(sin(z) - 2, z)
[pi - asin(2), asin(2)]
>>> asin(2).evalf()
1.5707963267949 - 1.31695789692482*I