这两个结果不应该是一样的吗?为什么他们不呢?
integrate(\(x) {x * min(-x+10, 10)},lower = 0, upper = 10)$value
> [1] 1.085709
integrate(\(x) {x * (-x+10)},lower = 0, upper = 10)$value
> [1] 166.6667
请记住,从 x 值 0 到 10,我们永远不应该期望得到高于 10 的 y = -x + 10 值,因此 min(-x+10, 10) 将始终返回 (- x+10) 只要我们在 0 到 10 之间。因此这两个积分应该是相同的。
为什么不呢?
最佳答案
问题是 min
仅返回一个值,它没有矢量化。
f <- \(x) {x * min(-x+10, 10)}
g <- \(x) {x * (-x + 10)}
f <- Vectorize(f, "x")
g <- Vectorize(g, "x")
# curve(f, from = 0, to = 10)
# # this overplots perfectly
# curve(g, from = 0, to = 10, add = TRUE, col = "red")
integrate(f, lower = 0, upper = 10)$value
#> [1] 166.6667
integrate(g, lower = 0, upper = 10)$value
#> [1] 166.6667
创建于 2023 年 8 月 21 日 reprex v2.0.2
编辑
如果您不想两次分配相同的名称,第一次创建函数,第二次对其进行向量化,请使用新的管道运算符。
f <- (\(x) {x * min(-x+10, 10)}) |> Vectorize()
g <- (\(x) {x * (-x + 10)}) |> Vectorize()
创建于 2023 年 8 月 21 日 reprex v2.0.2
关于r - 对 min() 函数进行积分会得到与内部函数不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76947771/