我试图用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)
你要解的方程是立方的,所以有两个x值,其中df(x)=0。除以零或接近零的值将导致溢出,因此您需要避免这样做。在
牛顿算法的一个实际考虑是如何处理接近局部极大值或极小值的x值。溢出很可能是由除以接近零的值引起的。可以通过在
x=
行打印x和df(x)之前添加print语句来显示这一点。为了避免这个问题,您可以在除法之前计算df(x)
,如果它低于某个阈值,将x的值向上或向下移动一小部分,然后再试一次。在你的代码中有一个bug。应该是的
牛顿的方法是
所以
x1 = f(x) - (f(x)/df(x))
应该是
x1=x(f(x)/df(x))
相关问题 更多 >
编程相关推荐