数值求根: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函数。先生,非常感谢!我不敢相信我没有看到那个计数器!