多元函数的泰勒公式
小象实战讲义 · 人工智能数学基础
在上一节,我们学习了多元函数的微分与梯度,它们描述了函数在一点附近的局部线性近似。然而,许多复杂的非线性现象仅用线性模型难以精确刻画。本节我们将学习多元函数的泰勒公式,它提供了一种用多项式(包含线性项、二次项乃至更高次项)来逼近任意光滑函数的强大工具。掌握泰勒公式,是理解后续最优化算法(如梯度下降法的收敛性分析)和机器学习模型(如损失函数的局部近似)中数学原理的关键一步。
💡 核心导读
本节我们将从一元泰勒公式出发,系统性地构建多元泰勒公式的知识体系:
- 起点回顾:重温一元泰勒公式的几何意义与拉格朗日中值定理,为多元推广奠定思想基础。
- 定理推广:将拉格朗日中值定理从一元推广到二元乃至n元,并引入关键工具——全微分算子。
- 公式构建:利用全微分算子,优雅地写出二元及n元函数的泰勒公式,理解其拉格朗日余项与佩亚诺余项两种形式。
- 核心应用:重点掌握二阶泰勒展开,明确其一次项对应梯度,二次项对应海塞矩阵,这是最优化理论的基石。
- 实用技巧:学习利用泰勒展开的唯一性定理简化复杂函数的展开过程,避免繁琐的偏导数计算。
从拉格朗日中值定理到泰勒公式
我们首先回顾一元微积分中的拉格朗日中值定理:若函数 f(x) 在闭区间 [a,b] 上连续,在开区间 (a,b) 内可导,则至少存在一点 ξ∈(a,b),使得 f(b)−f(a)=f′(ξ)(b−a). 其几何意义是:连接函数图像上两点 (a,f(a)) 和 (b,f(b)) 的割线,其斜率等于在该区间内某点 ξ 处的切线斜率。
对于多元函数,我们有类似的结论。以二元函数 z=f(x,y) 为例:
定理(二元函数中值定理):若函数 f(x,y) 在区域 D 内具有连续的偏导数,P0(x0,y0) 和 P1(x0+Δx,y0+Δy) 是 D 内的两点,且连接这两点的直线段 L⊂D,则至少存在一点 (ξ,η)=(x0+θΔx,y0+θΔy),其中 θ∈(0,1),使得 f(x0+Δx,y0+Δy)−f(x0,y0)=∂x∂f(ξ,η)Δx+∂y∂f(ξ,η)Δy.
这个定理可以看作是“割平面”与“切平面”之间的关系在一段直线路径上的体现。它本质上是将一元中值定理应用于辅助函数 ϕ(t)=f(x0+tΔx,y0+tΔy) 在 [0,1] 上的结果。
若引入全微分算子符号,记 h=(Δx,Δy)T,则上式右端恰好是函数 f 在点 (ξ,η) 处的一阶全微分 df(ξ,η;h)。因此,定理可以简洁地写为: f(x0+h)−f(x0)=df(ξ;h),ξ=x0+θh. 这为我们从一阶近似(中值定理)向高阶近似(泰勒公式)推广提供了自然的线索。
二元函数的泰勒公式
泰勒公式的核心思想是:用一个关于自变量增量的多项式来逼近函数值的增量。对于二元函数 f(x,y),在点 (x0,y0) 附近,我们希望用 (Δx,Δy) 的多项式来逼近 f(x0+Δx,y0+Δy)。
定理(带拉格朗日余项的泰勒公式):若函数 f(x,y) 在点 (x0,y0) 的某邻域内具有 n+1 阶连续偏导数,记 h=(Δx,Δy)T,则对该邻域内的任意点 (x0+Δx,y0+Δy),存在 θ∈(0,1),使得 f(x0+Δx,y0+Δy)=f(x0,y0)+k=1∑nk!1(Δx∂x∂+Δy∂y∂)kf(x0,y0)+(n+1)!1(Δx∂x∂+Δy∂y∂)n+1f(x0+θΔx,y0+θΔy). 其中,算子 (Δx∂x∂+Δy∂y∂)k 的运算规则是:先将其视为一个符号进行二项式展开,再将展开后的每一项作用到函数 f 上。例如,当 k=2 时: (Δx∂x∂+Δy∂y∂)2f=Δx2∂x2∂2f+2ΔxΔy∂x∂y∂2f+Δy2∂y2∂2f. 由于函数具有 n+1 阶连续偏导,混合偏导数的求导顺序可以交换。
公式的最后一项 (n+1)!1(Δx∂x∂+Δy∂y∂)n+1f(x0+θΔx,y0+θΔy) 称为拉格朗日余项,它精确地给出了多项式逼近的误差。
在实际应用中,我们更常用的是佩亚诺余项形式,它更简洁地描述了当自变量增量趋于零时余项的阶。
定理(带佩亚诺余项的泰勒公式):若函数 f(x,y) 在点 (x0,y0) 处具有 n 阶连续偏导数,则 f(x0+Δx,y0+Δy)=k=0∑nk!1(Δx∂x∂+Δy∂y∂)kf(x0,y0)+o(ρn), 其中 ρ=(Δx)2+(Δy)2 是点 (x0,y0) 到 (x0+Δx,y0+Δy) 的距离,o(ρn) 表示当 ρ→0 时,它是比 ρn 更高阶的无穷小量。
这个形式告诉我们,在点 (x0,y0) 的极小邻域内,函数可以用一个 n 次多项式来近似,误差是 ρn 的高阶无穷小。
泰勒公式的矩阵形式与核心:二阶展开
泰勒公式在多元函数微积分中最重要的应用是其二阶展开形式。让我们明确写出当 n=2 时的泰勒公式(佩亚诺余项)。
设函数 f(x) 在点 x0 处具有二阶连续偏导数,其中 x=(x1,x2,…,xm)T。记增量 h=(h1,h2,…,hm)T,则 f(x0+h)=f(x0)+∇f(x0)Th+21hTH(x0)h+o(∥h∥2).
这里:
- 0) = \left( \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, …, \frac{\partial f}{\partial x_m} \right)^T{\mathbf{x}=\mathbf{x}_0}∇f(x0)=(∂x1∂f,∂x2∂f,…,∂xm∂f)x=x0T 是函数在 x0 处的梯度向量(列向量)。
- H(x0) 是函数在 x0 处的海塞矩阵,它是一个 m×m 的对称矩阵,其第 i 行第 j 列元素为 ∂xi∂xj∂2f(x0)。
- ∥h∥=h12+h22+…+hm2 是向量 h 的欧几里得范数。
这个二阶泰勒展开是理解最优化算法的核心:
- 一次项 ∇f(x0)Th:描述了函数在 x0 处沿方向 h 的最速上升(或下降)趋势。梯度下降法的方向正是基于此项。
- 二次项 21hTHh:描述了函数在 x0 附近的曲率信息。牛顿法等二阶优化算法会利用此项来构造更优的搜索方向和步长。
import numpy as np
import sympy as sp
# 示例:计算二元函数在(1,1)处的二阶泰勒展开(佩亚诺余项)
x, y = sp.symbols('x y')
f_expr = sp.sin(sp.pi * x / 2) * sp.sin(sp.pi * y / 2) # f(x,y) = sin(πx/2)sin(πy/2)
x0, y0 = 1, 1
# 计算各阶偏导数在(1,1)处的值
f_val = f_expr.subs({x: x0, y: y0})
# 一阶偏导
f_x = sp.diff(f_expr, x)
f_y = sp.diff(f_expr, y)
f_x_val = f_x.subs({x: x0, y: y0})
f_y_val = f_y.subs({x: x0, y: y0})
# 二阶偏导
f_xx = sp.diff(f_x, x)
f_xy = sp.diff(f_x, y)
f_yy = sp.diff(f_y, y)
f_xx_val = f_xx.subs({x: x0, y: y0})
f_xy_val = f_xy.subs({x: x0, y: y0})
f_yy_val = f_yy.subs({x: x0, y: y0})
print("函数在 (1,1) 处的值: f(1,1) =", f_val)
print("\n一阶偏导数在 (1,1) 处的值:")
print("∂f/∂x =", f_x_val)
print("∂f/∂y =", f_y_val)
print("\n二阶偏导数在 (1,1) 处的值:")
print("∂²f/∂x² =", f_xx_val)
print("∂²f/∂x∂y =", f_xy_val)
print("∂²f/∂y² =", f_yy_val)
# 构建二阶泰勒多项式 T2(Δx, Δy)
Δx, Δy = sp.symbols('Δx Δy')
T2 = (f_val +
f_x_val * Δx + f_y_val * Δy +
(1/2) * (f_xx_val * Δx**2 + 2*f_xy_val * Δx*Δy + f_yy_val * Δy**2))
print(f"\n在点(1,1)处的二阶泰勒多项式(佩亚诺余项)为:")
print(f"T2(Δx, Δy) = {sp.simplify(T2)}")
print("其中 Δx = x-1, Δy = y-1,余项为 o(ρ²),ρ = sqrt(Δx² + Δy²)。")
# 数值验证:在(1.1, 0.9)点比较原函数与泰勒近似的值
test_x, test_y = 1.1, 0.9
Δx_val, Δy_val = test_x - x0, test_y - y0
ρ = np.sqrt(Δx_val**2 + Δy_val**2)
f_true = float(f_expr.subs({x: test_x, y: test_y}))
T2_approx = float(T2.subs({Δx: Δx_val, Δy: Δy_val}))
error = f_true - T2_approx
print(f"\n数值验证:")
print(f"在点 ({test_x}, {test_y}) 处:")
print(f" 原函数值 f = {f_true:.6f}")
print(f" 二阶泰勒近似值 T2 = {T2_approx:.6f}")
print(f" 绝对误差 |f - T2| = {abs(error):.6e}")
print(f" 距离 ρ = {ρ:.4f},误差与 ρ² ({ρ**2:.4f}) 的比值: {abs(error)/ρ**2:.6e}")
# 可以看到误差远小于 ρ²,符合 o(ρ²) 的阶
泰勒展开的唯一性定理及其应用
计算高阶泰勒展开时,直接求高阶偏导数可能非常繁琐。泰勒展开的唯一性定理为我们提供了简化计算的强大工具。
定理(泰勒展开的唯一性):设函数 f(x) 在点 x0 的某邻域内有定义,且能表示为 f(x0+h)=Pn(h)+o(∥h∥n),(∥h∥→0), 其中 Pn(h) 是关于 h 的 n 次多项式。那么,Pn(h) 必定是 f(x) 在点 x0 处的 n 阶泰勒多项式。
这个定理意味着,无论我们通过什么方法(例如,利用已知的一元展开式进行组合、乘法等)得到了一个符合上述形式的多项式,它就是我们要找的泰勒展开式。
应用示例:将函数 f(x,y)=excosy 在点 (0,0) 处展开到二次项(佩亚诺余项)。
我们知道两个基本的一元展开式(在 t=0 处): et=1+t+2!t2+o(t2),cost=1−2!t2+o(t2). 根据唯一性定理,我们可以直接将 t 分别替换为 x 和 y,然后相乘: f(x,y)=excosy=(1+x+2x2+o(x2))⋅(1−2y2+o(y2))(当 x,y→0). 展开乘法,并保留所有次数不超过 2 的项(即 1,x,y,x2,xy,y2): f(x,y)=1⋅1+1⋅(−2y2)+x⋅1+2x2⋅1+(高次及余项乘积)=1+x+2x2−2y2+R(x,y). 这里 R(x,y) 包含了 o(x2)、o(y2) 以及它们的乘积。可以证明,当 ρ=x2+y2→0 时,R(x,y)=o(ρ2)。因此,根据唯一性定理,上式就是 f(x,y) 在 (0,0) 处的二阶泰勒展开: excosy=1+x+21x2−21y2+o(ρ2),ρ=x2+y2→0.
📝 动手练一练
直接求导练习:求函数 f(x,y)=ln(1+x+y) 在点 (0,0) 处的二阶泰勒多项式(带佩亚诺余项)。 提示:先求出 f(0,0), ∂x∂f(0,0), ∂y∂f(0,0) 以及所有二阶偏导数在 (0,0) 的值,然后代入二阶泰勒公式。
利用唯一性定理练习:将函数 g(x,y)=1−x−y1 在点 (0,0) 处展开到二次项(佩亚诺余项)。 提示:回忆一元展开式 1−t1=1+t+t2+o(t2),并令 t=x+y。注意展开后合并同类项时,x+y 的平方会产生 x2,2xy,y2 项。
参考答案:
- f(0,0)=0, ∂x∂f(0,0)=1, ∂y∂f(0,0)=1, ∂x2∂2f(0,0)=−1, ∂y2∂2f(0,0)=−1, ∂x∂y∂2f(0,0)=−1。
二阶泰勒多项式为:T2(x,y)=x+y−21(x2+2xy+y2),余项 o(x2+y22)。 - 利用 1−t1=1+t+t2+o(t2),令 t=x+y,则
g(x,y)=1+(x+y)+(x+y)2+o((x+y)2)=1+x+y+x2+2xy+y2+o(ρ2),其中 ρ=x2+y2。
注意:(x+y)2=x2+2xy+y2,且可以证明 o((x+y)2)=o(ρ2)。
本章小结
本节我们系统学习了多元函数的泰勒公式,这是连接微分学与最优化理论的核心桥梁。
要点回顾:
- 泰勒公式的本质:用多项式局部逼近光滑函数。二元及n元公式通过全微分算子 (h⋅∇)k 得到了统一而优雅的表达。
- 两种余项:拉格朗日余项给出了逼近误差的精确表达式,适用于理论分析;佩亚诺余项 o(∥h∥n) 则更简洁地描述了误差阶数,适用于极限和近似计算。
- 核心中的核心:二阶泰勒展开 f(x0+h)=f(x0)+∇fTh+21hTHh+o(∥h∥2)。它清晰地分离了函数的线性部分(梯度)和曲率部分(海塞矩阵)。
- 实用技巧:泰勒展开的唯一性定理允许我们通过组合已知的简单展开式(如 ex, sinx, 1−x1)来推导复杂函数的展开式,避免直接计算高阶偏导的麻烦。
行动清单:
- 记忆二阶形式:务必熟记并理解二阶泰勒展开的矩阵形式,明确梯度向量和海塞矩阵在其中的角色。
- 练习展开技巧:选取几个二元函数(如 ex+y, sin(xy)),分别用直接求导法和唯一性定理法进行二阶展开,并验证结果一致。
- 代码验证:仿照示例代码,使用
sympy 对你自己展开的结果进行符号求导验证,并使用 numpy 在几个具体点进行数值误差验证,直观感受 o(∥h∥2) 的含义。
— 小象教研组