2017-05-28 112 views
0

因此,我有一個有條件地定義的函數,如下面的R代碼所示,它是-1和t之間的積分。繪製反函數與R

f <- function(x) ifelse((x<=1 & x>=-1),3/4*(1-x^2),0) 
F <- function(t) integrate(Vectorize(f),-1,t)$value 

使用:

plot(Vectorize(F),-2,2); 

我得到F.

的曲線

現在我要繪製F的反函數,所以做了一些研究之後,我發現了uniroot功能試圖用這種方式:

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1) 

解決函數F(x)= Y在[-1,1]。 但想要繪製結果時:

plot(Vectorize(Finv),-2,2) 

我不斷收到以下錯誤:

Error in uniroot(function(t) F(t) - s, lower = -1, upper = 1) : 
     f() values at end points not of opposite sign 

我不明白是什麼問題?

回答

1

對於[-1,1]中的x,F取值爲0到1.因此,Finv僅在[0,1]上定義。你無法將其繪製[-2,2]。如果你限制你的情節到適當的領域,它會正常工作。

plot(Vectorize(Finv),0,1) 
0

而且不要忘記在uniroot月底的$根,以獲得特定的值:

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1)$root 

所以它看起來應該(和工作)是這樣的:

f <- function(x) ifelse((x<=1 & x>=-1),3/4*(1-x^2),0) 
F <- function(t) integrate(Vectorize(f),-1,t)$value 

Finv <- function(s) uniroot(function(t) F(t) - s, lower=-1,upper=1)$root 

plot(Vectorize(Finv),0,1)