如果条件中缺少值

时间:2018-11-29 22:29:40

标签: if-statement logic

我创建了此函数:

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

那里的值怎么可能丢失。看了十遍。谢谢。

0 个答案:

没有答案