我创建了此函数:
quadPol <- function(f,lb,rb,tau) {
tetalower <- lb
tetaupper <- rb
tetabest <- 0.5 * (tetalower + tetaupper)
tetanew <- 0.5 * (f(tetaupper) * (tetalower^2 - tetabest^2) + f(tetabest) *
(tetaupper^2 - tetalower^2) + f(tetalower) * (tetabest^2 -
tetaupper^2))/(f(tetaupper) * (tetalower - tetabest)
+ f(tetabest) * (tetaupper - tetalower) + f(tetalower) *
(tetabest - tetaupper))
while (abs(tetaupper - tetalower) >= tau * (abs(tetabest) + abs(tetanew))) {
if (f(tetanew) < f(tetabest)) {
z <- tetanew
tetanew <- tetabest
tetabest <- z
}
if (tetanew < tetabest) {
tetalower <- tetanew
}
else {
tetaupper <- tetanew
}
tetaaponew <- tetanew
tetanew <- 0.5 * (f(tetaupper) * (tetalower^2 - tetabest^2) + f(tetabest) *
(tetaupper^2 - tetalower^2) + f(tetalower) * (tetabest^2 -
tetaupper^2))/(f(tetaupper) * (tetalower - tetabest)
+ f(tetabest) * (tetaupper - tetalower) + f(tetalower) *
(tetabest - tetaupper))
if (tetanew == tetaaponew || tetanew <= tetalower || tetanew >= tetaupper) {
return(tetabest)
}
}
return(tetabest)
}
quadPol(cos,2,4,0.00001)
quadPol(abs,-1,1,0.00001)
使用cosinus的第一个执行效果很好,但是第二个效果不好,它说:
Error in if (tetanew == tetaaponew || tetanew <= tetalower || tetanew >= :
missing value where TRUE/FALSE needed
enter code here
那里的值怎么可能丢失。看了十遍。谢谢。