我将从我已经做过的开始。我正在寻找一种通过更改每行的b和s参数来求解方程f的方法, Q和n是常数。我知道 apply() 适用于此类问题,但这似乎对我不起作用。我想找到的变量没有给出唯一的解决方案。
Q = 0.203
n = 0.014
f <- function(y) (Q - (1/n)*(y*b)*((y*b)/(2*y+b))^(2/3)*sqrt(s))
使用这些参数,假设b = 0.5
并s = 0.01
使用 uniroot() 我得到以下信息。这就是我想要的结果。
uniroot(f, lower = 0.000001, upper = 1000000)$root
[1] 0.2328931
(那些较低和较高的值似乎对我很有效)
现在我需要为大型数据集解决此功能。
set.seed(123)
tibble::tibble(b = runif(n = 1000, min = 0.1, max = 1.5),
s = runif(n = 1000, min = 0.001, max = 5)) %>%
dplyr::mutate(yn = uniroot(f, lower = 0.000001, upper = 1000000)$root) %>%
head(5)
这是我想要的输出。
b s yn
1 0.503 1.37 0.0434
2 1.20 2.97 0.0194
3 0.673 0.802 0.0421
4 1.34 4.27 0.0163
5 1.42 4.24 0.0157