这是R FAQ 7.33的变体,与unary minus运算符的优先顺序有关:-0.1^0.1(例如)被解析为-(0.1^0.1).当您将表达式放入向量中时,-
的计算结果是before到^
.
sign(vals)*(abs(vals))^(1/10)
非常迂腐,你可以这样得到one个复杂的根:
as.complex(vals)^(1/10)
[1] 0.6689545+0.2173565i 0.6011934+0.1953396i 0.6349218+0.2062986i
或all根这样的根
polyroot(c(-vals[1], rep(0,9), 1))
[1] 0.4134366+0.5690467i -0.4134366+0.5690467i -0.4134366-0.5690467i
[4] 0.6689545-0.2173565i 0.0000000+0.7033804i -0.6689545+0.2173565i
[7] 0.0000000-0.7033804i 0.6689545+0.2173565i -0.6689545-0.2173565i
[10] 0.4134366-0.5690467i
(这会找到方程式1*x^10 + 0*x^9 + ... + 0*x - val == 0
的根,即x^10 - val = 0
)
从技术上讲,我认为(除非我弄错了)您正在寻找的实际根是第五个根(0.0000000+0.7033804i
);这与sign(x)*(abs(x)^(1/10))
的答案相比相差了i
倍……我们可以确认答案should是纯想象的,即
all.equal((0.7033804i)^10, as.complex(vals[1]), tol = 1e-6)
是真的.