当前位置: 首页 > news >正文

牛顿法:用泰勒级数求解平方根的秘籍

目录

    • 一、引言
    • 二、牛顿法的理论基础——泰勒级数
    • 三、牛顿法的原理与推导
      • 3.1 原理概述
      • 3.2 推导过程
      • 3.3 几何解释
    • 四、牛顿法的应用场景
      • 4.1 数值计算
      • 4.2 优化问题
    • 五、牛顿法求平方根的具体案例
      • 5.1 原理推导
      • 5.2 具体步骤
      • 5.3 代码实现(Python)
      • 5.4 示例计算过程
    • 六、牛顿法的优缺点
      • 6.1 优点
      • 6.2 缺点
    • 七、结论


一、引言

在科学计算与工程应用中,求解方程的根以及优化问题是极为常见的任务。牛顿法(Newton’s method),也被称为牛顿 - 拉夫逊方法(Newton - Raphson method),是一种强大且高效的迭代算法,可用于解决此类问题。本文将从泰勒级数出发,详细阐述牛顿法的原理、推导过程,并结合求平方根的具体案例,展示其在实际问题中的应用,同时给出相应的 Python 代码实现。

二、牛顿法的理论基础——泰勒级数

泰勒级数是一个用函数在某点的信息描述其附近取值的重要数学工具。若函数 f ( x ) f(x) f(x) 在包含 x 0 x_0 x0 的开区间内具有直到 n + 1 n + 1 n+1 阶导数,那么它的 n n n 阶泰勒展开式为:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( x ) f(x)=f(x_0)+f^{\prime}(x_0)(x - x_0)+\frac{f^{\prime\prime}(x_0)}{2!}(x - x_0)^2+\cdots+\frac{f^{(n)}(x_0)}{n!}(x - x_0)^n+R_n(x) f(x)=f(x0)+f(x0)(xx0)+2!f′′(x0)(xx0)2++n!f(n)(x0)(xx0)n+Rn(x)
其中 R n ( x ) R_n(x) Rn(x) 为余项,表示用 n n n 阶泰勒多项式近似 f ( x ) f(x) f(x) 时产生的误差。当 n = 1 n = 1 n=1 时,得到一阶泰勒展开式,也就是线性近似:
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)\approx f(x_0)+f^{\prime}(x_0)(x - x_0) f(x)f(x0)+f(x0)(xx0)
牛顿法正是基于一阶泰勒展开式来构建其迭代过程的。

三、牛顿法的原理与推导

3.1 原理概述

牛顿法主要用于求解方程 f ( x ) = 0 f(x)=0 f(x)=0 的根。其核心思想是利用函数的一阶泰勒展开式,通过不断迭代来逐步逼近方程的根。

3.2 推导过程

已知方程 f ( x ) = 0 f(x)=0 f(x)=0,给定一个初始近似值 x 0 x_0 x0。根据一阶泰勒展开式,函数 f ( x ) f(x) f(x) x 0 x_0 x0 附近可近似表示为:
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)\approx f(x_0)+f^{\prime}(x_0)(x - x_0) f(x)f(x0)+f(x0)(xx0)
f ( x ) = 0 f(x)=0 f(x)=0,则有:
0 ≈ f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) 0\approx f(x_0)+f^{\prime}(x_0)(x - x_0) 0f(x0)+f(x0)(xx0)
解这个关于 x x x 的方程:
f ′ ( x 0 ) ( x − x 0 ) ≈ − f ( x 0 ) f^{\prime}(x_0)(x - x_0)\approx - f(x_0) f(x0)(xx0)f(x0)
x ≈ x 0 − f ( x 0 ) f ′ ( x 0 ) x\approx x_0-\frac{f(x_0)}{f^{\prime}(x_0)} xx0f(x0)f(x0)
将这个近似得到的 x x x 作为下一个近似值 x 1 x_1 x1,即:
x 1 = x 0 − f ( x 0 ) f ′ ( x 0 ) x_1 = x_0-\frac{f(x_0)}{f^{\prime}(x_0)} x1=x0f(x0)f(x0)
重复此过程,可得到迭代序列 { x n } \{x_n\} {xn},其迭代公式为:
x n + 1 = x n − f ( x n ) f ′ ( x n ) ( n = 0 , 1 , 2 , ⋯   ) x_{n + 1}=x_n-\frac{f(x_n)}{f^{\prime}(x_n)}\quad(n = 0,1,2,\cdots) xn+1=xnf(xn)f(xn)(n=0,1,2,)

3.3 几何解释

在这里插入图片描述
从几何角度看,牛顿法的迭代过程是不断用函数 y = f ( x ) y = f(x) y=f(x) 在当前点 ( x n , f ( x n ) ) (x_n,f(x_n)) (xn,f(xn)) 处的切线与 x x x 轴的交点作为下一个近似点 x n + 1 x_{n + 1} xn+1。函数 y = f ( x ) y = f(x) y=f(x) 在点 ( x n , f ( x n ) ) (x_n,f(x_n)) (xn,f(xn)) 处的切线方程为 y − f ( x n ) = f ′ ( x n ) ( x − x n ) y - f(x_n)=f^{\prime}(x_n)(x - x_n) yf(xn)=f(xn)(xxn) y = 0 y = 0 y=0,解出 x x x 的值就是 x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n + 1}=x_n-\frac{f(x_n)}{f^{\prime}(x_n)} xn+1=xnf(xn)f(xn)

四、牛顿法的应用场景

4.1 数值计算

在科学计算和工程领域,经常需要求解各种方程的根,牛顿法是一种高效的迭代算法,能够快速收敛到方程的根。例如,在计算物理、化学等领域中求解非线性方程。

4.2 优化问题

牛顿法也可用于求解函数的极值问题。对于一个可微函数 f ( x ) f(x) f(x),其极值点满足 f ′ ( x ) = 0 f^{\prime}(x)=0 f(x)=0,我们可以将牛顿法应用到 g ( x ) = f ′ ( x ) g(x)=f^{\prime}(x) g(x)=f(x) 上,通过迭代求解 g ( x ) = 0 g(x)=0 g(x)=0 的根,从而找到 f ( x ) f(x) f(x) 的极值点。不过在优化问题中,通常使用的是牛顿法的改进版本,如拟牛顿法等。

五、牛顿法求平方根的具体案例

5.1 原理推导

假设我们要求一个非负实数 a a a 的平方根,即找到一个数 x x x 使得 x 2 = a x^2 = a x2=a,可将其转化为求解方程 f ( x ) = x 2 − a = 0 f(x)=x^{2}-a = 0 f(x)=x2a=0 的正根。对 f ( x ) = x 2 − a f(x)=x^{2}-a f(x)=x2a 求导,根据求导公式 ( X n ) ′ = n X n − 1 (X^n)^\prime = nX^{n - 1} (Xn)=nXn1,可得 f ′ ( x ) = 2 x f^{\prime}(x)=2x f(x)=2x。将 f ( x ) f(x) f(x) f ′ ( x ) f^{\prime}(x) f(x) 代入牛顿法的迭代公式中,得到:
x n + 1 = x n − x n 2 − a 2 x n = 2 x n 2 − ( x n 2 − a ) 2 x n = x n 2 + a 2 x n = 1 2 ( x n + a x n ) x_{n + 1}=x_n-\frac{x_n^{2}-a}{2x_n}=\frac{2x_n^{2}-(x_n^{2}-a)}{2x_n}=\frac{x_n^{2}+a}{2x_n}=\frac{1}{2}(x_n+\frac{a}{x_n}) xn+1=xn2xnxn2a=2xn2xn2(xn2a)=2xnxn2+a=21(xn+xna)

5.2 具体步骤

  1. 选择初始值:选择一个初始的近似值 x 0 x_0 x0,通常可选择 x 0 = a x_0 = a x0=a
  2. 迭代计算:使用迭代公式 x n + 1 = 1 2 ( x n + a x n ) x_{n + 1}=\frac{1}{2}(x_n+\frac{a}{x_n}) xn+1=21(xn+xna) 进行迭代计算,直到满足收敛条件,如相邻两次迭代结果的差值小于某个预先设定的阈值 ϵ \epsilon ϵ,即 ∣ x n + 1 − x n ∣ < ϵ |x_{n + 1}-x_n|<\epsilon xn+1xn<ϵ
  3. 返回结果:当满足收敛条件时,返回最终的迭代结果 x n + 1 x_{n + 1} xn+1,它就是 a a a 的平方根的近似值。

5.3 代码实现(Python)

def sqrt_newton(a, tolerance=1e-6, max_iterations=100):
    # 选择初始值
    x = a
    for i in range(max_iterations):
        # 计算下一个迭代值
        next_x = 0.5 * (x + a / x)
        # 判断是否满足收敛条件
        if abs(next_x - x) < tolerance:
            return next_x
        # 更新 x 的值
        x = next_x
    # 如果达到最大迭代次数仍未收敛,抛出异常
    raise ValueError("达到最大迭代次数,未收敛。")

# 测试
a = 16
result = sqrt_newton(a)
print(f"{a} 的平方根近似值为: {result}")

5.4 示例计算过程

假设要求 16 \sqrt{16} 16 的值:

  • 初始值:选择 x 0 = 16 x_0 = 16 x0=16
  • 第一次迭代
    • 根据迭代公式 x 1 = 1 2 ( x 0 + 16 x 0 ) x_{1}=\frac{1}{2}(x_0+\frac{16}{x_0}) x1=21(x0+x016),将 x 0 = 16 x_0 = 16 x0=16 代入可得:
      • x 1 = 1 2 ( 16 + 16 16 ) = 1 2 ( 16 + 1 ) = 8.5 x_{1}=\frac{1}{2}(16+\frac{16}{16})=\frac{1}{2}(16 + 1)=8.5 x1=21(16+1616)=21(16+1)=8.5
  • 第二次迭代
    • x 1 = 8.5 x_1 = 8.5 x1=8.5 代入迭代公式 x 2 = 1 2 ( x 1 + 16 x 1 ) x_{2}=\frac{1}{2}(x_1+\frac{16}{x_1}) x2=21(x1+x116) 可得:
      • x 2 = 1 2 ( 8.5 + 16 8.5 ) ≈ 1 2 ( 8.5 + 1.8824 ) = 5.1912 x_{2}=\frac{1}{2}(8.5+\frac{16}{8.5})\approx\frac{1}{2}(8.5 + 1.8824)=5.1912 x2=21(8.5+8.516)21(8.5+1.8824)=5.1912
  • 第三次迭代
    • x 2 = 5.1912 x_2 = 5.1912 x2=5.1912 代入迭代公式 x 3 = 1 2 ( x 2 + 16 x 2 ) x_{3}=\frac{1}{2}(x_2+\frac{16}{x_2}) x3=21(x2+x216) 可得:
      • x 3 = 1 2 ( 5.1912 + 16 5.1912 ) ≈ 1 2 ( 5.1912 + 3.0821 ) = 4.1367 x_{3}=\frac{1}{2}(5.1912+\frac{16}{5.1912})\approx\frac{1}{2}(5.1912+3.0821)=4.1367 x3=21(5.1912+5.191216)21(5.1912+3.0821)=4.1367
  • 第四次迭代
    • x 3 = 4.1367 x_3 = 4.1367 x3=4.1367 代入迭代公式 x 4 = 1 2 ( x 3 + 16 x 3 ) x_{4}=\frac{1}{2}(x_3+\frac{16}{x_3}) x4=21(x3+x316) 可得:
      • x 4 = 1 2 ( 4.1367 + 16 4.1367 ) ≈ 1 2 ( 4.1367 + 3.8678 ) = 4.0023 x_{4}=\frac{1}{2}(4.1367+\frac{16}{4.1367})\approx\frac{1}{2}(4.1367 + 3.8678)=4.0023 x4=21(4.1367+4.136716)21(4.1367+3.8678)=4.0023
  • 第五次迭代
    • x 4 = 4.0023 x_4 = 4.0023 x4=4.0023 代入迭代公式 x 5 = 1 2 ( x 4 + 16 x 4 ) x_{5}=\frac{1}{2}(x_4+\frac{16}{x_4}) x5=21(x4+x416) 可得:
      • x 5 = 1 2 ( 4.0023 + 16 4.0023 ) ≈ 1 2 ( 4.0023 + 3.9977 ) = 4 x_{5}=\frac{1}{2}(4.0023+\frac{16}{4.0023})\approx\frac{1}{2}(4.0023+3.9977)=4 x5=21(4.0023+4.002316)21(4.0023+3.9977)=4

经过几次迭代后,结果已非常接近 16 = 4 \sqrt{16}=4 16 =4,可见牛顿法的收敛速度很快。

六、牛顿法的优缺点

6.1 优点

  • 收敛速度快:在满足一定条件下,牛顿法具有二阶收敛速度,即迭代次数增加时,近似解与真实解的误差平方收敛。
  • 可处理非线性问题:对于非线性方程和优化问题,牛顿法能够有效地求解。

6.2 缺点

  • 需要计算导数:牛顿法的迭代公式中需要计算函数的导数 f ′ ( x ) f^{\prime}(x) f(x),对于一些复杂的函数,导数的计算可能比较困难。
  • 初始值敏感:牛顿法的收敛性依赖于初始值的选择,如果初始值选择不当,可能会导致迭代不收敛或者收敛到错误的根。

七、结论

牛顿法作为一种强大的迭代算法,在求解方程的根和优化问题中具有重要的应用价值。通过基于泰勒级数的推导,我们得到了牛顿法的迭代公式,并通过求平方根的具体案例展示了其实际应用。虽然牛顿法存在一些缺点,如需要计算导数和对初始值敏感,但在许多情况下,它仍然是一种高效且实用的方法。在实际应用中,我们可以根据具体问题的特点,选择合适的初始值和改进方法,以充分发挥牛顿法的优势。

相关文章:

  • 004 python变量
  • OpenVAS 工具使用全攻略
  • java练习(24)
  • 《解锁自然语言处理:让公众正确拥抱AI语言魔法》
  • LabVIEW中的icon.llb 库
  • 【华为OD机考】2024E+D卷真题【完全原创题解 详细考点分类 不断更新题目 六种主流语言Py+Java+Cpp+C+Js+Go】
  • Transformer(3): Add Norm
  • React VS Vue
  • 【R语言】方差分析
  • 什么是大模型以及如何部署大模型
  • 基于大数据的网购球鞋分析系统的设计与实现
  • CSS Grid 网格布局,以及 Flexbox 弹性盒布局模型,它们的适用场景是什么?
  • 【已解决】TypeError: AsyncConnectionPool.__init__(), new install bug, httpx==0.24.1
  • TLS和SSL的区别
  • GRN前沿:scGeneRAI:基于可解释AI的单细胞基因调控网络预测
  • C进阶 数据的存储
  • Docker高级篇
  • 无限使用,自动解锁全部版!
  • 基于角色访问控制的UML 表示04
  • 多模态对齐损失设计全解析:CLIP模型实现图文语义空间统一的原理详解与实战指南
  • 一周人物|何子彦任职光州双年展,陈意心讲述五原路往事
  • 多省份晒出“五一”旅游“成绩单”:北京游客接待量、旅游消费创历史新高
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南院展出
  • 央视热评:从银幕到生活,好故事如何“撬动”大市场
  • 消失的日本中年劳动者:任何人都有与社会脱节的风险
  • 当Z世代与传统戏曲在春日校园相遇