Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何绘制查找根的使用函数_R_Plot - Fatal编程技术网

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

R:如何绘制查找根的使用函数,r,plot,R,Plot,我构造了一个用户函数: 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)

我构造了一个用户函数:

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的方法,但函数内部的函数非常复杂。

我同意@r2evans的建议,但我认为您可以在不使用嵌套函数的情况下将其重新构造为更简单

首先,使用
c=
q=
作为参数定义
f

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)
)}      

你的函数是否在0到100的范围内穿过0?如果没有零点,你就找不到零点。find.c(0.1)、find.c(0.001)等给了我输出,是的。
plot(x,sappy(x,find.c))
显示了你的期望吗?还有没有人能解释我为什么要使用sapply?例如,“sin”不需要sappy,但是这个使用函数需要它。这是因为我的函数不能有向量或列表输入吗?
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)
)}      
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