有没有一种方便的方法可以在 sympy (python) 中以极坐标形式添加复数?
Is there a convenient way to add complex numbers in polar form in sympy (python)?
我在 sympy 中添加极坐标形式的复数时遇到了一些问题。
以下代码
from sympy import I, exp, pi, re, im
a = exp(2*pi/3*I)
b = exp(-2*pi/3*I)
c = a+b
print(c)
print(c.simplify())
print(c.as_real_imag())
print(re(c)+im(c)*I)
print(int(c))
print(complex(c))
给予
exp(-2*I*pi/3) + exp(2*I*pi/3)
-(-1)**(1/3) + (-1)**(2/3)
(-1, 0)
-1
-1
(-1+6.776263578034403e-21j)
我想要的是得到a+b
最简单的答案,即-1
。我可以通过使用 re(c)+im(c)*I
手动重建 c=a+b
来获得它。 为什么这是必要的?还有更好的方法吗?
简单地打印 c
保留了极坐标形式,混淆了答案,c.simplify()
保留了极坐标形式,但没有多大帮助,c.as_real_imag()
returns 一个元组. int(c)
完成这项工作,但需要知道 c
是真实的(否则会抛出错误)和整数(否则,这不是我想要的答案)。 complex(c)
种工作,但我不想留下符号计算。请注意,float(c)
不起作用,因为 complex(c)
具有非零虚部。
https://whosebug.com/users/9450991/oscar-benjamin 已经为您提供了解决方案。如果您在极坐标中,您的表达式可能具有指数函数。如果您不想要这些,则必须重写三角函数,其中许多值都知道特殊值。例如,考虑 a
的 2*pi/3
角度:
>>> cos(2*pi/3)
-1/2
>>> sin(2*pi/3)
sqrt(3)/2
当您根据 cos
(或 sin
)重写 a
时,它将成为这两个值的总和(I
在 sin
值):
>>> a.rewrite(cos)
-1/2 + sqrt(3)*I/2
当您重写一个更复杂的表达式时,您将以这种方式重写整个表达式以及 cancel/combine 会这样做(或可能需要一些简化)的任何术语:
>>> c.rewrite(cos)
-1
我在 sympy 中添加极坐标形式的复数时遇到了一些问题。 以下代码
from sympy import I, exp, pi, re, im
a = exp(2*pi/3*I)
b = exp(-2*pi/3*I)
c = a+b
print(c)
print(c.simplify())
print(c.as_real_imag())
print(re(c)+im(c)*I)
print(int(c))
print(complex(c))
给予
exp(-2*I*pi/3) + exp(2*I*pi/3)
-(-1)**(1/3) + (-1)**(2/3)
(-1, 0)
-1
-1
(-1+6.776263578034403e-21j)
我想要的是得到a+b
最简单的答案,即-1
。我可以通过使用 re(c)+im(c)*I
手动重建 c=a+b
来获得它。 为什么这是必要的?还有更好的方法吗?
简单地打印 c
保留了极坐标形式,混淆了答案,c.simplify()
保留了极坐标形式,但没有多大帮助,c.as_real_imag()
returns 一个元组. int(c)
完成这项工作,但需要知道 c
是真实的(否则会抛出错误)和整数(否则,这不是我想要的答案)。 complex(c)
种工作,但我不想留下符号计算。请注意,float(c)
不起作用,因为 complex(c)
具有非零虚部。
https://whosebug.com/users/9450991/oscar-benjamin 已经为您提供了解决方案。如果您在极坐标中,您的表达式可能具有指数函数。如果您不想要这些,则必须重写三角函数,其中许多值都知道特殊值。例如,考虑 a
的 2*pi/3
角度:
>>> cos(2*pi/3)
-1/2
>>> sin(2*pi/3)
sqrt(3)/2
当您根据 cos
(或 sin
)重写 a
时,它将成为这两个值的总和(I
在 sin
值):
>>> a.rewrite(cos)
-1/2 + sqrt(3)*I/2
当您重写一个更复杂的表达式时,您将以这种方式重写整个表达式以及 cancel/combine 会这样做(或可能需要一些简化)的任何术语:
>>> c.rewrite(cos)
-1