使用“曲线”绘制函数:棘手的表达式?

时间:2018-06-26 00:11:41

标签: r plot vectorization curve

我的问题涉及应该相当简单的内容,但我无法使其正常工作。我的意思是,您可以计算xy,然后使用plot函数对它们进行绘制。但这可以使用curve函数来完成吗?

我想绘制以下R函数f2

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

但是此代码失败:

curve(f2, 0, 10)

有什么建议吗?

3 个答案:

答案 0 :(得分:6)

您需要使用向量化的pmin而不是min(请看一下?pmin来了解两者之间的区别)

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

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

顺便说一句,我将使用n的{​​{1}}和m参数来避免全局变量。

enter image description here


更新

要为不同的参数f2f2绘制n

m

enter image description here

答案 1 :(得分:2)

如前所述,对curve的调用失败的主要原因是curve需要向量化的函数(在这种情况下,输入结果的向量并得出结果的向量),而您的f2()函数仅输入和输出标量。您可以使用Vectorize

快速矢量化f2
n <- 1
m <- 2

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

答案 2 :(得分:0)

需要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

enter image description here