R:如何绘制使用函数找到根

时间:2020-11-12 00:31:39

标签: r plot

我构造了一个用户功能:

RETRIES=5
echo "RETRIES=$((RETRIES-1))"

> RETRIES=4

然后我尝试绘制:

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}

然后它给我:“ uniroot中的错误(f,lower = 0,upper = 100,extendInt =“ yes”): 端点处的f()值不是相反的符号“

还有什么我可以使用“ for”循环来简化此功能的方法吗?我尝试过使用for的方式,但是函数内部的功能使方法变得非常复杂。

1 个答案:

答案 0 :(得分:0)

我同意@ r2evans的建议,但我认为您可以在没有嵌套函数的情况下对其进行重组,使其更简单。

首先,将fc=都定义为q=作为参数:

f <- function(c,q) {
(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)
)}      

然后遍历每个q=值:

mapply(function(...) uniroot(...)[[1]], 
   list(f), q=seq(0,1,0.001), lower=0, upper=100, extendInt="yes")

#   [1] 0.000000 1.076564 1.076460 1.076375 1.076291 1.076206 1.076122
#   [8] 1.076037 1.075953 1.075868 1.075784 1.075699 1.075614 1.075530
#   etc
相关问题