我遇到了R的问题。
> as.complex(-1)^(1/3)
[1] 0.5+0.8660254i
这肯定是错误的,因为真实的部分是积极的。谁能告诉我原因和解决方案?
N.B。当我使用polyroot(c(1,0,0,1))
时会发生类似的事情。
答案 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 <= pi
和r
为正实数,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
。