如何创建在特定范围上绘制给定函数的函数

时间:2014-10-05 13:30:22

标签: r

我试图创建一个具有一些特殊参数的函数。

此函数应具有参数(f1,f2和范围)。范围是函数f1和f2的间隔。该函数可以是f1 = cosx,f2 = 2x。然后该函数应在一个图上绘制该范围内的两个函数。

这是我现在脑海中的例子和功能概要:

f1=cosx 
f2=2x
range=

MasterFun<- function(f1,f2,range) {

range <- interval for the function to be calculte
curve (the functions on the same plot)

      }

我不知道如何制作MasterFun。我该怎么做呢?我是如何使内部函数只使用&#34;范围中的数字&#34;论点。

2)并且更复杂一点:如果函数有更多变量用于输入怎么办?例如,如果我使用像这样的函数

 2^(2*k+n) 

如何为该函数设置多个变量的范围?

3)如何为每个功能平均分配50个点?

4)如果我在函数内部给出范围怎么办?那个功能应该怎么样呢?

我只想用基本的R图形来做这件事。

1 个答案:

答案 0 :(得分:2)

我们首先捕获dots中的...参数,形成x值以评估函数,然后计算y限制ylim,宽度足以包含所有函数。最后运行曲线。我们在eval/substitute内执行此操作,以绕过curve使用的非标准评估。

Master <- function(..., Range = 0:1, n = 101, ylab = "", xname = "x", 
     env = parent.frame()) {
  dots <- substitute(...())
  x <- seq(Range[1], Range[2], length = n)

  rng <- function(e) {
    expr <- if (is.name(e)) {
        call(as.character(e), as.name(xname))
    } else {
        if (!((is.call(e) || is.expression(e)) && xname %in% 
            all.vars(e))) 
            stop(
             gettextf("'expr' must be a fun, or a call or an expr containing '%s'", 
              xname), domain = NA)
        e
    }
    ll <- list(x = x)
    names(ll) <- xname
    y <- eval(expr, envir = ll, enclos = env)
    range(y)
  }
  ylim <- range(c(sapply(dots, rng)))

  for(i in seq_along(dots)) {
    if (i > 1) par(new = TRUE)
    eval(substitute(do.call(curve, list(dots[[i]], 
       from = Range[1], to = Range[2], n = n, 
       ylim = ylim, ylab = ylab))), env)
  }

k <- 1}
Master(cos, 2*x, x+n+k)

给出:

screenshot

已添加改进