我正在寫一個函數,它需要計算負數的立方根。我該如何做到這一點?負數的立方根
`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。用您熟悉的任何語言回答。
我正在寫一個函數,它需要計算負數的立方根。我該如何做到這一點?負數的立方根
`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。用您熟悉的任何語言回答。
的Python:
>>> (-3)**(1/3)
(0.7211247851537043+1.2490247664834064j)
@abccd他也把它標記爲Python,並且只是添加了一條評論來幫助都。我不知道R. –
@標記-3的立方根是-1.44224957 ..它是一個實數。不是一個複數 – Onyambu
@Onyambu有多個根。 Python給了複雜的一個。 –
R:
x^(1/3)
未中的R爲負的x定義。因此,使用sign(x)
與abs(x)^(1/3)
一起生成sign(x)*abs(x)^1/3
。
只是爲了好玩,這裏有一個方法(以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()
這是Python或R語言?你已經用兩種方式標記了它。 –
如果可能,請幫我解決問題 – Onyambu
https://stackoverflow.com/questions/13236158/real-cube-root-of-a-negative-number-in-r適用於R –