【问题标题】:How to calculate any negative number to the power of some fraction in R?如何计算任何负数到 R 中某个分数的幂?
【发布时间】:2017-04-06 09:58:25
【问题描述】:

在以下代码中:

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

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

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

【问题讨论】:

  • 理论上,你不能真正将负数提高到非整数幂。例如,想想(-1)^1.5 的真正含义。任何非整数幂都需要复数根。
  • 为了在数学上保持一致,IMO,您应该将负数保留在括号外(或分解操作,如下所示)
  • 所以你的意思是我应该写-(8/27)^(2/3)?那么答案就变成了-4/9,而不是4/9
  • 您还必须分配幂的分子(所以从技术上讲,它与以下相同)(-1) ^ 2 * (8/27)^(2/3)
  • @SeñorO -- See here 讨论求幂的一种含义,在这种含义下,可以在不涉及复数的情况下回答 OP 的问题。

标签: r


【解决方案1】:

help("^") 中所述:

用户有时会对返回的值感到惊讶,例如 为什么‘(-8)^(1/3)’是‘NaN’。对于双输入,R 使用 IEC 60559 所有平台上的算术,连同C系统 “^”运算符的函数“pow”。相关标准 在许多极端情况下定义结果。特别是,结果 在上面的例子中是由 C99 标准规定的。在许多 类 Unix 系统命令“man pow”给出了 大量极端情况下的值。

所以你需要单独进行操作:

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

【讨论】:

  • 所以 OP 想要先平方它,然后 然后 取立方根,如果他们想要 4/9。
  • 它应该输出什么? -8/27 没有真正的立方根
  • @Metrics:是的,因为您仍在尝试将负数提高到非整数幂。 man pow 说:“如果 x 是小于 0 的有限值,并且 y 是有限非整数,则会发生域错误,并返回 NaN。” (其中 x 是底数,y 是指数)。
  • 所以,这不适用于一开始有奇数的时候。如您所见((-8/27)^3)^(1/3)[1] NaN ((-8/27)^4)^(1/3) [1] 0.1975309 > ((-8/27)^5)^(1/3) [1] NaN > ((-8/27)^1)^(1/3) [1] NaN。感谢您的澄清
  • @SeñorO 确定有 - -2/3
【解决方案2】:

这是 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 个系数值,并将返回复数和实数根。

【讨论】:

  • 如果你去弄乱你不懂的魔法,呃,数学,有时地精会从你不知道的其他维度中跳出来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多