我试图在Python中执行牛顿方法来解决问题。我已经按照一些示例的方法,但我收到了溢出错误。你知道是什么原因造成的吗?
def f1(x):
return x**3-(2.*x)-5.
def df1(x):
return (3.*x**2)-2.
def Newton(f, df, x, tol):
while True:
x1 = f(x) - (f(x)/df(x))
t = abs(x1-x)
if t < tol:
break
x = x1
return x
init = 2
print Newton(f1,df1,init,0.000001)
答案 0 :(得分:4)
牛顿的方法是
所以x1 = f(x) - (f(x)/df(x))
应该是
x1 = x - (f(x)/ df(x))
答案 1 :(得分:1)
您的代码中存在错误。它应该是
def Newton(f, df, x, tol):
while True:
x1 = x - (f(x)/df(x)) # it was f(x) - (f(x)/df(x))
t = abs(x1-x)
if t < tol:
break
x = x1
return x
答案 2 :(得分:0)
您要解决的等式是立方,因此有两个x值,其中df(x)= 0。除以零或接近零的值将导致溢出,因此您需要避免这样做。
牛顿算法的一个实际考虑因素是如何处理局部最大值或最小值附近的x值。溢出可能是由接近零的东西引起的。您可以通过在x=
行之前添加print语句来显示此信息 - print x和df(x)。要避免此问题,您可以在分割前计算df(x)
,如果它低于某个阈值,请将x的值向上或向下压缩少量,然后重试。