首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:如何绘制找到根的use函数

R:如何绘制找到根的use函数
EN

Stack Overflow用户
提问于 2020-11-12 08:31:40
回答 1查看 63关注 0票数 0

我构造了一个用户函数:

代码语言:javascript
运行
复制
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}

我试着画出:

代码语言:javascript
运行
复制
plot(x = seq(0, 1 , 0.001), find.c(x)) 

然后它会给我:"Error in uniroot(f,lower = 0,upper = 100,extendInt = "yes"):f()值在端点不是反号的“

还有什么方法可以使用'for‘循环来简化这个函数吗?我尝试了用for的方式,但是函数内部的函数变得非常复杂。

EN

回答 1

Stack Overflow用户

发布于 2020-11-12 09:26:51

我同意@r2evans的建议,但我认为你可以在没有嵌套函数的情况下重新构造它,使其更简单。

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

代码语言:javascript
运行
复制
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=值:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64796193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档