文章

变分法,到底在“变”什么?

普通求导改一个数,变分法为何要改整条曲线?八幅原创图与一次小扰动演示,从函数、泛函和第一变分走到欧拉—拉格朗日方程,再用最短路线、折射、悬链线与力学讲清它的用处和边界。

变分法,到底在“变”什么?

有些数学名词,第一次听就像有一道门。

“变分法”就是其中一个。

你在最速下降、悬链线、光的折射、拉格朗日力学里反复遇见它,好像到哪里都能用;可一看公式,又觉得自己只是在围墙外面转圈。

这次我们从最小的问题开始:

普通求导是在改一个数。变分法,是在改什么?

先给答案:它通常把一整条候选函数当作可改变的对象,再问某个“全程评分”能不能达到驻定或最优。

不是让公式自己发生变化,也不是把“微分”改个名字。

哈密顿那句“科学诗篇”倒是很适合作为入口。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.\]

但还要规定边界条件,才能把这变成完整的问题。离散数据的算法需另行离散化;不能因此说所有机器学习都在直接求这条连续方程。

变分法也不是万能钥匙。一个评分可能没有最优解,驻定解可能不是最小,约束可能让问题很难,方程也可能只能数值求解。

它的价值,是把一句含糊的“想要最好”,改写成可以核查的问题。

下次看到“利用变分法可得”,不妨先在心里把这句话展开:

究竟改哪条函数?用什么打分?哪些改动合法?是不是对所有允许扰动的一阶变化都为零?找出驻定以后,有没有证据证明它真的最优?

这些问题问清楚,门就打开了一大半。

参考资料与图解说明

  1. 哈密顿,1834 年《动力学的一般方法》档案及原文 TeX 转录:实际阅读引言,核对 “a kind of scientific poem” 的原话和上下文;论文刊于《皇家学会哲学汇刊》1834 年第二部分,第 247—308 页,不是把后人转述当成原始引文。
  2. MIT OCW,分析力学第一章:实际阅读 PDF 第 1.5 节,支持泛函、固定端点扰动、积分分部、欧拉—拉格朗日方程及乘子方法;其作用量部分也说明与力学的联系。
  3. Euler Archive,E65:欧拉 1744 年变分法著作:支持从特殊极值曲线问题走向一般方法的历史背景。档案区分 1743 年写作与 1744 年出版,不能混为一个年份。
  4. 圣安德鲁斯大学 MacTutor:拉格朗日:支持 1755 年致欧拉的极值方法、1756 年应用于力学,以及这一统一方法的发展背景。
  5. OpenStax《大学物理》第三卷:折射:支持 (v=c/n)、斯涅尔定律与角度对法线测量。正文的坐标、交点和纳秒数值是原创计算。
  6. Fermat’s principle,英文维基百科:作为辅助概念核对,支持一般情形应表述为时间驻定,以及不能赋予光“预知路线”的意图。没有转载条目中的图形。

八幅 SVG 均为原创,由 tools/generate_variations_visuals.py 生成。脚本核对坡度积分、两种曲线弧长、第一变分、局部扰动的积分、固定与自由端点的几何关系、折射角与传播时间、链长,以及自由落体作用量的变化。

唯一的五秒演示是整条曲线随扰动参数变化,不表示真实物体运动。它播放一次后停在基线,正、负候选始终保留,并响应 prefers-reduced-motion: reduce;静态图、数值和推导不依赖动画。

本文由作者按照 CC BY 4.0 进行授权