变分法,到底在“变”什么?
普通求导改一个数,变分法为何要改整条曲线?八幅原创图与一次小扰动演示,从函数、泛函和第一变分走到欧拉—拉格朗日方程,再用最短路线、折射、悬链线与力学讲清它的用处和边界。
有些数学名词,第一次听就像有一道门。
“变分法”就是其中一个。
你在最速下降、悬链线、光的折射、拉格朗日力学里反复遇见它,好像到哪里都能用;可一看公式,又觉得自己只是在围墙外面转圈。
这次我们从最小的问题开始:
普通求导是在改一个数。变分法,是在改什么?
先给答案:它通常把一整条候选函数当作可改变的对象,再问某个“全程评分”能不能达到驻定或最优。
不是让公式自己发生变化,也不是把“微分”改个名字。
哈密顿那句“科学诗篇”倒是很适合作为入口。1834 年,他在动力学论文引言中赞赏拉格朗日:许多不同的运动结果,可以从一个基本公式导出;方法的美与结果的分量相称,使其著作成为 “a kind of scientific poem”。
原话确实在《动力学的一般方法》原文转录中,都柏林圣三一学院档案也提供论文 PDF。这里把短语译作“某种科学的诗篇”,不是给变分法补上一条神秘定律。
这篇文章的任务,是把这份统一性拆成几步,让我们真的看见它怎样工作。
这套工具也不是某个人突然写出一个公式就完成的。欧拉在 1744 年出版的变分法著作中系统处理了一般的极值曲线问题;1755 年,19 岁的拉格朗日又向欧拉介绍新的极值方法,次年把相关结果用于力学。MacTutor 的拉格朗日传记记录了这段往来。
1. 函数给一个值,泛函给整条曲线打分
普通函数很熟悉:
\[f(x)=x^2.\]输入 (x=0.5),输出 (f(0.5)=0.25)。你给它一个数,它回你一个数。
但如果问题是“从 A 到 B 哪条路线最短”,给一个 (x) 不够。
你必须交出一整条路线,才能算总长度。
图 1:先看上面的单点,再看下面从 A 到 B 的完整线。上面只读一个函数值,横纵轴分别缩放便于读数;下面必须看完整路径,才能得到总长。下图等比例,坐标与长度数值采用无量纲教学例子。
对于能写成 (y=y(x)) 的平面曲线,弧长是:
\[\ell[y]=\int_a^b\sqrt{1+\bigl(y'(x)\bigr)^2}\,dx.\]为什么出现平方根?
因为很短的一段曲线,长度近似为
\[ds=\sqrt{dx^2+dy^2} =\sqrt{1+(y')^2}\,dx.\]这里沿 (x) 增大的方向积分;把这些小段相加,就是全程长度。
记号 (\ell[y]) 的方括号提醒我们:输入不是一个位置数字,而是整条函数 (y(x))。
这种“接收函数、输出一个数”的评分规则,叫 泛函。
名字听着抽象,任务却很具体:给一条路线算长度,给一个链形算势能,给一段运动算作用量。
一个重要区别是:同一条曲线,换一个评分规则,就可能得到不同的最优问题。 距离最短、时间最少、能量最低,并不是三个可以互换的说法。
2. “改整条曲线”,到底怎样改?
先选择一条基线。本文前半部分都用无量纲坐标,固定
\[y(0)=0,\qquad y(1)=1.\]最简单的基线是 (y(x)=x)。
现在,不是把所有点胡乱推来推去,而是选一份“改动形状”:
\[\eta(x)=\sin(\pi x).\]它在两端为零,中间鼓起。再乘一个小数 (\varepsilon),加到基线上:
\[y_\varepsilon(x)=y(x)+\varepsilon\eta(x).\]这里有两个角色,不要混淆:
(\eta(x)) 决定“哪些地方怎样改”,(\varepsilon) 决定“改动有多大”。
图 2:先看上方的改动模板,再看下方三条候选。正的 (\varepsilon) 把曲线鼓起,负的把它压下;两端始终不动,因为 (\eta(0)=\eta(1)=0)。五秒演示只改变这族函数,不模拟物体沿线运动。
单独打开小扰动演示。刷新可重播;播放一次后停回基线。静态的正、负候选始终保留,启用“减少动态效果”也能比较。
比如取 (\varepsilon=0.2)。在 (x=0.5) 处,(\eta=1),所以 (y) 从 0.5 变成 0.7;在两端,(\eta=0),所以位置不变。
但这只是一种改法。你也可以用 (\sin(2\pi x)),或者只在某个小区间鼓起的光滑函数。
要找驻定曲线,不是只对一份改动模板过关,而是要对所有允许的改动方向过关。
“允许”也有条件:曲线要具有所需的光滑性、满足端点与其他约束。不是任意一条涂鸦都能拿来代入。
3. 第一变分:沿一种改法,先做一次普通求导
先不用弧长的平方根,换一个算起来更清楚的教学评分:
\[J[y]=\int_0^1\bigl(y'(x)\bigr)^2\,dx.\]它把各处坡度的平方相加。陡一点会被平方加重,所以它偏好不要把变化全挤在少数位置。
这不是曲线长度,也不自动是物理能量。 此处各量无量纲;我们只是选了一把容易算、也很有用的数学尺子。
把 (y_\varepsilon=x+\varepsilon\sin(\pi x)) 代入:
\[y_\varepsilon'=1+\varepsilon\pi\cos(\pi x).\]平方后积分。余弦的一次项积分为零,余弦平方在这个区间的积分为 (1/2),得到:
\[J[y_\varepsilon] =1+\frac{\pi^2}{2}\varepsilon^2.\]整条曲线的评分,现在暂时变成了一个普通函数:
\[\phi(\varepsilon)=J[y+\varepsilon\eta].\]于是我们可以像平常一样问:在 (\varepsilon=0),它的导数是多少?
\[\phi'(0)=0.\]这就是沿当前扰动方向的第一变分。更明确地写:
\[\delta J[y;\eta] =\left.\frac{d}{d\varepsilon} J[y+\varepsilon\eta]\right|_{\varepsilon=0}.\]不要把 (\delta J) 与整个有限改动混在一起。在相应可微条件下:
\[J[y+\varepsilon\eta]-J[y] =\varepsilon\,\delta J[y;\eta]+o(\varepsilon).\](o(\varepsilon)) 表示除以 (\varepsilon) 后趋于零的更小项。第一变分抓住的是一阶的变化率,不是声称评分完全不变。
图 3:横轴不是位置,而是改动幅度 (\varepsilon)。上图从直线出发,评分在零处变平;下图从弯曲基线出发,稍取负幅度就能降分。纵轴画的是 (J-1),不是 (J) 本身。
注意两个“零”的区别:
第一变分为零,不等于泛函值为零。 上面的直线评分是 1,只是它的一阶变化为零。
换一条弯曲基线:
\[y(x)=x+0.2\sin(\pi x).\]沿同一个 (\eta=\sin(\pi x)) 改动,评分变成
\[\phi(\varepsilon) =1+\frac{\pi^2}{2}(0.2+\varepsilon)^2.\]它在零处的导数为 (0.2\pi^2\approx1.974),不为零。稍取负的 (\varepsilon),就能把那份多余的鼓起压小,降低评分。
只试一种改法,还不算证明
直线对正弦扰动过关,能不能就宣布“找到了答案”?
不能。那只证明一个方向的一阶变化为零。
不过,本例可以直接证明对全部允许曲线,它真的是全局最低。利用固定端点:
\[\begin{aligned} J[y] &=\int_0^1\bigl[1+(y'-1)\bigr]^2dx\\ &=1+\int_0^1(y'-1)^2dx. \end{aligned}\]中间的一次项消失,是因为 (\int_0^1(y’-1)dx=y(1)-y(0)-1=0)。
平方不可能为负,所以 (J[y]\ge1)。对于这里的光滑曲线,等号只有在 (y’=1)、也就是 (y=x) 时成立。
这才是一个覆盖所有允许曲线的证明,不是“画了几条线,看起来都比它差”。
驻定,也不总是最小
一般问题中,第一变分为零只是必要条件;它可能给出极小、极大,或者不是极值的驻定解。找最优时还要检查二阶变化、凸性或其他证据。
甚至普通函数 (f(x)=x^3) 在零处导数为零,却不是极小值。
上一篇分析力学文章给出的弹簧作用量例子更直接:真实静止解附近,有的候选作用量更小,有的更大。不能把“驻定作用量”一概翻译成“自然永远选最小”。
4. 欧拉—拉格朗日方程,怎样从这些改动里长出来?
现在把教学评分换成一般形式:
\[J[y]=\int_a^b F(x,y,y')\,dx.\](F) 是每一小段的评分规则,可以依赖当前位置 (x)、函数值 (y) 和坡度 (y’)。这里先讨论一条足够光滑的函数、固定两个端点,以及足够光滑的 (F)。
弧长问题取 (F=\sqrt{1+(y’)^2});前面的坡度账取 (F=(y’)^2)。
推导只需四步。核心结构可在 MIT 分析力学讲义第一章第 1.5 节核查。
第一步:函数值和坡度都一起改变
若 (y_\varepsilon=y+\varepsilon\eta),那么
\[y_\varepsilon'=y'+\varepsilon\eta'.\]所以一阶变化有两份:
\[\delta J =\int_a^b \left( \frac{\partial F}{\partial y}\eta +\frac{\partial F}{\partial y'}\eta' \right)dx.\]计算偏导时,把 (x,y,y’) 暂时作为 (F) 的不同输入;这是计算规则,并不是说实际曲线的高度与坡度互不相关。
第二步:把扰动的导数搬走
第二项有 (\eta’)。做积分分部:
\[\begin{aligned} \int_a^b\frac{\partial F}{\partial y'}\eta'\,dx &=\left[ \frac{\partial F}{\partial y'}\eta \right]_a^b\\ &\quad-\int_a^b \frac{d}{dx}\left( \frac{\partial F}{\partial y'} \right)\eta\,dx. \end{aligned}\]这一招的意义是:把所有扰动都整理成“某个系数乘 (\eta)”的同一种形式。
第三步:固定端点,让边界项消失
因为允许的扰动满足 (\eta(a)=\eta(b)=0),方括号那一项为零。
于是:
\[\delta J =\int_a^b \underbrace{\left[ \frac{\partial F}{\partial y} -\frac{d}{dx} \left(\frac{\partial F}{\partial y'}\right) \right]}_{R(x)} \eta(x)\,dx.\]把方括号叫作残差 (R(x)):它衡量候选曲线在局部有没有满足所需的条件。
第四步:为什么积分为零,会要求系数处处为零?
如果只给你一个特定的 (\eta),正负面积可能碰巧抵消。
但要求是:对所有允许的 (\eta),积分都为零。
如果连续的 (R) 在某个小区间是正的,就挑一个只在那个区间起作用、也是正的光滑扰动。乘积积分就会大于零,不可能为零。若 (R) 是负的,同样可以挑相应扰动。
因此,在这些条件下,只能有 (R(x)=0)。这就是变分基本引理的直觉核心。
图 4:从上往下看:残差有一段为正,就把扰动放在那里,再把两者相乘。本例的积分约为 0.070620,大于零;沿负的扰动幅度可降低评分。三幅纵轴分别缩放,不能直接比较图形高度;面积数值按原公式计算。
图中的残差来自前面的弯曲基线 (y=x+0.2\sin(\pi x)),此时 (R=-2y’’)。扰动只在 (0.3<x<0.7) 起作用,峰值为 0.1,且足够光滑。不是凭目测涂了一块“正面积”。
把 (R=0) 写回去:
\[\boxed{ \frac{\partial F}{\partial y} -\frac{d}{dx} \left(\frac{\partial F}{\partial y'}\right)=0. }\]这就是欧拉—拉格朗日方程。整体乘以负号,是同一条方程。
整条曲线的评分驻定,经过积分分部,变成每一个位置必须满足的微分方程。
没有从“有限次试验”跳到“一般结论”。关键正是“对所有局部扰动都成立”。
5. 同一条方程,为什么还要认真交代端点?
先用欧拉—拉格朗日方程回到真正的最短曲线:
\[F=\sqrt{1+(y')^2}.\]它不显含 (y),所以方程给出
\[\frac{d}{dx} \left(\frac{y'}{\sqrt{1+(y')^2}}\right)=0.\]括号必须是常量,由此 (y’) 是常量。因此候选驻定线是直线。
固定 ((0,0)) 与 ((1,1)),就选出 (y=x)。它确为全局最短,还可以用向量三角不等式证明,而不是仅凭驻定就下结论。
但如果你悄悄把终点条件换了呢?
图 5:先看上方固定的 B,再看下方可滑动的末端。不是同一道题有两个互相矛盾的答案,而是允许候选的集合变了。两图等比例。
现在仍固定起点 A,只要求终点横坐标为 1,让终点的纵坐标可以改变。
内部方程仍然说“直线”。但最短的,是从 A 水平走到竖直边界,长 1;不是走到原先 B 的斜线。
为什么变分法能知道末端应该水平?
因为这次末端的 (\eta(1)) 不必为零,之前丢掉的边界项不能再丢。驻定条件要求
\[\left.\frac{\partial F}{\partial y'}\right|_{x=1}=0,\]也就是 (y’(1)=0)。这叫这个问题的自然边界条件。
更一般的滑动边界要做相应处理,不能都套用这一个式子。
所以遇见一个变分问题,至少要先问清:评分是什么,允许改什么,两端和其他条件是什么。
只背内部方程,就像拿着导航,却不告诉它目的地到底能不能换。
6. 光的折射:要改的是整条路,为什么只剩一个交点?
接下来换一把尺子:不再算长度,而是算传播时间。
在理想的均匀、无色散介质里,光速为 (v=c/n),(n) 是折射率。
光从 A 到界面,再到 B。每种介质内部的最短时间段是直线,因此在这个简单的平界面问题里,可以把候选压缩成一个交点 (u)。
这不是变分法退化了,而是先利用了均匀区域的结构,把无限多的选择简化了。
设 A 在 ((0,1)) 米,B 在 ((1,-1)) 米,界面为 (y=0)。两介质折射率取 (n_1=1)、(n_2=1.5)。
若交点为 ((u,0)),时间为:
\[\begin{aligned} \mathcal T(u) &=\frac{n_1}{c}\sqrt{1+u^2}\\ &\quad+\frac{n_2}{c}\sqrt{1+(1-u)^2}. \end{aligned}\]式子里的位置数值按米代入,各段根号表示米数;再除以各段速度,结果是秒。
时间驻定要求:
\[n_1\frac{u}{\sqrt{1+u^2}} =n_2\frac{1-u}{\sqrt{1+(1-u)^2}}.\]左、右两项里的分式,分别就是对界面法线量出的角度的正弦。因此:
\[n_1\sin\theta_1=n_2\sin\theta_2.\]斯涅尔折射定律出来了。
图 6:先看金色虚线的几何直路,再比较蓝色折线的时间账。蓝线稍长,却在此模型中用时最少,因为两种介质的速度不同。角度都对法线量,图中横纵等比例;金、灰线只是比较用的候选,不是同时存在的三条实际折射线。
数值结果为 (u\approx0.6232) 米,时间约 9.277 纳秒。几何直线的交点是 (u=0.5) 米,虽然距离最短,却要约 9.323 纳秒;交点取 0 米的候选要约 10.412 纳秒。
这个时间函数的二阶导数始终为正,因此这里确实有唯一的全局最小,不是只找出一个“斜率为零”的点便宣布最优。
费马原理的一般准确表述是传播时间对允许光路变化驻定,不保证每种光学系统都在取最小值,也不是光提前思考了哪里更快。费马原理条目说明了这一限定;OpenStax 折射教材可核对光速、折射率和角度约定。
7. 悬链线:如果链长固定,扰动就不能随便来
再换一把尺子:算重力势能。
一根均匀柔链,两端固定,只受自身重量。在理想静力模型中,它的平衡形状可以从固定链长下的势能极小来寻找。
令 (y) 向上为正,(w) 为每米链的重量,单位牛顿/米。链形写作 (y(x)),则
\[U[y]=\int_a^b wy\sqrt{1+(y')^2}\,dx.\](wy\,ds) 是小链段的重力势能,单位焦耳。
但还必须满足总长固定:
\[C[y]=\int_a^b \sqrt{1+(y')^2}\,dx =\ell_0.\]这一次,“端点不动”还不够。改动也不能让链凭空变长。
图 7:先看三条曲线共享端点,再看下面的长度账。过短的直线与更长的深抛物线都不符合给定链长,不能拿它们的势能直接判输赢。横跨 2 米,纵向相对横向略缩放。
图中蓝色悬链线的长度约为 2.350402 米;同端点直线只有 2 米,构造的更深抛物线长约 2.957886 米。曲线由脚本计算,具体的悬链线方程留在原文解释,这里先抓住“总长必须相同”。
“更低”不等于“同一根链可以做到”。比较对象首先要合法。
拉格朗日乘子,怎样帮忙记住链长?
构造一个增广评分:
\[\widetilde J[y,\lambda] =U[y]+\lambda\bigl(C[y]-\ell_0\bigr).\]这里 (\lambda) 是需要求出的常数乘子,单位为牛顿,才能让 (\lambda C) 与势能同为焦耳。
它不是随意挑一个“罚款力度”,然后希望误差大概不大。对 (\lambda) 的驻定条件直接要求 (C[y]=\ell_0);对 (y) 的驻定条件则给出增广被积函数的欧拉—拉格朗日方程:
\[\widetilde F=(wy+\lambda)\sqrt{1+(y')^2}.\]链形、乘子与边界条件一起求,才是这个受约束问题。
为什么是常数?因为这里限制的是一项全局总长度。若约束在每一时刻或每个位置各有一条,乘子可能要成为相应变量的函数,不能一概照抄。
求出的形状是悬链线;具体的受力推导、双曲函数与桥缆载荷区别,见悬链线文章。
变分法并没有替我们取消物理条件。恰恰相反,它要求把条件写得更清楚。
8. 为什么换成时间,它就能组织拉格朗日力学?
前面的变量 (x) 是空间坐标,未知的是形状 (y(x))。
现在把变量换成时间 (t),未知的是整段运动 (q(t))。评分改成作用量:
\[S[q]=\int_{t_0}^{t_1} L(q,\dot q,t)\,dt.\]对于本文这类保守机械系统,(L=K-U),其中 (K) 是动能,(U) 是势能。作用量的单位是焦耳·秒。
不是把势能积分一下就得到所有运动,也不是始终要求作用量最小。
固定起、终时刻及位置,选择满足两端为零的扰动 (\eta(t)),重复前面的四步:
链式求导,积分分部,消去固定端点的边界项,再利用所有局部扰动。
同一个结构,给出:
\[\boxed{ \frac{d}{dt} \left(\frac{\partial L}{\partial\dot q}\right) -\frac{\partial L}{\partial q}=0. }\]这次的导数是对时间,而不是对空间坐标。
图 8:先比较上方两种积分,再看下面的时间—位移图。蓝线是向下位移 (q=gt^2/2),金虚线只是候选函数,不必满足运动方程;纵轴的数值增加向上画,不代表球在空间中向上爬。
例如,自由落体把向下位移 (q) 取为正,势能为 (U=-mgq),因此
\[L=\frac12m\dot q^2+mgq.\]代入统一方程:
\[m\ddot q-mg=0,\]得到 (\ddot q=g)。从静止释放、令 (q(0)=0),就是 (q(t)=gt^2/2)。
而单摆只要换成前一篇的
\[\begin{aligned} L&=K-U\\ &=\frac12ml^2\dot\theta^2-mgl(1-\cos\theta), \end{aligned}\]同一个运算规则就得到
\[\ddot\theta+\frac{g}{l}\sin\theta=0.\]自由落体、单摆、双摆、刚体,坐标和能量表达式各不相同;但在适用的模型中,列方程的核心结构可以保持一致。
这才是“科学诗篇”背后的统一性。
固定两端比较运动,是数学刻画,不是物体预知未来。实际预测仍要给出初始位置、速度等条件,从运动方程中选出具体运动。
另外,有摩擦、非完整约束或其他不满足当前假设的作用时,要采用合适的广义力、达朗贝尔原理或进一步的形式,不能仅把一切塞进简单的 (K-U) 就结束。
9. 为什么这么多地方都会遇到变分法?
因为不同问题常有相同的数学骨架:
要选择的对象是一整条函数;有一个依赖全局的评分;候选还要满足规定的条件。
如果只看外观,绳子、光线、运动轨迹像三种东西。看评分结构,它们却能共享许多运算。
这也不只限于一条曲线。未知量可以是薄膜在每个位置的高度、场在空间中的分布。变量从一个变成多个,变分方程往往也会从常微分方程走向偏微分方程。
数据平滑中也有类似思想。一个无量纲的连续玩具模型,可以把“贴近已有数据”与“不要过于陡变”相加:
\[J[y]=\int_a^b \left[(y-d)^2+\alpha(y')^2\right]dx.\]这里 (d(x)) 是给定数据函数,(\alpha>0) 是模型选定的平滑权重,不是前面用于强制等长的拉格朗日乘子。
内部驻定方程是
\[y-\alpha y''=d.\]但还要规定边界条件,才能把这变成完整的问题。离散数据的算法需另行离散化;不能因此说所有机器学习都在直接求这条连续方程。
变分法也不是万能钥匙。一个评分可能没有最优解,驻定解可能不是最小,约束可能让问题很难,方程也可能只能数值求解。
它的价值,是把一句含糊的“想要最好”,改写成可以核查的问题。
下次看到“利用变分法可得”,不妨先在心里把这句话展开:
究竟改哪条函数?用什么打分?哪些改动合法?是不是对所有允许扰动的一阶变化都为零?找出驻定以后,有没有证据证明它真的最优?
这些问题问清楚,门就打开了一大半。
参考资料与图解说明
- 哈密顿,1834 年《动力学的一般方法》档案及原文 TeX 转录:实际阅读引言,核对 “a kind of scientific poem” 的原话和上下文;论文刊于《皇家学会哲学汇刊》1834 年第二部分,第 247—308 页,不是把后人转述当成原始引文。
- MIT OCW,分析力学第一章:实际阅读 PDF 第 1.5 节,支持泛函、固定端点扰动、积分分部、欧拉—拉格朗日方程及乘子方法;其作用量部分也说明与力学的联系。
- Euler Archive,E65:欧拉 1744 年变分法著作:支持从特殊极值曲线问题走向一般方法的历史背景。档案区分 1743 年写作与 1744 年出版,不能混为一个年份。
- 圣安德鲁斯大学 MacTutor:拉格朗日:支持 1755 年致欧拉的极值方法、1756 年应用于力学,以及这一统一方法的发展背景。
- OpenStax《大学物理》第三卷:折射:支持 (v=c/n)、斯涅尔定律与角度对法线测量。正文的坐标、交点和纳秒数值是原创计算。
- Fermat’s principle,英文维基百科:作为辅助概念核对,支持一般情形应表述为时间驻定,以及不能赋予光“预知路线”的意图。没有转载条目中的图形。
八幅 SVG 均为原创,由 tools/generate_variations_visuals.py 生成。脚本核对坡度积分、两种曲线弧长、第一变分、局部扰动的积分、固定与自由端点的几何关系、折射角与传播时间、链长,以及自由落体作用量的变化。
唯一的五秒演示是整条曲线随扰动参数变化,不表示真实物体运动。它播放一次后停在基线,正、负候选始终保留,并响应 prefers-reduced-motion: reduce;静态图、数值和推导不依赖动画。