Я думаю, что более гибко поместить a
в f1()
в качестве аргумента.
f1 <- function(x, a) ef(x, a)-0.75*ef(2.5, a)-0.25*ef(-1, a)
Затем используйте sapply()
для управления каждым значением в последовательности seq(0.05, 3, 0.05)
:
sapply(seq(0.05, 3, 0.05), function(A){
uniroot(f1, c(-10, 10), tol = 0.0001, extendInt = "yes", a = A)$root
})
# [1] 1.565924900 1.503659791 1.438426382 1.370549617 1.300423929
# [6] 1.228478774 1.155273229 1.081323809 1.007194271 0.933431003 ...
Аргумент extendInt = "yes"
может победить ошибку, когда f1()
не имеет разных знаков на конечных точках.Кроме того, в этом случае я предпочитаю семейство apply
, а не for
.Вы можете прочитать this по причине.
Редактировать: for
решение для петли
a <- seq(0.05, 3, 0.05)
root <- numeric()
for(i in 1:length(a)){
root[i] <- uniroot(f1, c(-10, 10), tol = 0.0001, extendInt = "yes", a = a[i])$root
}
В концецикл, переменная root
будет хранить все корни.Вы можете проверить, равны ли выходы двух решений.