什么是变分法?变分是微分的推广,微分针对的是,一个函数因变量对自变量求导,自变量是一个数值变量;变分针对的是函数的自变量是一个函数。有人说:那不就是微分方程吗?普通微分方程是一个函数和它的导数(或者高阶导数)组成的方程,解方程就是求这个函数;变分法解决的是一个函数及其导数组成另一个复杂函数,然后对这个新函数的定积分求极值,解方程是要求定积分能取到的时候的原函数。
更详细的对比可以参考:知乎:微分、差分和变分的概念有什么异同
欧拉-拉格朗日方程
变分法的核心是Euler-Lagrange 方程。
假设有函数
\[y = y(x)
\]
,满足边界条件
\[y(a)=p, y(b)=q
\]
求函数
\[y
\]
能使下面的定积分
\[\int_{a}^{b}f(y,y')dx
\]
取得极值(最大值或最小值)。
一般的极值问题中,我们求的是自变量x的变化,如何使得函数y取到极值。这个问题是求函数的变化,使得复杂函数f的定积分取得极值。这个定积分就叫y的泛函;y发生微小变化的差异称为变分
微分是函数和自变量发生变化的比值
\[\frac{dy}{dx}
\]
,变分和自变量无关(在泛函中没有自变量一说,自变量变成了参数,作用也无关紧要了),而是函数的变化
\[\delta y
\]
。当变分是
\[\delta y
\]
时,
\[f
\]
的变化是
\[\delta f = \frac{\partial f}{\partial y} \delta y + \frac{\partial f}{\partial y'} \delta y'
\]
定积分的变化是
\[\delta I = \int_{a}^{b} [\frac{\partial f}{\partial y} \delta y + \frac{\partial f}{\partial y'} \delta y'] \textrm{d}x \\
=\int_{a}^{b} \frac{\partial f}{\partial y} \delta y \textrm{d}x + \int_{a}^{b} \frac{\partial f}{\partial y'} \delta y' \textrm{d}x
\]
先看第二项,通过分部积分(分部积分可以参考我之前的文章《分部积分入门》):
\[\int_{a}^{b} \frac{\partial f}{\partial y'} \delta y' \textrm{d}x = \int_{a}^{b} \frac{\partial f}{\partial y'} \textrm{d} (\delta y)\\
=\frac{\partial f}{\partial y'} \delta y|_a^b - \int_a^b \delta y \textrm{d}(\frac{\partial f}{\partial y'})
\]
由于边界条件的限制,上面被减数为0。代回原式,有:
\[\delta I
=\int_{a}^{b} \frac{\partial f}{\partial y} \delta y \textrm{d}x + \int_{a}^{b} \frac{\partial f}{\partial y'} \delta y' \textrm{d}x \\
= \int_{a}^{b} \frac{\partial f}{\partial y} \delta y \textrm{d}x - \int_a^b \delta y \textrm{d}(\frac{\partial f}{\partial y'}) \\
= \int_{a}^{b} \frac{\partial f}{\partial y} \delta y \textrm{d}x - \int_a^b \delta y \frac{\textrm{d}}{\textrm{d}x} (\frac{\partial f}{\partial y'})\textrm{d}x \\
=\int_{a}^{b} [ \frac{\partial f}{\partial y} - \frac{\textrm{d}}{\textrm{d}x} (\frac{\partial f}{\partial y'})] \delta y \textrm{d}x
\]
由于要求极值,所以
\[\delta I =0
\]
,就要求
\[\frac{\partial f}{\partial y} - \frac{\textrm{d}}{\textrm{d}x} (\frac{\partial f}{\partial y'}) = 0
\]
上式就是欧拉-拉格朗日方程。表述过来就是新函数对原函数求导等于新函数对原函数导数求导再对参数求导。
下面通过几个简单的例子加深对其理解。
平面上两点最短路径
给定平面上两点(a,p)和(b,q),连接它们的长度最短的曲线是什么?
这个问题答案非常简单,小学生都知道两点间直线最短。我们用变分法验证一下这个结论。
我们用
\[y(x)
\]
来表示最终的答案,则曲线上相近的两点
\[(x,y),(x+\textrm{d}x, y+\textrm{d}y)
\]
的曲线元长度是
\[\textrm{d}s=\sqrt{\textrm{d}x^2+\textrm{d}y^2}
=\sqrt{1+y'^2}\textrm{d}x\]
曲线的总长度是
\[S=\int_a^b \sqrt{1+y'^2}\textrm{d}x
\]
要使得
\[S
\]
最短,这就是变分法可以使用的特征:定积分最小,新函数
\[f(y,y')=\sqrt{1+y'^2}
\]
,欧拉拉格朗日方程两项分别是
\[\frac{\partial f}{\partial y}=0, \frac{\textrm{d}}{\textrm{d}x}(\frac{\partial f}{\partial y'})=\frac{\textrm{d}}{\textrm{d}x}(\frac{y'}{\sqrt{1+y'^2}})
\]
因为第一项是0,所以第二项也是0:
\[\frac{\textrm{d}}{\textrm{d}x}(\frac{y'}{\sqrt{1+y'^2}})=0
\]
既然一个“复杂”函数对自变量
\[x
\]
的导数是0,那就是说明这个函数是常数,所以
\[k y'=\sqrt{1+y'^2}
\]
,求解得到
\[y'
\]
是一个常数,所以
\[y
\]
是直线:
\[y=\alpha x + \beta
\]
这和前面的结论“平面上两点间直线最短”一致。
最速降线
看完最简单的例子再来看一个最经典的例子:让一个物体从静止开始沿着一个光滑无摩擦的轨道下滑,如果要求下滑过程耗时最短,轨道应该是什么形状?
这就是著名的最速降线问题。当然这个问题不难(对于数学家而言),伯努利家族中两个数学家、牛顿、莱布尼茨、洛必达等都给出了答案。而这个问题就可以使用变分法解决。
一个问题是否使用变分法,一看到问题是没法直接判断的,需要通过建模、验算等过程发现它符合是对二阶微分方程定积分求极值才能确定。所以能用变分法解决的问题通常也有其他多种解法
方便起见,我们建立
\[y
\]
轴向下的坐标系,轨道起点和终点是
\[(0,0),(a,b)
\]
受重力作用,由于没有摩擦力,机械能守恒,当物体下滑到
\[(w,h)
\]
时,它的速度大小是
\[\frac{1}{2}mv^2=mgh \\
v=\sqrt{2gh}
\]
速度是单位时间走过的轨道长度
\[v=\frac{\textrm{d}s}{\textrm{d}t}=\sqrt{1+y'^2}\frac{\textrm{d}x}{\textrm{d}t}
\]
这里的
\[\textrm{d}s
\]
使用了上一个例子中的平面曲线元表示。因为
\[v=\sqrt{2gy}=\sqrt{1+y'^2}\frac{\textrm{d}x}{\textrm{d}t}
\]
(这里用y代替了h),所以
\[\textrm{d}t=\sqrt{\frac{1+y'^2}{2gy}}\textrm{d}x
\]
两边积分:
\[T=\frac{1}{\sqrt{2g}}\int_0^a \sqrt{\frac{1+y'^2}{y}}\textrm{d}x
\]
由于要求总时间最小,所以可以使用欧拉拉格朗日方程:
\[\frac{\partial f}{\partial y}=-\frac{1}{2}\sqrt{\frac{1+y'^2}{y^3}}, \frac{\partial f}{\partial y'}=\frac{y'}{\sqrt{y(1+y'^2)}}
\]
代回欧拉拉格朗日方程:
\[\frac{1}{2}\sqrt{\frac{1+y'^2}{y^3}}+\frac{\textrm{d}}{\textrm{d}x}(\frac{y'}{\sqrt{y(1+y'^2)}})=0 \\
\frac{1}{2}\sqrt{\frac{1+y'^2}{y^3}}+\frac{y''}{\sqrt{y(1+y'^2)}}-\frac{1}2\frac{y'^2}{\sqrt{y^3(1+y'^2)}}-\frac{y'^2y''}{\sqrt{y(1+y'^2)^3}}=0
\]
因为右边是0,所以所有分母都可以去掉,化简得:
\[\frac{1}{2}(1+y'^2)+yy''=0
\]
后面就是微分方程的求解了。
微分方程求解
\[\frac{1}{2}(1+y'^2)+yy''=0\\
\overset{两边乘2y'}{\rightarrow}
y'(1+y'^2)+2yy'y''=0\\
\overset{全微分}{\rightarrow}
[y(1+y'^2)]'=0\\
\overset{常数等价}{\rightarrow}
y(1+y'^2)=k\\
y'^2=\frac{k}{y}-1\\
y'=\frac{\textrm{d}y}{\textrm{d}x}=\sqrt{\frac{k-y}{y}}\\
\frac{\textrm{d}x}{\textrm{d}y}=\sqrt{\frac{y}{k-y}}\\
\overset{两边积分}{\rightarrow}
x(y)=\int \sqrt{\frac{y}{k-y}} \textrm{d}y\\
\overset{令y=k \sin ^2 \theta}{\rightarrow}
x(y)=\int \sqrt{\frac{k \sin ^2 \theta}{k-k \sin ^2 \theta}}\textrm{d}(k \sin ^2 \theta)\\
x(y)=\int 2k \sin ^2 \theta \textrm{d}\theta \overset{余弦二倍角公式}= k\int (1-\cos 2\theta) \textrm{d}\theta\\
x(y)=k\theta - \frac{1}{2} k \sin 2\theta + c\\
\overset{逆变换}{\rightarrow}
x(y)=k \sin ^{-1} \sqrt{\frac{y}{k}} - \sqrt{y(k-y} +c\\
\overset{曲线经过原点得c=0}{\rightarrow}x(y)=k \sin ^{-1} \sqrt{\frac{y}{k}} - \sqrt{y(k-y)}
\]
当
\[(a,b)
\]
是确定的点时可以解出
\[k
\]
的值。
下图中红线是
\[x(y)
\]
的图像
实际上,上面得到的函数表达式对应的是摆线。更多的资料可以自行百度