使用 "curve" 绘制函数:一个棘手的表达式?

Using "curve" to plot a function: a tricky expression?

我的问题应该很简单,但我做不到。我的意思是您可以计算 xy,然后使用 plot 函数绘制它们。但这可以使用 curve 函数来完成吗?

我想绘制以下 R 函数 f2

n <- 1
m <- 2
f2 <- function(x) min(x^n, x^(-m))

但是这段代码失败了:

curve(f2, 0, 10)

有什么建议吗?

是否需要 curve 功能或者这个功能是否有效?

n <- 1 # assumption
m <- 2 # assumption

f2 <- function(x) min(x^n, x^(-m))

x.range <- seq(0, 10, by=.1) 
y.results <- sapply(x.range, f2) # Apply a Function over a List or Vector
# plot(x.range, y.results) old answer
plot(x.range, y.results, type="l") # improvement per @alistaire

您需要使用矢量化 pmin 而不是 min(查看 ?pmin 以了解差异)

f2 = function(x, n = 1, m = 2) {
    pmin(x^n, x^(-m))
}

curve(f2, from = 0, to = 10)

附带说明一下,我会使用 f2nm 参数来避免全局变量。


更新

要为 不同的 参数 nm 绘制 f2 你会做

curve(f2(x, n = 2, m = 3), from = 0, to = 10)

如前所述,调用 curve 失败的主要原因是 curve 需要一个向量化函数(在本例中输入一个结果向量并输出一个向量结果),而您的 f2() 函数仅输入和输出标量。您可以使用 Vectorize

动态矢量化您的 f2
n <- 1
m <- 2

f2 <- function(x) min(x^n, x^(-m))
curve(Vectorize(f2)(x), 0, 10)