在矢量上循环uniroot

时间:2015-09-15 20:51:37

标签: r loops vector

以下代码解决了q1 = 10的等式,最终在根q2 = 170处。

q1 <- 10
fun <- function(q2) 100-q1-0.5*q2-5
root <- uniroot(fun, c(0, 200))$root

但是,我想要做的是写一个循环,它在

上运行
  v <- seq(1,200,0.05) 

因此q1取矢量的不同值。我已经尝试了几个选项,但没有一个真正起作用,反馈通常是&#34;值和端点不具有相同的符号&#34;或者另一个结果是它只是复制具有给定矢量长度的相同输出的函数。

有没有人知道如何获取所有值,而无需手动插入q1 = 1,q1 = 1.05,...?

1 个答案:

答案 0 :(得分:2)

uniroot提供了一个...参数,您可以使用该参数将其他命名参数传递给您的函数。因此,您可以将q1作为参数添加到fun,并将其作为命名参数传递给uniroot中的sapply

fun <- function(q1, q2) 100-q1-0.5*q2-5
sapply(seq(1, 200, 0.05), function(q1) uniroot(fun, c(-1000, 200), q1=q1)$root)
#    [1]  188.0  187.9  187.8  187.7  187.6  187.5  187.4  187.3  187.2  187.1  187.0  186.9  186.8  186.7
#   [15]  186.6  186.5  186.4  186.3  186.2  186.1  186.0  185.9  185.8  185.7  185.6  185.5  185.4  185.3
# ...

请注意,我设置了比代码中更宽的范围,以避免“端点值不是符号相反”错误。