首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于uniroot的函数,该函数有两个参数需要跨向量运行

用于uniroot的函数,该函数有两个参数需要跨向量运行
EN

Stack Overflow用户
提问于 2019-07-24 06:51:57
回答 1查看 194关注 0票数 1

我有一个函数,thatI正在尝试用uniroot来解决。它可以很好地处理固定的值。如果我想通过将一个参数提供给lapply并应用一个向量来改变它,那么它可以很好地工作。但是当我给它提供多个向量来运行时,我无法让它运行。

现在我正在尝试使用mapply()或map2()开始工作。

这是可行的

代码语言:javascript
复制
fdr<-seq(0.01,0.1,0.001)

fstar <- function(k,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*to)))-1/(2*(x+1)^(3/2)))

f <- sapply(fdr, function(k) uniroot(fstar, c(0,10000),k=k)$root)

这就是我想做的

代码语言:javascript
复制
fdr<-seq(0.01,0.1,0.001)
foB<- seq(1.01,1.1,0.001)

fstar <- function(k,fo,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*to)))-1/(2*(x+1)^(3/2)))

f <- mapply(fdr,foB, function(k,fo) uniroot(fstar, c(0,10000),k=k,fo=fo)$root)
代码语言:javascript
复制
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'Bk' of mode 'function' was not found

我希望得到一个向量-包含两个向量中每个元素的根解。因此,当fdr = 0.01和foB =1.01时,第一个输出将是根解,依此类推。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 07:37:59

默认情况下,FUN is是mapply的第一个参数。这似乎就是它给出的错误。(您的fstar中也有一个拼写错误。)

代码语言:javascript
复制
fdr<-seq(0.01,0.1,0.5)
foB<- seq(1.01,1.1,0.1)

fstar <- function(k,fo,x) (((1-1/sqrt(x+1)-1+1/sqrt(1+fo))/((x)+(k*fo)))-1/(2*(x+1)^(3/2)))

f <- mapply(function(k, fo) uniroot(fstar, interval = c(0,10000), 
    k=k, fo=fo)$root, fdr, foB)

f中,第一个元素f[1]对应于fdr = 0.01foB = 1.01f[2]对应于fdrfoB等中的第二个元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57173162

复制
相关文章

相似问题

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