在Python中使用牛顿法时的溢出错误

2024-03-28 16:53:33 发布

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

我试图用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)

Tags: 方法truedfreturninitdef错误newton
3条回答

你要解的方程是立方的,所以有两个x值,其中df(x)=0。除以零或接近零的值将导致溢出,因此您需要避免这样做。在

牛顿算法的一个实际考虑是如何处理接近局部极大值或极小值的x值。溢出很可能是由除以接近零的值引起的。可以通过在x=行打印x和df(x)之前添加print语句来显示这一点。为了避免这个问题,您可以在除法之前计算df(x),如果它低于某个阈值,将x的值向上或向下移动一小部分,然后再试一次。在

你的代码中有一个bug。应该是的

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

牛顿的方法是

Newton's method

所以x1 = f(x) - (f(x)/df(x))

应该是

x1=x(f(x)/df(x))

相关问题 更多 >