在 R 中获取反向函数

魔术师大人

我试图在 R 中绘制给定函数的反向函数:

f<-function(x){
if( x>1 || x< -1)
    {
       0
}else{
    0.75*(1-x^2)
}} #densityfunction f

fVec <- Vectorize(f)
F<-function(t){
    integrate(fVec, lower=-1, upper=t)$value
}#integral of f over interval -1,1

FVec<-Vectorize(F) #vectorize F

inverse <- function (f, lower = -1, upper = 1) {
   function (y) uniroot((function (x) f(x) - y), lower = lower, upper = upper)$root
}

Finv = inverse(F, -1, 1)
FinvVec<-Vectorize(Finv) # Vectorize
#plot(FVec, xlim=c(-2, 2)) #plot F
plot(FinvVec, xlim=c(-2, 2)) #plot F inv

我的问题是我收到错误:

Error  in uniroot((function(x) f(x) - y), lower = lower, upper = upper) : 
  f() values at end points not of opposite sign

AFAIK 这意味着我的函数没有符号变化。我问了我的导师,他告诉我有一个标志变化,我在这里做错了。但我就是不知道是什么。你们能帮忙吗?

安德鲁·莱克

如果您将调用包装uniroot在 a 中try,那么它会在发现错误时继续运行

inverse <- function (f, lower = -1, upper = 1) {
   function (y) try(uniroot((function (x) f(x) - y), lower = lower, upper = upper)$root)
}

结果图表明它仅适用于 (0,1) 中的 x。

plot(FinvVec, xlim=c(-2, 2))

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章