2017-09-09 83 views
-5

我正在寫一個函數,它需要計算負數的立方根。我該如何做到這一點?負數的立方根

`V=c (2,-3,-1,-8,-0.567)` 

我試過V^(1/3)在r。我也試過例如在Python中(-8)**(1./3)看來我可能有困難。

預期輸出爲(-8)^(1/3) ir r爲-2並且對於python (-8)**(1./3)也應該給-2。用您熟悉的任何語言回答。

+3

這是Python或R語言?你已經用兩種方式標記了它。 –

+0

如果可能,請幫我解決問題 – Onyambu

+0

https://stackoverflow.com/questions/13236158/real-cube-root-of-a-negative-number-in-r適用於R –

回答

0

的Python:

>>> (-3)**(1/3) 
(0.7211247851537043+1.2490247664834064j) 
+1

@abccd他也把它標記爲Python,並且只是添加了一條評論來幫助都。我不知道R. –

+0

@標記-3的立方根是-1.44224957 ..它是一個實數。不是一個複數 – Onyambu

+1

@Onyambu有多個根。 Python給了複雜的一個。 –

0

只是爲了好玩,這裏有一個方法(以R)使用複數計算所有三個立方根:

library(ggplot2) 
library(purrr) 
library(dplyr) 

V = c(2,-3,-1,-8,-0.567) 

# Find one complex root 
Vr = as.complex(V)^(1/3) 

# Other roots are 120 and 240 degree rotations of Vr in the complex plane 
rot = complex(real=cos(c(0,2/3,4/3)*pi), imaginary=sin(c(0,2/3,4/3)*pi)) 

# Convert to data frame 
dat = map_df(rot, function(x) data.frame(V, Vroot=Vr * x), .id="Mult") %>% 
    arrange(V) 

這裏是所有根:

Mult  V     Vroot 
1  1 -8.000 1.0000000+1.7320508i 
2  2 -8.000 -2.0000000+0.0000000i 
3  3 -8.000 1.0000000-1.7320508i 
4  1 -3.000 0.7211248+1.2490248i 
5  2 -3.000 -1.4422496+0.0000000i 
6  3 -3.000 0.7211248-1.2490248i 
7  1 -1.000 0.5000000+0.8660254i 
8  2 -1.000 -1.0000000+0.0000000i 
9  3 -1.000 0.5000000-0.8660254i 
10 1 -0.567 0.4138386+0.7167895i 
11 2 -0.567 -0.8276773+0.0000000i 
12 3 -0.567 0.4138386-0.7167895i 
13 1 2.000 1.2599210+0.0000000i 
14 2 2.000 -0.6299605+1.0911236i 
15 3 2.000 -0.6299605-1.0911236i 

真正的根是虛部等於零的那些:

dat %>% 
    filter(abs(Im(Vroot)) < 1e-15) %>% 
    mutate(Vroot = Re(Vroot)) 
Mult  V  Vroot 
1 2 -8.000 -2.0000000 
2 2 -3.000 -1.4422496 
3 2 -1.000 -1.0000000 
4 2 -0.567 -0.8276773 
5 1 2.000 1.2599210 

這裏的根的情節。點標籤是V的值。

ggplot() + 
    geom_vline(xintercept = 0, colour="grey85") + 
    geom_hline(yintercept = 0, colour="grey85") + 
    geom_segment(aes(x=-0.03, xend=0.03, y=seq(-2,2,1), yend=seq(-2,2,1)), 
       colour="grey60") + 
    geom_segment(aes(y=-0.03, yend=0.03, x=seq(-2,2,1), xend=seq(-2,2,1)), 
       colour="grey60") + 
    geom_text(data=dat, aes(label=round(V,1), x=Re(Vroot), y=Im(Vroot), colour=Mult), 
      size=3.5, show.legend=FALSE) + 
    theme_void() + 
    coord_fixed() 

enter image description here