我有一个单一变量和各种参数的功能。对于其中一个参数(其他参数是固定的)的每个值,都有一个函数的根。从参数的向量我想生成根的向量(使用uniroot)。
我正在研究的实际例子有点乱,但我会给它。以下是固定参数:
eta_inf = -0.0139 eta_0 = 178.5 lambda = 2.4954 m = 0.83094
这是功能:
crossFnc <- function(gamma_dot) tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m))
以下是tau参数的特定值的根示例:
tau=10 uniroot(crossFnc, c(0,1))$root
[1] 0.06900807
我想生成这些根的向量,例如:
tau <- seq(0,10,length.out=101)
谢谢,
史蒂夫
答案 0 :(得分:2)
也许您可以使用for
循环:
my.roots <- vector()
tau.seq <- seq(0,10,length.out=101)
for (i in seq_along(tau.seq)) {
tau <- tau.seq[i]
my.roots[i] <- uniroot(crossFnc, c(0,1))$root
}
#> head(my.roots)
#[1] 0.000000000 0.000566379 0.001142346 0.001726677 0.002257765 0.002848007
答案 1 :(得分:1)
利用sapply
:
# Notice the second argument
crossFnc <- function(gamma_dot, tau) {
tau - gamma_dot*(eta_inf + (eta_0-eta_inf)/(1 + (lambda*gamma_dot)^m))
}
# I only use length.out = 10
tau <- seq(0,10,length.out=10)
# Apply function(x) to every value in tau
myRoots <- sapply(tau, function(x) {
uniroot(crossFnc, c(0,1), tau=x)$root
})
myRoots
>[1] 0.000000000 0.006433349 0.013166577 0.020236503 0.027594321 0.035253401 0.043217816 0.051493442 0.060087456
>[10] 0.069008069