假设你和朋友从山谷东边的木屋出发,要走到西边的观景台。地图上可以画出无数条路线:有的贴着山腰平缓前进,有的翻山脊,有的像心电图一样上下抖动。你真正关心的不是某个点,而是整条路的整体体验——总时间、总体力、总风景评分。这种把整条路线映成一个数的“路线评分表”,在数学上叫泛函;在无数条候选路线里找出评分最好的那一条,就是变分法。普通微积分找的是“让某个数最大/最小的点”,变分法找的是“让某个数最大/最小的整条函数”。我们只需要做一个小实验:用手把路线轻轻推一下,如果任何小推都会让评分变差,那这条路就站在谷底;欧拉-拉格朗日方程正是描述这种“站在谷底”的平衡条件。
学习变分法,能让你真正理解最优控制、物理建模、机器学习正则化和图像处理里“在函数空间中找最优函数”的共同骨架,是读懂许多 AI 公式的关键门槛。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
1. 泛函与变分
山路上的每个点都可以记录海拔、坡度和风景。我们想比较的不是某个位置,而是整条路线:把路线切成许多小段,每小段贡献一个局部成本,再全部加起来。一个把完整路线 \(y(x)\) 变成总评分 \(J\) 的规则,就是泛函。就像“评分表”接收的不是数字,而是一整条曲线的形状;这是它与普通函数最大的不同。
在数学上,把一条路线写成函数 \(y(x)\),其中 \(x\) 是里程标记,\(y'(x)\) 是每一点上的坡度。如果局部成本由位置和坡度决定,总评分就写成下面的积分形式。这里 \(F\) 是一个“局部成本函数”,比如体力消耗、时间消耗或风景得分。
于是,变分法就是在“路线图集”中探索评分地形:每一条路线都像图集里的一个点,泛函 \(J\) 是这个点的高度。我们要做的,是在这片无限大的路线图集中找到最低的那个谷。
- 候选路线 \(y\)\(y(x)\) 是整条路线的形状,而不是某个固定数字。
- 坡度 \(y'\)描述每个里程点上的陡峭程度,是路线局部变化的速度。
- 局部成本 \(F\)在当前位置 \(x\)、路线高度 \(y\) 和坡度 \(y'\) 下,这一小段路付出的成本。
- 积分求和把从 \(a\) 到 \(b\) 的所有小段成本连续相加,得到整条路线的总评分。
2. 欧拉-拉格朗日方程
站在谷底有什么特征?如果你用手把路线轻轻推一下,无论往哪个方向推,评分都不应该明显下降。我们引入一个很小的扰动函数 \(\eta(x)\),它在起点和终点都等于零,这样扰动不会改变两端点的位置。然后把候选路线改成 \(y(x)+\varepsilon\eta(x)\)。
如果当前路线是极值,那么当 \(\varepsilon\) 很小时,总评分的一阶变化应该等于零。经过分部积分并利用 \(\eta\) 在端点为零的条件,最终会得到著名的欧拉-拉格朗日方程。它相当于说:在每一点上,路线高度变化带来的成本,恰好被坡度变化带来的累积成本抵消。
这个方程的推导很像“用许多小手指戳一条曲线”:如果每条小扰动都不能让总分下降,那这条曲线就已经站在函数空间的谷底。
- 直接随高度变化的成本如果 \(F\) 直接依赖于 \(y\),那么路线高度稍微改变,局部成本就会变化。
- 随坡度变化的成本如果 \(F\) 还依赖于 \(y'\),那么路线坡度变化也会影响成本。
- 坡度影响的累积坡度带来的影响不会只停留在一点,而会随着 \(x\) 一路传导,因此要对 \(F_{y'}\) 再求一次全导数。
- 平衡条件直接效应与传导效应相减为零,路线才站在谷底。
3. 约束变分
有时徒步者不能自由选择路线,还有一个额外规则:比如这段路必须走完固定长度的绳索,或者总爬升量必须恰好等于某个值。这类问题在历史上最著名的例子是“等周问题”——用固定长度的绳子围出一块最大面积。
面对这种约束,我们不能只让 \(J\) 取极值,还必须保证另一个泛函 \(K\) 等于常数。做法是引入一个待定系数 \(\lambda\),称为拉格朗日乘子。它像一条可调节松紧的绳子:把约束条件与原始目标合并成一个新的“增广泛函”,然后对新泛函使用欧拉-拉格朗日方程。
约束变分就像“戴着脚镣跳舞”:你不能只挑最省力的路,还要保证脚镣的总长度正好合适。拉格朗日乘子就是那条脚镣的松紧度。
- 约束泛函 \(K\)把需要固定的总工程量写成积分。
- 乘子 \(\lambda\)一个未知的权重,用来平衡目标与约束。
- 增广被积函数把两个目标合成为一个新的局部成本。
- 极值条件与约束方程先对增广泛函写欧拉方程,再由约束条件求出 \(\lambda\)。
4. 测地线与最小作用
如果徒步者只关心路线长度,那么每一小段的贡献就是斜边长度。坡度越陡,这一小段就越长。把所有小段长度加起来,就得到长度泛函。对这个泛函求极值,会得到平面上的测地线:连接两点的最短路径是一条直线。
物理学家把这个思想推广成最小作用量原理:物体真实运动的轨迹,使“动能减势能”的时间积分取极值。同一套欧拉-拉格朗日方程,既能推出几何上的直线,也能推出牛顿运动方程,这正是变分法在物理中无处不在的原因。
- 局部长度元坡度为零时,小段长度是 \(dx\);坡度越大,斜边越长。
- 总长度从起点到终点把所有 \(ds\) 连续加起来。
- 欧拉方程的结果把 \(F=\sqrt{1+(y')^2}\) 代入欧拉-拉格朗日方程,得到守恒量。
- 直线解括号内是常数,说明 \(y'\) 是常数,因此 \(y''=0\)。
5. 最优控制
现在把徒步者换成无人机。无人机从起点飞到终点,\(x(t)\) 表示时刻 \(t\) 的位置,\(u(t)\) 表示油门或推力。如果令 \(u=\dot x\),那么选择控制量就等价于选择一条轨迹。我们要同时惩罚两件事:离期望位置太远,以及油门太大、太耗燃料。
这条最优轨迹就像“既不想绕太远,又不想猛踩油门”的司机:他的路线不是数学上的直线,而是更平滑、更省油的实际折中曲线。
- 偏离代价越小越好,代表无人机离目标位置太远会受到惩罚。
- 控制代价速度越快、油门越大,燃料消耗越多。
- 性能指标把整个飞行时间内的成本积分起来,作为总代价。
- 欧拉方程对 \(F=x^2+\dot x^2\) 使用欧拉-拉格朗日方程,得到平衡微分方程。
6. 机器学习变分
机器学习里也经常遇到“选函数”的问题:给定一堆数据点 \((x_i,y_i)\),我们要找一个函数 \(f\) 尽量拟合这些点,同时不要太曲折。如果只盯着训练点,模型会像一条剧烈抖动的山路,拟合得完美但毫无泛化能力。因此我们加上一个平滑惩罚,用 \(\lambda\) 控制平滑与拟合的平衡。
同样的思想也被用在图像分割中:算法把待分割边界看成一条可变形曲线 \(C\),构造一个包含边界长度、平滑度和图像内容匹配度的能量泛函,再让曲线沿着欧拉-拉格朗日方程给出的方向演化,直到贴住目标边缘。无论是拟合曲线、控制无人机还是分割图像,本质上都是在函数空间里寻找一个“山谷点”。
- 数据拟合项模型预测与真实标签的差距平方和,越小越好。
- 平滑惩罚项导数平方的积分,惩罚剧烈波动,鼓励平缓曲线。
- 权衡系数 \(\lambda\)控制“拟合”和“平滑”谁更重要。
- 欧拉方程求解对这个泛函求变分,最优函数在数据点之间满足特定样条微分方程,这就是自然样条回归的本质。
AI 应用场景
无人机最优轨迹规划
阶段:路径规划与控制策略生成
解决的问题:传统方法往往只盯着“最短路径”,忽略飞行能耗和抖动代价;变分法把位置偏差、速度、加速度和燃料统一写进一个泛函,直接优化整条轨迹。
具体案例:物流无人机要在两栋楼之间飞行,同时节省电量并避开强风区。工程师用变分法建立包含位移误差和油门惩罚的性能指标,解出平滑的能量最优轨迹。
医学图像分割的能量泛函
阶段:图像预处理与目标分割
解决的问题:传统边缘检测只看局部像素梯度,容易断裂;变分法用一条可变形曲线最小化能量泛函,同时要求边界平滑、贴近图像梯度,从而得到完整器官轮廓。
具体案例:在 MRI 影像中分割左心室,算法初始化一个粗略曲线,然后让曲线在能量泛函驱动下演化,自动收敛到心肌边界。
回归模型的正则化与样条平滑
阶段:模型训练与正则化
解决的问题:普通多项式回归容易过拟合,变分正则化在目标函数中加入导数惩罚项,等价于在函数空间中限制模型复杂度。
具体案例:预测某地区温度随时间变化的趋势,使用带平滑惩罚的样条回归,获得既能拟合观测点又不会剧烈震荡的预测曲线。
Python 演示
import numpy as npimport matplotlib.pyplot as plt def solve_euler_lagrange(n=50): h = 1.0 / n N = n - 1 A = np.zeros((N, N)) b = np.zeros(N) for i in range(N): A[i, i] = -(2.0 + h * h) if i > 0: A[i, i - 1] = 1.0 if i < N - 1: A[i, i + 1] = 1.0 b[-1] = -1.0 y_inner = np.linalg.solve(A, b) x_full = np.linspace(0.0, 1.0, n + 1) y_full = np.concatenate(([0.0], y_inner, [1.0])) return x_full, y_full if __name__ == "__main__": x_num, y_num = solve_euler_lagrange(50) xs = np.linspace(0, 1, 200) y_exact = np.sinh(xs) / np.sinh(1.0) plt.plot(xs, y_exact, label="exact") plt.plot(x_num, y_num, "o--", label="finite difference") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.title("Euler-Lagrange solution: y'' - y = 0") plt.show()
h = 1.0 / n把区间 \([0,1]\) 分成 \(n\) 段,每段长度作为网格间距。A[i, i] = -(2.0 + h * h)差分近似 \(y''-y=0\) 时,主对角线来自 \(y_i\) 的系数。b[-1] = -1.0右端边界条件 \(y(1)=1\) 被移到方程右边。y_inner = np.linalg.solve(A, b)解线性方程组,得到内部节点的最优函数值。y_full = np.concatenate(([0.0], y_inner, [1.0]))补上两端点,形成完整轨迹。
常见误区
误区我以为变分法就是普通微积分,把函数 \(y\) 当成一个变量,令 \(y'=0\) 就能得到极值。
正解普通求导是让一个数值变量变化;变分法是让一整条函数曲线变化。我们关心的是泛函 \(J[y]\) 对曲线形状的一阶变化,欧拉-拉格朗日方程并不是简单地令 \(y'=0\)。
为何常见:因为初学者刚学完一元微积分,很自然地把“求导找极值”的方法套到函数身上。
误区既然最短路是直线,那么满足欧拉-拉格朗日方程的最优路径都应该是直线。
正解直线只在被积函数是长度泛函 \(F=\sqrt{1+y'^2}\) 时出现。如果 \(F=x^2+\dot x^2\),最优解是双曲函数;不同 \(F\) 对应不同“地形”,极值曲线的形状完全不同。
为何常见:教材最常举的例子是测地线,学生容易把例子本身误当成定理。
误区只要曲线满足欧拉-拉格朗日方程,它就是全局最优路线。
正解欧拉方程只是“一阶必要条件”,说明一阶变分为零。它可能是极小值、极大值或鞍点,就像山顶和山口同样是平缓点,却不一定是山谷。
为何常见:一元函数中“导数为零”也未必是极小值,但初学者常常忘记检查二阶条件,变分法中也有类似的第二变分。
误区遇到约束条件时,把约束等式直接代入目标函数再求极值就行了。
正解对于像“固定整体积分”的等周问题,约束是一个全局条件,不是逐点成立的等式,无法简单消去函数。更合适的做法是引入拉格朗日乘子构造增广泛函。
为何常见:普通多元函数优化里,等式约束常用代入法,学生把这种经验推广到函数空间的全局约束上。
面试题
Q1. 泛函的核心特点是什么?
- A.输入一个函数,输出一个实数← 正确答案
- B.输入一个实数,输出一个函数
- C.输入两个实数,输出一个实数
- D.输入一个函数,输出一个新函数
答案:A。泛函是“函数的函数”,它把整条函数曲线映射成一个数值。例如长度泛函把路径曲线映射为路径长度;普通函数做不到这件事。
Q2. 变分法寻找的是什么?
- A.使泛函取极值的函数← 正确答案
- B.使函数取极值的点
- C.使积分最大的常数
- D.使方程唯一的参数
答案:A。变分法的目标不是找一个数字,而是找一条完整曲线或函数。它在函数空间中搜索,让 \(J[y]\) 达到极值的那个 \(y(x)\) 才是答案。
Q3. 在推导欧拉-拉格朗日方程时,小扰动函数 \(\eta(x)\) 在区间端点通常满足什么条件?
- A.在两端点处必须为零← 正确答案
- B.在中间点处必须为零
- C.在两端点处必须一致
- D.在整个区间上必须为正
答案:A。为了让扰动不改变起点和终点位置,\(\eta(a)=\eta(b)=0\)。这样分部积分产生的边界项自动消失,才能得到干净的欧拉方程。
Q4. 对于被积函数 \(F(x,y,y')\),欧拉-拉格朗日方程的标准形式是?
- A.\(F_y\) 减去 \(d/dx(F_{y'})\) 等于零← 正确答案
- B.\(F_{y'}\) 加上 \(d/dx(F_y)\) 等于零
- C.\(F_x\) 乘以 \(F_y\) 的导数等于零
- D.\(F_y\) 与 \(F_x\) 同时取零
答案:A。欧拉方程是 \(F_y-\frac{d}{dx}F_{y'}=0\)。它表示直接随高度变化的成本与坡度变化的传导成本相互抵消。
Q5. 等周问题中引入拉格朗日乘子的主要目的是什么?
- A.把极大问题改成极小问题
- B.把带约束问题转化为无约束问题← 正确答案
- C.把曲线长度直接换成面积
- D.把泛函的积分区间缩小一半
答案:B。拉格朗日乘子把全局约束并进目标函数,形成增广泛函。求解时先写欧拉方程,再用原来的约束确定 \(\lambda\)。
Q6. 最小作用量原理中的作用量 \(S\) 通常是什么?
- A.动能和势能之差的时间积分← 正确答案
- B.动能和势能之差的路径长度
- C.动能加势能的空间积分
- D.势能对时间的简单平均值
答案:A。作用量定义为 \(S=\int(T-V)dt\)。物体会选择使这个积分取极值的轨迹,这正是变分法在物理中的核心应用。
Q7. 若被积函数 \(F\) 不显含 \(y\),欧拉-拉格朗日方程可以简化为?
- A.\(d/dx(F_{y'})\) 恒等于零← 正确答案
- B.\(F_{y'}\) 本身恒等于零
- C.\(F_x\) 与 \(F_y\) 同时为零
- D.\(y''\) 与 \(F\) 完全无关
答案:A。当 \(F_y=0\) 时,欧拉方程变成 \(\frac{d}{dx}F_{y'}=0\),因此 \(F_{y'}\) 沿整条路径是常数,这是一个重要的守恒量。
Q8. 下列哪些说法符合变分法的特点?
- A.泛函的输入是函数,输出是数值← 正确答案
- B.欧拉-拉格朗日方程是极值的必要条件← 正确答案
- C.约束的处理只能靠代入消元
- D.满足欧拉方程的曲线一定全局最优
答案:AB。A 描述泛函,B 描述欧拉方程的必要性。C 错误,约束常用拉格朗日乘子;D 错误,一阶条件不能保证全局最优。
Q9. 变分法在人工智能和工程中有哪些实际应用?
- A.最优控制中的轨迹规划← 正确答案
- B.图像分割中的能量泛函← 正确答案
- C.机器学习中的平滑正则化← 正确答案
- D.训练 BP 网络只能靠变分法
答案:ABC。最优控制最小化性能指标,图像分割让曲线沿能量泛函演化,平滑正则化在函数空间惩罚导数;D 错误,神经网络训练主要用梯度下降,不是“只能靠变分法”。
Q10. 对于带积分约束 \(\int_a^b G\,dx=C\) 的变分问题,以下哪些是必要的?
- A.需要对增广被积函数写欧拉方程← 正确答案
- B.需要补约束方程来确定 \(\lambda\)← 正确答案
- C.小扰动 \(\eta\) 在端点必须为零← 正确答案
- D.极值曲线必须满足 \(y''=0\)
答案:ABC。带约束时要对 \(F-\lambda G\) 写欧拉方程,并用积分约束求出 \(\lambda\);端点固定的扰动也必须在端点为零。D 错误,\(y''=0\) 只是特定泛函的解,不是普遍必要条件。