如何计算R中某些分数的幂的任何负数?

时间:2013-10-17 21:32:00

标签: r

在以下代码中:

(-8/27)^(2/3)

我得到了结果NaN,尽管正确的结果应该是4/9.444444...

那为什么它会返回NaN?我怎样才能让它返回正确的值?

2 个答案:

答案 0 :(得分:7)

help("^")中所述:

  

例如,用户有时会对返回的值感到惊讶   为什么'(-8)^(1/3)'是'NaN'。对于双输入,R使用IEC   所有平台上的60559算术,以及C系统   '^'运算符的函数'pow'。相关标准   在许多极端情况下定义结果。特别是结果   在上面的例子中,C99标准强制要求。很多   与Unix相似的系统命令'man pow'给出了详细信息   大量极端情况下的值。

所以你需要分开进行操作:

R> ((-8/27)^2)^(1/3)
[1] 0.4444444

答案 1 :(得分:7)

这是复杂域中的操作,R支持:

 (-8/27+0i)^(2/3)
[1] -0.2222222+0.3849002i

测试:

> ((-8/27+0i)^(2/3) )^(3/2)
[1] -0.2962963+0i
> -8/27  # check
[1] -0.2962963

此外,复合物也是根:

(-0.2222222-0.3849002i)^(3/2)
[1] -0.2962963-0i

问题是-8/27的第三个根是什么:

polyroot( c(8/27,0,0,1) )
[1]  0.3333333+0.5773503i -0.6666667-0.0000000i  0.3333333-0.5773503i

中间值是真正的根。既然你说-8/27 = x ^ 3你真的要求立方方程的解:

 0 = 8/27 + 0*x + 0*x^2 + x^2

polyroot函数需要这4个系数值,并将返回复杂和真实的根。