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

1 投票
3 回答
775 浏览
提问于 2025-04-18 06:11

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

3 个回答

0

你正在解决的方程是三次方程,所以会有两个x的值使得df(x)=0。除以零或者接近零的值会导致溢出,所以你需要避免这样做。

使用牛顿算法时,有一个实际需要考虑的事情,就是如何处理接近局部最大值或最小值的x值。溢出很可能是因为除以了接近零的东西。你可以通过在x=这一行之前加一个打印语句来查看x和df(x)的值。为了避免这个问题,你可以在除之前先计算df(x),如果它低于某个阈值,就稍微调整一下x的值,再试一次。

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
4

牛顿法是一种用于寻找方程根的数学方法。

牛顿法

所以这里的公式应该是

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

撰写回答