📌  相关文章
📜  数的第N个根(1)

📅  最后修改于: 2023-12-03 15:26:10.267000             🧑  作者: Mango

数的第N个根

在数学中,一个数的第N个根是指一个数的N次方根,也就是说,找到一个数的第N个根就是求这个数的N次方根。

求解方法
牛顿迭代法

牛顿迭代法是一种数值方法,可以用来寻找方程 $f(x) = 0$ 的解。对于第N个根来说,我们可以将其写成 $f(x) = x^N - a$ 的形式,其中 $a$ 是我们要求的根的值。我们可以将 $f(x)$ 在 $x_0$ 处进行泰勒展开:

$$f(x) = f(x_0) + f'(x_0)(x-x_0) + \frac{1}{2}f''(x_0)(x-x_0)^2 + \cdots$$

由于 $f(x_0) = x_0^N - a$,$f'(x_0) = Nx_0^{N-1}$,代入上式可得:

$$x - x_0 = -\frac{f(x_0)}{f'(x_0)} = -\frac{x_0^N - a}{Nx_0^{N-1}}$$

因此,我们可以利用以上公式进行迭代计算。每次迭代将 $x$ 更新为 $x - \frac{f(x)}{f'(x)}$,直到误差小到一定程度。

二分法

二分法是一种简单的数值方法,可以用来寻找单峰函数的极值点,对于第N个根而言,我们可以将其等价于求解 $f(x) = x^N - a = 0$。根据函数值的符号可以判断数值解在函数图像的哪一侧,因此我们可以根据中值定理,每次将区间减半,取新的区间的中心点作为下一次迭代的起点,直到误差小到一定程度。

牛顿-Raphson法

牛顿-Raphson法是寻找方程 $f(x) = 0$ 的另一种数值方法。对于第N个根,我们可以将其写成 $f(x) = x^N - a$ 的形式,并使用泰勒展开式:

$$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} = x_n - \frac{x_n^N-a}{Nx_n^{N-1}}$$

代码实现
牛顿迭代法
def nth_root(a, n, eps=1e-8):
    x = a
    while abs(x ** n - a) > eps:
        x -= (x ** n - a) / (n * x ** (n - 1))
    return x
二分法
def nth_root(a, n, eps=1e-8):
    left, right = 0, a
    while abs(left - right) > eps:
        mid = (left + right) / 2
        if mid ** n - a > 0:
            right = mid
        else:
            left = mid
    return mid
牛顿-Raphson法
def nth_root(a, n, eps=1e-8):
    x = a
    while abs(x ** n - a) > eps:
        x -= (x ** n - a) / (n * x ** (n - 1))
    return x