【问题标题】:plotting an inverse function with R用 R 绘制反函数
【发布时间】:2017-05-28 18:16:54
【问题描述】:

所以我有一个有条件定义的函数,如下面的 R 代码所示,它是 -1 和 t 之间的积分。

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)

求解[-1,1]中的函数F(x)=y。 但是在尝试绘制结果时:

 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

我不明白是什么问题?

【问题讨论】:

    标签: r function inverse


    【解决方案1】:

    对于 [-1,1] 中的 x,F 取值从 0 到 1。因此,Finv 仅在 [0,1] 上定义。你不能绘制它 [-2,2]。如果您将情节限制在适当的域中,它将正常工作。

    plot(Vectorize(Finv),0,1) 
    

    【讨论】:

      【解决方案2】:

      并且不要忘记uniroot末尾的$root来获取具体值:

      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)
      

      【讨论】:

        猜你喜欢
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 2011-01-12
        相关资源
        最近更新 更多