使用牛顿法求解立方根

题图

前些天有位群友问了这个问题:不用库求解上图中的NH3。

pow()函数是C语言中的库函数,用于求幂。观察可知,b约为2.35,差不多就是 2 1 3 2\frac{1}{3} 231,在精度要求不那么特别高的情况下,可以用 a ∗ a ∗ a 3 a * a * \sqrt[3]{a} aa3a 来得到近似值,那问题就变成了求 a 的立方根。

牛顿法(Newton’s method)是一种用于求解方程根的迭代算法。它可以用于许多数学问题,包括计算立方根。本文将详细讲解如何使用牛顿法求解立方根,并通过示例进行说明。

牛顿法简介

牛顿法基于泰勒级数展开,通过迭代的方法逐步逼近函数的根。对于一个函数 f ( x ) f(x) f(x),假设我们已经有了一个初始猜测 x 0 x_0 x0,牛顿法的迭代公式为:

x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)} xn+1=xnf(xn)f(xn)

这里, f ′ ( x ) f'(x) f(x)是函数 f ( x ) f(x) f(x)的导数。

立方根的定义

我们想要找出一个数 a a a的立方根 a 3 \sqrt[3]{a} 3a ,这可以转化为求解方程:

f ( x ) = x 3 − a = 0 f(x) = x^3 - a = 0 f(x)=x3a=0

对这个方程求导,可以得到:

f ′ ( x ) = 3 x 2 f'(x) = 3x^2 f(x)=3x2

牛顿法求解立方根的步骤

结合上述信息,我们可以将牛顿法应用于求解立方根,具体步骤如下:

  1. 选择初始值 x 0 x_0 x0:选择一个接近 a 3 \sqrt[3]{a} 3a 的初始猜测值。
  2. 迭代计算:使用牛顿法公式进行迭代,直到满足精度要求:
    x n + 1 = x n − x n 3 − a 3 x n 2 x_{n+1} = x_n - \frac{x_n^3 - a}{3x_n^2} xn+1=xn3xn2xn3a
  3. 停止条件:当 ∣ x n + 1 − x n ∣ < ϵ |x_{n+1} - x_n| < \epsilon xn+1xn<ϵ时,停止迭代(其中 ϵ \epsilon ϵ是设定的精度)。

示例:求解 27 3 \sqrt[3]{27} 327

我们来演示如何使用牛顿法求解 27 3 \sqrt[3]{27} 327

  1. 选择初始值
    我们可以选择 x 0 = 9 x_0 = 9 x0=9 作为初始值。

  2. 迭代过程
    进行迭代计算,直至达到所需精度。

    • 第一次迭代:
      x 1 = 9 − 9 3 − 27 3 × 9 2 = 9 − 729 − 27 243 = 9 − 702 243 ≈ 6.111 x_1 = 9 - \frac{9^3 - 27}{3 \times 9^2} = 9 - \frac{729 - 27}{243} = 9 - \frac{702}{243} \approx 6.111 x1=93×929327=924372927=92437026.111
    • 第二次迭代:
      x 2 = 6.111 − 6.11 1 3 − 27 3 × 6.11 1 2 ≈ 4.297 x_2 = 6.111 - \frac{6.111^3 - 27}{3 \times 6.111^2} \approx 4.297 x2=6.1113×6.11126.1113274.297
    • 第三次迭代:
      x 3 = 4.297 − 4.29 7 3 − 27 3 × 4.29 7 2 ≈ 3.419 x_3 = 4.297 - \frac{4.297^3 - 27}{3 \times 4.297^2} \approx 3.419 x3=4.2973×4.29724.2973273.419
    • 第四次迭代:
      x 4 = 3.419 − 3.41 9 3 − 27 3 × 3.41 9 2 ≈ 3.048 x_4 = 3.419 - \frac{3.419^3 - 27}{3 \times 3.419^2} \approx 3.048 x4=3.4193×3.41923.4193273.048
    • 第五次迭代:
      x 5 = 3.048 − 3.04 8 3 − 27 3 × 3.04 8 2 ≈ 3.001 x_5 = 3.048 - \frac{3.048^3 - 27}{3 \times 3.048^2} \approx 3.001 x5=3.0483×3.04823.0483273.001
    • 第六次迭代:
      x 6 = 3.001 − 3.00 1 3 − 27 3 × 3.00 1 2 ≈ 3.000 x_6 = 3.001 - \frac{3.001^3 - 27}{3 \times 3.001^2} \approx 3.000 x6=3.0013×3.00123.0013273.000

    经过几次迭代后,我们可以看到结果逐渐逼近 3,满足精度要求。

代码实现

下面是用 Python 实现牛顿法求解立方根的代码示例:

def cubic_root(a, epsilon=1e-7):
    # 初始猜测值
    x_n = a / 3.0  # 可以选择 a 的一个近似值
    while True:
        x_n1 = x_n - (x_n**3 - a) / (3 * x_n**2)  # 牛顿法迭代
        if abs(x_n1 - x_n) < epsilon:  # 停止条件
            break
        x_n = x_n1
    return x_n

# 测试
result = cubic_root(27)
print(f"立方根 27 的结果是:{result}")

NewtonsMethod

总结

牛顿法是一种高效的求解方程根的方法,尤其适合用于计算立方根。通过合理选择初始值和迭代公式,我们可以快速得到精确的结果。希望本文对你理解牛顿法求解立方根有所帮助!

有什么更好的方法,欢迎在下方留言!

公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值