← 返回Book 3目录
第17章

数值方法

Numerical Methods

泰勒展开、数值微分与数值求根

📚 本章内容

本章介绍数值分析中的核心方法:泰勒展开用于函数近似,数值微分用于导数计算, 数值求根方法(二分法、牛顿法、割线法)用于方程求解。

17.1-17.2
泰勒展开
17.3
二元近似
17.4
数值微分
17.5-17.7
数值求根

17.1-17.2 泰勒展开近似

泰勒展开将复杂函数在某点附近用多项式近似,阶数越高近似越精确。 对于eˣ,在x₀处的n阶泰勒展开为:Σ(k=0 to n) eˣ⁰/k! · (x-x₀)ᵏ

关键点:展开点附近近似最好,远离展开点误差增大

泰勒展开近似

观察不同阶数的泰勒多项式如何逼近原函数 eˣ

-2-1012xf(x) = eˣ
eˣ (原函数)
阶数 = 0
阶数 = 1
阶数 = 2
阶数 = 3

展开点

最高阶数

阶数越高,近似越精确

泰勒公式

f(x) ≈ Σ f⁽ⁿ⁾(x₀)/n! · (x-x₀)ⁿ
对于eˣ:f⁽ⁿ⁾(x) = eˣ

观察要点

✓ 展开点附近近似最好

✓ 阶数越高,有效范围越大

✓ 远离展开点误差增大

✓ 红点:展开中心

17.4 二元泰勒展开:用多项式曲面近似

上一节介绍的二元泰勒展开也可以扩展到多元函数。本节以二元函数为例介绍多元函数泰勒展开。

给定二元函数 f(x₁, x₂),它的泰勒展开可以写成:

f(x₁, x₂) = f(a, b) + fx₁(a, b)(x₁ - a) + fx₂(a, b)(x₂ - b)
+ 1/2![fx₁x₁(a, b)(x₁ - a)² + 2fx₁x₂(a, b)(x₁ - a)(x₂ - b) + fx₂x₂(a, b)(x₂ - b)²] + ...

公式 (20)

⚠️ 注意:式中假定两个混合偏导相等,即 fx₁x₂(a, b) = fx₂x₁(a, b)。

将 (20) 写成矩阵运算形式:

f(x₁, x₂) = f(a, b) + [fx₁(a, b), fx₂(a, b)] · [x₁ - a, x₂ - b]T
+ 1/2![x₁ - a, x₂ - b] ·[fx₁x₁(a, b) fx₁x₂(a, b)]
[fx₁x₂(a, b) fx₂x₂(a, b)]
· [x₁ - a, x₂ - b]T + ...

公式 (21)

如图 16 所示,从几何角度,二元函数泰勒展开相当于,水平面、斜面、二次曲面、三次曲面等多项式曲面叠加。

f(x)Constant≈Constant+Linear+Quadratic+...

图 16. 二元函数泰勒展开示意图

举个例子

给定如下二元高斯函数:

y = f(x₁, x₂) = exp(-(x₁² + x₂²))

公式 (22)

二元函数 f(x₁, x₂) 一阶偏导为:

fx₁(x₁, x₂) = ∂f/∂x₁(x₁, x₂) = -2x₁ exp(-(x₁² + x₂²))
fx₂(x₁, x₂) = ∂f/∂x₂(x₁, x₂) = -2x₂ exp(-(x₁² + x₂²))

公式 (23)

图 17 所示为两个一阶偏导导数的平面等高线图。图中,x 为展开点位置,水平等高线表示 (-0.1, -0.2)。

(22) 中二元函数 f(x₁, x₂) 二阶偏导为:

fx₁x₁(x₁, x₂) = ∂²f/∂x₁²(x₁, x₂) = (-2 + 4x₁²) exp(-(x₁² + x₂²))
fx₂x₂(x₁, x₂) = ∂²f/∂x₂²(x₁, x₂) = (-2 + 4x₂²) exp(-(x₁² + x₂²))
fx₁x₂(x₁, x₂) = ∂²f/∂x₁∂x₂(x₁, x₂) = 4x₁x₂ exp(-(x₁² + x₂²))
fx₂x₁(x₁, x₂) = ∂²f/∂x₂∂x₁(x₁, x₂) = 4x₁x₂ exp(-(x₁² + x₂²))

公式 (24)

显然,两个混合偏导相等,即:

fx₁x₂(x₁, x₂) = fx₂x₁(x₁, x₂)

公式 (25)

图 18 所示为两个二阶偏导函数的平面等高线图。

展开点 x (−0.1, −0.2) 处函数值、一阶、二阶偏导数具体值为:

f(−0.1, −0.2) = 0.951
fx₁(−0.1, −0.2) = 0.190, fx₂(−0.1, −0.2) = 0.380
fx₁x₁(−0.1, −0.2) = −1.864
fx₂x₂(−0.1, −0.2) = −1.750
fx₁x₂(−0.1, −0.2) = fx₂x₁(−0.1, −0.2) = 0.076

公式 (26)

常数项

类似前文,我们在本节也采用逐步分析。首先用二元常函数来估计 f(x₁, x₂):

f(x₁, x₂) ≈ f(a, b)

Constant

公式 (27)

这相当于用一个平行于 x₁x₂ 平面的水平面来近似 f(x₁, x₂)。

图 19 所示为用常函数来估计二元高斯函数,常数函数对应解析式为:

f(x₁, x₂) ≈ f(−0.1, −0.2) = 0.951

公式 (28)

一阶函数

用一阶泰勒展开估计 f(x₁, x₂):

f(x₁, x₂) ≈ f(a, b) +fx₁(a, b)(x₁ - a) + fx₂(a, b)(x₂ - b)

Constant + Plane

公式 (29)

相当于水平面 + 斜面 叠加来近似 f(x₁, x₂)。

图 20 所示为一阶泰勒展开估计原函数。二元一次函数对应解析式为:

f(x₁, x₂) ≈ f(−0.1, −0.2) + fx₁(−0.1, −0.2)(x₁ − (−0.1)) + fx₂(−0.1, −0.2)(x₂ − (−0.2))
= 0.951 + 0.190(x₁ + 0.1) + 0.380(x₂ + 0.2)

公式 (30)

二阶函数

用二阶泰勒展开估计 f(x₁, x₂):

f(x₁, x₂) ≈ f(a, b) +fx₁(a, b)(x₁ - a) + fx₂(a, b)(x₂ - b)
+ 1/2![fx₁x₁(a, b)(x₁ - a)² + 2fx₁x₂(a, b)(x₁ - a)(x₂ - b) + fx₂x₂(a, b)(x₂ - b)²]

Constant + Plane + Quadratic

公式 (31)

相当于水平面 + 斜面 + 二次曲面 叠加来近似 f(x₁, x₂)。

图 21 所示为二阶泰勒展开估计原函数。二元二次函数对应解析式为:

f₂(x₁, x₂) = 0.951 + 0.190(x₁ + 0.1) + 0.380(x₂ + 0.2)
+ 1/2[−1.864(x₁ + 0.1)² + 0.152(x₁ + 0.1)(x₂ + 0.2) − 1.750(x₂ + 0.2)²]

公式 (32)

请大家用本书代码自行展开整理上式。

二元函数泰勒近似

观察二元函数 f(x,y)=e⁻ˣ²⁻ʸ² 在局部的泰勒展开

一阶(线性)近似

红点:展开点 (-0.1, -0.2)

xy-101-101

选择阶数

近似公式

f(x,y) ≈ f(a,b) +
∂f/∂x·(x-a) +
∂f/∂y·(y-b)

近似效果

零阶:常数平面

一阶:切平面

二阶:二次曲面

高阶近似更贴近原函数

颜色说明

蓝色:低值
黄色:高值

亮色区域:近似范围

17.5 数值微分:用有限差分近似导数

前文介绍的解析法推导出的解析解,能从正面推导出导数的闭式表达式。 本节介绍的数值微分,并不直接推导解析解,而是从导数的定义出发,利用数值方法近似计算导数。

数值微分是通过有限差分近似导数的方法,它在许多实际应用中非常重要,特别是当解析求导困难或不可能时。

导数的定义

从导数的定义出发,函数 f(x) 在点 x 处的导数定义为:

f'(x) = limh→0 [f(x + h) - f(x)] / h

公式 (33)

当 h 取有限值(而非趋近于 0)时,我们就得到了数值微分的基本思想。

前向差分(Forward Difference)

前向差分使用当前点和前方一点来近似导数:

f'(x) ≈ [f(x + h) - f(x)] / h

Forward Difference

公式 (34)

精度:前向差分的误差为 O(h),即误差与步长 h 成正比。

几何意义:前向差分计算的是通过点 (x, f(x)) 和点 (x+h, f(x+h)) 的割线斜率。

xx+hf(x)f(x+h)割线yx

图 22. 前向差分的几何意义

后向差分(Backward Difference)

后向差分使用当前点和后方一点来近似导数:

f'(x) ≈ [f(x) - f(x - h)] / h

Backward Difference

公式 (35)

精度:后向差分的误差也为 O(h),与前向差分精度相同。

几何意义:后向差分计算的是通过点 (x-h, f(x-h)) 和点 (x, f(x)) 的割线斜率。

x-hxf(x-h)f(x)割线yx

图 23. 后向差分的几何意义

中心差分(Central Difference)

中心差分使用当前点前后两点来近似导数,精度更高:

f'(x) ≈ [f(x + h) - f(x - h)] / (2h)

Central Difference

公式 (36)

精度:中心差分的误差为 O(h²),比前向和后向差分精度高一个数量级!

几何意义:中心差分计算的是通过点 (x-h, f(x-h)) 和点 (x+h, f(x+h)) 的割线斜率,这条割线更接近 x 处的切线。

x-hxx+hf(x-h)f(x)f(x+h)割线yx

图 24. 中心差分的几何意义

三种方法比较

前向差分

✓计算简单
✓只需未来一点
✗精度较低 O(h)

后向差分

✓计算简单
✓只需过去一点
✗精度较低 O(h)

中心差分

✓精度高 O(h²)
✓最常用方法
✗需要两侧点

举个例子

考虑函数 f(x) = sin(x),我们知道其导数为 f'(x) = cos(x)。

在 x = π/4 处,真实导数值为:

f'(π/4) = cos(π/4) = √2/2 ≈ 0.7071

使用步长 h = 0.1,用三种数值方法计算:

前向差分:[sin(π/4 + 0.1) - sin(π/4)] / 0.1 ≈ 0.6967

后向差分:[sin(π/4) - sin(π/4 - 0.1)] / 0.1 ≈ 0.7175

中心差分:[sin(π/4 + 0.1) - sin(π/4 - 0.1)] / 0.2 ≈ 0.7071

误差比较:

  • • 前向差分误差:|0.6967 - 0.7071| ≈ 0.0104
  • • 后向差分误差:|0.7175 - 0.7071| ≈ 0.0104
  • • 中心差分误差:|0.7071 - 0.7071| ≈ 0.0000

可以看到,中心差分的精度明显优于前向和后向差分!

步长选择的权衡

步长 h 的选择需要权衡两种误差:

截断误差

h 太大时,泰勒展开高阶项被忽略,导致截断误差增大。

h ↑ → 截断误差 ↑

舍入误差

h 太小时,相近数值相减会损失有效数字,导致舍入误差增大。

h ↓ → 舍入误差 ↑

⚖️ 实践建议:通常选择 h ≈ 10⁻⁵ 到 10⁻⁸ 之间的值可以在两种误差之间取得较好的平衡。

数值微分方法对比

对比三种差分方法:中心、前向、后向差分

-3-2-10123xf'(x)解析解中心差分前向差分后向差分

步长 Δx

步长越小,通常越精确

差分公式

中心差分:
f'(a) ≈ [f(a+Δx) - f(a-Δx)] / 2Δx
前向差分:
f'(a) ≈ [f(a+Δx) - f(a)] / Δx
后向差分:
f'(a) ≈ [f(a) - f(a-Δx)] / Δx

精度对比

中心差分:O(Δx²),二阶精度

前向差分:O(Δx),一阶精度

后向差分:O(Δx),一阶精度

✓ 中心差分最精确

应用场景

• 无法解析求导时

• 实验数据导数估计

• 数值优化算法

• 偏微分方程求解

17.5-17.7 数值求根方法

求解f(x)=0的三种经典方法,各有特点:

二分法:
稳定但慢,线性收敛
牛顿法:
最快,二次收敛,需导数
割线法:
介于两者,超线性收敛

数值求根方法对比

对比三种经典求根方法的迭代过程和收敛速度

牛顿法

迭代次数: 0 / 5

-3-2-10123xf(x) = 2x² - 8x + 1

选择方法

动画控制

方法特点

牛顿法:
• 二次收敛(最快)
• 需要导数f'(x)
• xₙ₊₁ = xₙ - f(xₙ)/f'(xₙ)
• 依赖初值

收敛速度

牛顿法:最快(5-6次)

割线法:中等(7-8次)

二分法:最慢(20+次)

章节总结

关键要点

Σ
泰勒展开
多项式近似
∂²
二元近似
曲面逼近
Δ
数值微分
差分近似
x*
数值求根
迭代逼近

核心概念

  • ▸泰勒展开:f(x)≈Σf⁽ⁿ⁾(x₀)/n!·(x-x₀)ⁿ,在展开点附近用多项式近似函数
  • ▸二元泰勒:包含零阶、一阶、二阶项,逐级提高近似精度
  • ▸数值微分:中心差分O(Δx²)最精确,前向后向差分O(Δx)
  • ▸二分法:线性收敛,稳定但慢,需f(a)·f(b)<0
  • ▸牛顿法:xₙ₊₁=xₙ-f(xₙ)/f'(xₙ),二次收敛最快,需导数
  • ▸割线法:用差分近似导数,超线性收敛,介于二分和牛顿之间

🎯 实际应用

机器学习

泰勒展开用于损失函数近似,数值微分用于梯度计算,牛顿法加速优化。

工程计算

数值方法求解复杂方程,有限差分法解偏微分方程。

科学计算

实验数据处理、曲线拟合、插值外推等都依赖数值方法。

优化问题

求解最优化问题的根本是找到梯度为零的点,需要数值求根。