NewtonRaphson根查找方法的Python溢出错误

2024-06-12 18:58:02 发布

您现在位置:Python中文网/ 问答频道 /正文

x=float(raw_input('Enter a number to show its square root'))
precise = 0.01
g=x/2.0
while abs(g**2-x)>=precise:
   g=g-(g**2-x)/2*g
print g

这是一个基于python代码的Newton-Raphson寻根方法。当我在树冠中运行这个,我可以找到1的根。但是当我输入25来查找根时,它说OverflowError: (34, 'Result too large') 指向while abs(g**2-x)>=precise:行。感谢帮助


Tags: to代码numberinputrawshowrootabs
2条回答

你确定你的算法吗。将您的print g移到while循环中,您将看到{}变得非常大,非常快。那你就是想摆平它。你的分母应该是2*g?如果是这样的话,你应该在它周围加上括号,就像(2*g),因为你要除以2,然后再乘以g。可能不是你想做的。在

当使用Newton-Raphson方法求根时,我总是发现使用标准代码来执行此算法并在必要时指定它是有用的。也许你会发现这个也很有用。在

ftn1 <- function(x){
  fx <- log(x) -exp(-x)
  dfx <- 1/x + exp(-x)
  return(c(fx,dfx))
}


newtonraphson <- function(ftn, x0, tol = 1e-9, max.iter = 100) {

  x <- x0
  fx <- ftn(x)
  iter <- 0
  while ((abs(fx[1]) > tol) && (iter < max.iter)) {
    x <- x - fx[1]/fx[2]
    fx <- ftn(x)
    iter <- iter + 1
    cat("At iteration", iter, "value of x is:", x, "\n")
  }
  if (abs(fx[1]) > tol) {
    cat("Algorithm failed to converge\n")
    return(NULL)
  } else {
    cat("Algorithm converged\n")
    return(x)
  }
}
newtonraphson(ftn1, 0.1)

相关问题 更多 >