【问题标题】:Overflow Error when using Newton's Method in Python在 Python 中使用牛顿法时出现溢出错误
【发布时间】:2025-12-06 08:20:18
【问题描述】:

我正在尝试在 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)

【问题讨论】:

标签: python newtons-method


【解决方案1】:

牛顿法是

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

应该是

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

【讨论】:

  • 所以我的解决方案有效吗?如果是这样,你可以accept它。
【解决方案2】:

您的代码中存在错误。应该是

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

【讨论】:

    【解决方案3】:

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

    牛顿算法的一个实际考虑是如何处理接近局部最大值或最小值的 x 值。溢出可能是由除以接近零的值引起的。您可以通过在 x= 行之前添加打印语句来显示这一点——打印 x 和 df(x)。为避免此问题,您可以在除法之前计算df(x),如果它低于某个阈值,则将x 的值向上或向下小幅调整并重试。

    【讨论】: