【发布时间】:2020-11-12 00:31:39
【问题描述】:
我构造了一个用户函数:
find.c <- function(q) { f <- function(c) {
(log(7.2 + 6 * c * q - 6) * q^6 * (1-q)^(6-6) * factorial(6) / factorial(6) / factorial(6-6)
+ log(7.2 + 6 * c * q - 5) * q^5 * (1-q)^(6-5) * factorial(6) / factorial(5) / factorial(6-5)
+ log(7.2 + 6 * c * q - 4) * q^4 * (1-q)^(6-4) * factorial(6) / factorial(4) / factorial(6-4)
+ log(7.2 + 6 * c * q - 3) * q^3 * (1-q)^(6-3) * factorial(6) / factorial(3) / factorial(6-3)
+ log(7.2 + 6 * c * q - 2) * q^2 * (1-q)^(6-2) * factorial(6) / factorial(2) / factorial(6-2)
+ log(7.2 + 6 * c * q - 1) * q^1 * (1-q)^(6-1) * factorial(6) / factorial(1) / factorial(6-1)
+ log(7.2 + 6 * c * q - 0) * q^0 * (1-q)^(6-0) * factorial(6) / factorial(0) / factorial(6-0)
- log(7.2)
)}
g <- uniroot(f, lower=0, upper=100, extendInt = "yes")[1]
g}
而我试图绘制:
plot(x = seq(0, 1 , 0.001), find.c(x))
然后它给了我:“uniroot 中的错误(f,lower = 0,upper = 100,extendInt = “yes”): 端点处的 f() 值不是相反符号"
还有什么方法可以使用'for'循环来简化这个功能?我尝试了 for 的方法,但是函数内部的函数非常复杂。
【问题讨论】:
-
您的函数是否在 0 - 到 - 100 的范围内跨过 0?如果没有零点,就找不到零点。
-
find.c(0.1), find.c(0.001) 等给我输出,是的。
-
plot(x, sapply(x, find.c))是否显示您的期望? -
还有谁能解释我为什么要使用 sapply?例如 'sin' 不需要 sapply,但是这个使用函数需要它。那是因为我的函数不能有向量或列表输入吗?