Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数值求根:R中的二分法_R_Function_Root_Bisection - Fatal编程技术网

数值求根:R中的二分法

数值求根:R中的二分法,r,function,root,bisection,R,Function,Root,Bisection,我需要使用二分法进行数值根查找,并打印每次迭代中涉及的变量值,直到它达到某个值 bisection <- function(x1, x2){ l <- vector(mode="integer") l[1] <- x1 r <- vector(mode="integer") r[1] <- x2 m <- vector(mode="integer") gl <-

我需要使用二分法进行数值根查找,并打印每次迭代中涉及的变量值,直到它达到某个值

 bisection <- function(x1, x2){
  l <- vector(mode="integer")
    l[1] <- x1
  r <- vector(mode="integer")
    r[1] <- x2
  m <- vector(mode="integer")
  gl <- vector(mode="integer")
  gr <- vector(mode="integer")
  gm <- vector(mode="integer")
  
  root <- 5e-8  
  i <- 1
  repeat{
    m[i] <- (l[i]+r[i])/2
    gl[i] <- gx(l[i])
    gr[i] <- gx(r[i])
    gm[i] <- gx(m[i])
        
    if (isTRUE(abs(gm[i]) > root) && isTRUE(gl[i]*gm[i] < 0)){
      l[i+1] <- l[i]
      r[i+1] <- m[i]
    }
    if (isTRUE(gm[i] > root) && isTRUE(gr[i]*gm[i] < 0)){
      l[i+1] <- m[i]
      r[i+1] <- r[i]
    }
    else if (isTRUE(abs(gm[i]) <= root)){
      j <- c(0:(length(gm)-1))
      df <- data.frame(j, l,r,m,gl,gr,gm)
      names(df) <- c("i", "xl","xr","xm", "gxl","gxr", "gxm")
      print(df)
      break
    }
  }
}

bisection您的代码有两个问题:

  • 在第二个
    if
    语句中,您忘记了
    abs
    ,它必须是
    if(isTRUE(abs(gm[i])>root)
  • 您忘记增加计数器的值,即
    i
    仍为1
  • 此外,我对您的代码做了一个小的调整。而不是先使用if-else-if检查是否找到根,如果没有,则使用if-else更新l和r。这样更易于阅读和理解

    二等分23 22 1.414214 1.414214 1.414214-6.845708e-08 2.687177e-07 1.001303e-07
    #>24 23 1.414214 1.414214 1.414214-6.845708e-08 1.001303e-07 1.583661e-08
    
    什么是gx
    ?它在您的代码中用作函数,但在这里没有定义。如果不知道这个函数是什么,很难知道任何人可以在这里提供什么帮助。@AllanCameron嗨!对不起,我忘了!我编辑后在我的帖子中包含了gx函数。先生,非常感谢!我不敢相信我没有看到那个计数器!