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

news2025/4/17 11:57:04

目录

    • 一、引言
    • 二、牛顿法的理论基础——泰勒级数
    • 三、牛顿法的原理与推导
      • 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),对于一些复杂的函数,导数的计算可能比较困难。
  • 初始值敏感:牛顿法的收敛性依赖于初始值的选择,如果初始值选择不当,可能会导致迭代不收敛或者收敛到错误的根。

七、结论

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2301911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 打开摄像头 并显示在UI

需求: 打开相机并显示在UI上 效果: 注意&#xff1a; 电脑可能有多个摄像头&#xff0c;注意名称 代码: using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endifname…

RK Android11 WiFi模组 AIC8800 驱动移植流程

RK Android WiFi模组 AIC8800 驱动移植流程 作者&#xff1a;Witheart更新时间&#xff1a;20250220 概要&#xff1a;本文介绍了基于 AIC8800D40 芯片的 WiFi6 模组 BL-M8800DS2-40 在 RK3568 平台上的驱动移植流程。主要涉及环境搭建、驱动代码分析、设备树修改、驱动编译配…

Windows PyCharm的python项目移动存储位置后需要做的变更

项目使用的venv虚拟环境&#xff0c;因此项目移动存储位置后需要重新配置python解释器的位置&#xff0c;否则无法识别&#xff0c;若非虚拟环境中运行&#xff0c;则直接移动后打开即可&#xff0c;无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition)&#xff0c;其…

浅棕色人像花卉照片Lr调色,手机滤镜PS+Lightroom预设下载!

调色介绍 提供一系列用于处理浅棕色调人像与花卉照片的后期预设资源&#xff0c;这些预设兼容手机滤镜的 PS 和 Lightroom 软件。其主要作用是令照片达成浅棕色的色调效果&#xff0c;帮助使用者快捷地对人像和花卉照片进行调色处理&#xff0c;无需繁复手动调节参数&#xff0…

POI pptx转图片

前言 ppt页面预览一直是个问题&#xff0c;office本身虽然有预览功能但是收费&#xff0c;一些开源的项目的预览又不太好用&#xff0c;例如开源的&#xff1a;kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老&#xff0c;使用版本较旧 <dependency><gro…

全志A133 android10 适配SLM770A 4G模块

一&#xff0c;模块基本信息 1.官方介绍 SLM770A是美格智能最新推出的一款LTE Cat.4无线通讯模组&#xff0c;最大支持下行速率150Mbps及上行速率50Mbps。同时向下兼容现有的3G和2G网络&#xff0c;以确保即使在偏远地区也可以进行网络通信。 SLM770A模组支持分集接收和MIMO技…

DP-最长上升子序列

题面&#xff1a; 样例&#xff1a; 思路&#xff1a; 遇到动态规划问题&#xff0c;我们照旧思考两部分&#xff0c;状态表示以及状态计算。这里我们f[N]表示以第i个数结尾的上升子序列的最大值。我们将f[N]划分为若干个部分&#xff0c;因为我们要用到递推思路想办法用前面的…

【C++第二十章】红黑树

【C第二十章】红黑树 红黑树介绍&#x1f9d0; 红黑树是一种自平衡的二叉搜索树&#xff0c;通过颜色标记和特定规则保持树的平衡性&#xff0c;从而在动态插入、删除等操作中维持较高的效率。它的最长路径不会超过最短路径的两倍&#xff0c;它的查找效率比AVL树更慢(对于CPU…

如何修改Windows系统Ollama模型存储位置

默认情况下&#xff0c;Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中&#xff0c;这会占用大量 C 盘空间&#xff0c;增加C盘“爆红”的几率。所以&#xff0c;我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家

近期&#xff0c;一项关于OpenAI ChatGPT在心理治疗领域的研究更是引起了广泛关注。据报道&#xff0c;ChatGPT已经成功通过了治疗师领域的图灵测试&#xff0c;其表现甚至在某些方面超越了人类治疗师&#xff0c;尤其是在展现同理心方面&#xff0c;这一发现无疑为AI在心理健康…

Netflix Ribbon:云端负载均衡利器

Netflix Ribbon&#xff1a;云端负载均衡利器 ribbon Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support. 项目地…

【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

文章目录 一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后返回处理 二、悬浮窗 前台服务和通知1、前台服务 启动 悬浮窗 的必要性① 保持悬浮窗存活② 悬浮窗的要求③ 悬浮窗版本兼容 2、其它类型服务简介① 前台服务…

Python高级语法之jsonpathBeautifulSoup解析器

目录&#xff1a; 1、jsonPath的使用2、使用jsonpath解析淘票票网页3、BeautifulSoup解析器的使用4、BeautifulSoup层级选择器的使用 1、jsonPath的使用 2、使用jsonpath解析淘票票网页 3、BeautifulSoup解析器的使用 4、BeautifulSoup层级选择器的使用

工业安卓主板在智慧粮仓设备中发挥着至关重要的作用

工业安卓主板在智慧粮仓设备中发挥着至关重要的作用。以下是关于其作用的具体分析&#xff1a; 一、提供稳定可靠的运行平台 智慧粮仓设备需要长时间稳定运行&#xff0c;以实现对粮食储存环境的实时监测和精准控制。工业安卓主板采用高性能的处理器和大容量的存储空间&#…

ECMAScript6----var、let、const

ECMAScript6----var、let、const 1.var2.let3.const 1.var &#xff08;1&#xff09;在相同作用域下可重复声明 var a 20 var a 30 console.log(a) // 30&#xff08;2&#xff09;存在变量提升 console.log(a) // undefined var a 20&#xff08;3&#xff09;可修改声…

【ST-LINK未能被keil识别STM32 ST-LINK Utility出现“Can not connect to target】

针对各种品牌32MCU boot0拉高&#xff0c;boot1拉低进入系统存储器&#xff0c;对Flash先擦除在下载 针对STM32f103 通过32复位和stlink Utilit解决 https://blog.csdn.net/Donglutao/article/details/129086960 https://www.bilibili.com/video/BV1F94y1g7be/?spm_id_…

Android Http-server 本地 web 服务

时间&#xff1a;2025年2月16日 地点&#xff1a;深圳.前海湾 需求 我们都知道 webview 可加载 URI&#xff0c;他有自己的协议 scheme&#xff1a; content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的&#xff0c;如果你想直接…

python实践-实现实时语音转文字本地部署版(二)

一、技术栈 python 3.10.6 vosk 需下载对应模型&#xff08;vosk-model-cn-0.22&#xff09;模型下载慢的同学看最后的资源链接。 pyaudio keyboard 二、实现功能 本地化实现麦克风语音录入&#xff0c;实时生成文字&#xff0c;并保存至本地文档。 三、实现代码 fro…

tortoiseSVN 如何克隆项目到本地

导入项目成功&#xff0c;如下图&#xff1a;

解决“QString的split()函数分割中文“报错

在使用Qt平台的QString类里的split()函数&#xff0c;分割.txt文件里中文的字符串时&#xff0c;发现中文会乱码。     问题原因&#xff1a;中文使用UTF-16编码。     解决方法&#xff1a;将.txt文件保存为UTF-16编码&#xff0c;然后使用split()去分割对应的字符串即可。…