Sympy适用于复数,因此有可能求解sin(z)=2
等方程式。但是,我无法解决这个问题。任何人都知道如何在Sympy中解决它?
z=\frac{\pi}{2}+\ln(2\pm\sqrt{3})i
我将在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))]
。任何人都有更好的解决方案吗?
答案 0 :(得分:4)
你需要像这样设置它
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
答案 1 :(得分:4)
如果您更喜欢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
是任何整数。