1

我在 R 中为 Bisection 方法编写了这段代码

Bisection <- function(xL, xR, eps, max_iter){
iter <- 1
while ((abs(xR-xL) > eps) && (iter > max_iter)){
  xM <- (xL+xR)/2
  if (f(xM)*f(xR) < 0){
    xL <- xM
  }else{
    xR <- xM
  }
  iter <- iter +1
}

形成一些你可以自己填写的函数f(x)。但是,我认为它无法正常工作。有人看错了吗?

4

1 回答 1

1

我认为您的代码很好,除了一些小错误。(iter > max_iter) 当然应该是 (iter < max_iter)。此外,您还没有指定函数 f()。有关工作算法的示例,请参见下面的代码。一旦可以使用 f.acc 函数找到一个 xL 和 xR,如果该函数是连续的,则它之间必须有一个根。

f.acc <- function(x){
  1+1/x-log(x)
}
xL<- 0.5
xR <- 6
eps <- 1e-6
max_iter <- 100
iter <- 1
  while ((abs(xR-xL) > eps) && (iter < max_iter)){
    xM <- (xL+xR)/2
    if (f.acc(xM)*f.acc(xR) < 0){
      xL <- xM
    }else{
      xR <- xM
    }
    iter <- iter +1
    cat("At iteration", iter, "value of x.mid is:", x.mid, "\n")
  }
于 2019-01-23T08:30:24.217 回答