`as.complex(-1)^(1/3)`给出正实部

时间:2017-11-12 17:22:59

标签: r complex-numbers

我遇到了R的问题。

> as.complex(-1)^(1/3)
[1] 0.5+0.8660254i

这肯定是错误的,因为真实的部分是积极的。谁能告诉我原因和解决方案?

N.B。当我使用polyroot(c(1,0,0,1))时会发生类似的事情。

3 个答案:

答案 0 :(得分:4)

R正在给出正确的结果。在复平面中,-1有三个立方根。其中一个是-1(或复数表示法中的-1 + 0i),但另外两个是具有正实部的复数。例如:

[1] 0.5+0.8660254i
x1^3
[1] -1+0i
x1

这是有道理的,因为Arg(x1)的参数,即它与复平面中x轴的角度,是60度(运行Mod(x1))及其模数,即距离从起源,是统一(运行x1)。因此,它会立即旋转-1+0i逆时针旋转120度,使其回到x1

-1的另外两个立方根是通过围绕原点的x2 = -1 + 0i x3 = Conj(x1) = 0.5-0.8660254i 的连续120度旋转找到的。他们是:

-1+0i

如果你将它们立方体化,你也会恢复geom_smooth。 -1的立方根是复杂平面中立方体的立方根的镜像(如果你在虚轴上反射)。

答案 1 :(得分:1)

确定。我的回复中只是被打败了。反正。

因此,怀疑(0.5 + 0.8660254i)^ 3是-1。所以,检查极坐标表示的矢量长度:

> sqrt(0.5^2+0.8660254^2)
[1] 1

这听起来很正确,因为1 ^ 3仍然是极坐标中(-1 + 0i)矢量的长度。然后剩下的问题是(0.5 + 0.8660254i)的角度是否为60(π/ 3)度,使得当乘以3时它是(-1 + 0i)的180(pi)。 HM。

https://www2.clarku.edu/~djoyce/complex/polar.html上生动地解释,实部和虚部是三角形的导管,角度计算为反正切:

> atan(0.8660254/0.5)/pi
[1] 0.3333333

由于乘以复数对它们的极坐标的角度求和,因此^ 3为pi的三分之一,然后加起来为半圆。

答案 2 :(得分:1)

我怀疑R将z^a计算为exp(a * log(z))

exp(z)是为任何z唯一定义的,但有许多可能的值可供log(z)选择。我怀疑对于复数z = r * exp(i * theta) -pi < theta <= pir为正实数,R设为log(z) = log(r) + 1i * theta

这会给(-1)^(1/3) = exp((1/3) * log(-1)) = exp(pi * 1i / 3) = 0.5+0.8660254i

如果R为对数选择了不同的值,例如,如果它设置为log(-1) = 3 * pi * 1i,那么您将获得

(-1)^(1/3) = exp(3 * pi * 1i / 3) = -1,

你期待的答案。为什么R不给你这个价值?因为为了保持一致性,log(e^(theta * 1i))必须被1i * theta + 2 * pi * 1i定义为-pi < theta <= pi