以下代码解决了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,...?
答案 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
# ...
请注意,我设置了比代码中更宽的范围,以避免“端点值不是符号相反”错误。