Я новичок в функции uniroot (), и у меня неоднократно возникали проблемы с конкретными комбинациями входных значений для моей функции, которые я хотел бы решить.
Это сообщение об ошибке, которое я получаю:
Ошибка в uniroot (веселье, нижний = 0,001, верхний = 1e + 08, exteInt = "downX"): не удалось расширить конечные точки интервала для f (нижний) * f (верхний) <= 0 </p>
И вот код, который я запускаю:
genTactFun = function(T1, T2, T3, T4, Tactive_exp = 0) {
force(T1)
force(T2)
force(T3)
force(T4)
force(Tactive_exp)
function(x) {
0.25 * (1 - x ^ 1.2 / (x ^ 1.2 + 20 ^ 1.2)) * T1 +
0.5 * (1 - x ^ 1.2 / (x ^ 1.2 + 150 ^ 1.2)) * T2 +
0.75 * (1 - x ^ 1.2 / (x ^ 1.2 + 1500 ^ 1.2)) * T3 +
1 * (1 - x ^ 1.2 / (x ^ 1.2 + 60000 ^ 1.2)) * T4 -
Tactive_exp
}
}
T1_obs = 1.131538625
T2_obs = 0.1921480684
T3_obs = 0.01067489269
T4_obs = 0.001186099188
fun = genTactFun(T1_obs, T2_obs, T3_obs, T4_obs, 0.3910554)
Res = uniroot(fun, lower = 1e-3, upper = 1e8, extendInt = "downX")$root
Могу ли я получить решение моей проблемы с помощью uniroot ()?Или это означает, что функция uniroot () не может вычислить решение даже при изменении своих настроек?