这篇文章,我将教你五种求解微分方程的方法,这些方法对物理学非常有用。从最简单的方法开始,逐步到最抽象但也最强大的方法。
事实上,每当你想解决物理问题时,你几乎都会遇到一个微分方程。在牛顿力学中,我们要将物体上的所有力相加,将其代入F=ma方程,或者更好地说,m乘以位置的二阶导数,然后求解这个微分方程,得到位置关于时间的函数。
这并不难。但是,当你学习越来越多的物理知识时,你会很快发现F=ma方程可能变得非常难(求解),即使对于一开始看起来相当简单的问题。因此,拥有一个解微分方程的工具包非常重要,你将在整个物理学习过程中遇到许多这样的方程。我们将使用一个最简单但也可以说是经典力学中最重要的微分方程来掌握求解微分方程的方法,即简谐振子方程(simple harmonic oscillator)——就是一个物体连接到弹簧的F=ma方程。
我们首先将看到一些相对基本的方法来解这样的方程,这将在经典力学和更高级的问题中帮助你走得更远,比如通过代换或使用能量守恒来求解。
但是,在我们继续深入学习的过程中,我将向你介绍一些越来越复杂的技巧,如使用级数展开来求解方程,
使用积分变换(如拉普拉斯变换),
最后使用哈密顿方程,
这也为我们提供了一种新的可视化解决方案的方法,称为相空间流(flow on face space),
让我们开始吧。首先,让我快速回顾一下这个微分方程的来源。设置一个质量为m的物体,放在无摩擦的桌子上,连接到一个刚度为K的弹簧。在平衡状态下,弹簧既不拉伸也不压缩,物体可以安静地停在那里,我们称之为x等于零的位置。但是,如果我们将物体从这个位置滑开,弹簧现在会施加一个力-Kx,试图将物体拉回到平衡位置。
那么F=ma方程就是m乘以x的二阶导数(加速度)等于力-kx。
现在假设我们将物体拉到一个初始位置x_0,然后从静止状态释放它。拉伸的弹簧将物体向平衡位置的左侧拉回,但是物体超过了x等于零的位置,向平衡位置的左侧移动。
弹簧被压缩并将物体向右推回,如此反复进行,使物体在平衡位置附近来回振荡。这就是我们所说的简谐运动。现在,让我们看看如何从这个方程中求解运动。我们要求的是x(t),物体位置作为时间的函数,而F=ma方程是一个微分方程,因为它涉及到这个函数的导数。
它表示x关于t的二阶导数等于
下面,我们将探讨五种方法来求解此方程。
首先是第一种方法,这可能听起来有点可笑,但老实说,你可以做的第一件事,特别是对于像这样看起来相对简单的方程,就是尝试猜测解。我们要问自己是否能想到一个函数,当它求导两次时,得到的是x乘以一个负数。
那么满足这种性质的函数是什么呢?利用物理直觉,即物体会在平衡位置附近来回振荡,我们可以想到正弦和余弦这样的函数。所以让我们猜测一个形如
的函数,其中A和ω是我们还不知道的一些常数。我们要看看是否可以选择它们来解方程。我们必须在那里放一些常数,以便获得正确的单位。x应该是一个长度,用米表示。这意味着A的单位也应该是米。括号里,ΩT必须用弧度来衡量,而弧度是无量纲的,所以Ω必须是以弧度/秒为单位,以便抵消时间t的秒单位。
让我们把这个猜测代入方程,看看它是否真的有效。余弦的导数是负的正弦,根据链式法则,我们还需要将其乘以括号里的函数关于t的导数,这会得到一个Ω的因子。现在再求一次导数,得到二阶导数。这次,正弦的导数是余弦,链式法则再次得到一个Ω的因子。
我们的猜测给出了二阶导数,但它能解这个微分方程吗?看起来很有希望,因为它表示x的二阶导数确实等于x乘以一个常数。
我们需要做的就是选择这个数字Ω²,使其与微分方程中出现的k/m的比值相同。那么,如果我们选择这个值作为Ω,
那么x(t) = Acos(ΩT)将确实满足方程。那么这就完了吗?还没有,首先,sin(Ωt)函数也可以满足这个性质,与cos(ωt)一样。因此,更一般地说,我们可以将这两者相加,以得到这种形式的解,
这是有效的,因为微分方程是线性的,这意味着我们只有x及其导数的单次幂。但是我们应该怎么处理这两个常数A和B呢?这让我们想到了关于求解微分方程的一个非常重要的观点:方程本身只是解的一半。我们还必须指定想要满足的初始条件,以便得到具体问题的解。
从物理上讲,这完全有道理。当你把一个球向空中扔去时,我们需要知道你扔球的初始位置和初始速度,以便能够说出它将遵循的轨迹。同样,我们需要知道物体的初始位置和初始速度,以便确定其随后的位置。在这种情况下,我们从x_0的初始位置静止释放物体,这就得到了两个初始条件,
数学上,我们需要两个初始条件的事实是因为微分方程是二阶的,这意味着出现的最高导数是x的二阶导数。当我们将t等于0代入时,正弦消失,余弦等于1,所以我们最好将A设为x_0,以便解具体问题。同样,要让初始速度为零,你会发现我们需要将B设为零,这使我们得到x(t) = x_0cos(Ωt),其中Ω由弹簧的刚度和物体的质量所决定。
这看起来和我们预期的差不多,物体从初始位移x_0处开始静止,当我们松开它时,它在平衡点附近来回振荡,其中Ω控制振荡的速度。所以我们已经解出了这个微分方程,连同初始条件,通过将一个带有常数的猜测或解代入,看看如何选择常数以得到解。这种方法对于像这样的线性方程通常是有效的,
其中A、B和C是一些常数。通常,会选择一个指数函数作为猜测,
把它代入微分方程,看看这些常数的条件如何。现在,我们将继续使用简谐振荡方程,并介绍四种其他非常强大的方法。
当我们将物体的动能(kinetic)与弹簧的势能(potential)相加时,会得到一个常数值,即总能量。
这并不明显,因为随着物体来回滑动,x和dx/dt都会随着时间变化。但是,当我们以这种特殊的组合将它们加在一起时,t消失了,得到了一个常数E。要检查这是否成立,可以对E求导,然后观察其导数是否等于零。
在这种情况下,势能是一个抛物线,
所以当我们在x_0的位置释放物体时,所有的能量都存储在弹簧的势能中。因为是从静止状态释放的物体,所以没有动能。然后,当我们松开它时,物体开始加速,弹簧开始松弛,势能变小,动能增加。当它达到x等于零时,所有的势能都变成了动能。能量在动能和势能之间来回转换,但总能量永远不会改变,它始终保持着最初的值,
我们将看到,可以使用这个能量守恒方程来求解物体的轨迹。这又是一个关于x的微分方程,但请注意,它只涉及x的一阶导数,而不是像F=ma那样的二阶导数。
重新整理一下方程得到,
我还将使用相同的符号Ω平方,表示k和m之间的比率,
最后,我们可以开方,得到一个关于dx/dt的方程,
令人惊讶的是,这个方程告诉我们,物体的速度是它位置x的函数。如果我们知道物体的位置,我们就知道弹簧被拉伸或压缩的程度,因此知道其中存储了多少势能。
然后,能量守恒告诉我们剩余的动能有多少,从而可以知道物体的速度。因此,当物体从x_0被释放时,速度等于零。但是当弹簧将物体拉回到平衡位置,即x等于零时,它加速到最大速度,得到dx/dt等于Ωx_0。
实际上,应该得到负数,因为物体是向左移动的。因此,在开方时应该小心,当物体向左移动时,我们取负号;当它转向并回到右边时,我们取正号。现在我们可以通过再次积分来求解x(t),将平方根分到左边,将dt乘到右边,以分离变量。
接下来我们对这个方程的两边进行积分。右边的积分非常简单,是t加上一些积分常数c。
x的积分有点困难,你可以使用三角函数替换或者直接查表,得到
也可以在这里添加另一个积分常数,但我们可以将其吸收到右边的常数C中。
现在我们求解x,
对两边取余弦,并将x_0移到右边,
差不多完成了。余弦不在乎你输入的是正数还是负数,它是一个偶函数,所以我们可以丢弃加号或减号,
至于C,当插入t等于0时,我们想要得到x_0。所以我们可以将c设置为零。最后,我们得到
和第一种方法得到的结果相同。因此,能量守恒也让我们很容易地得到微分方程的解,实际上,这种方法经常可以成功解决更难的问题,即使第一种方法行不通。
现在我们已经看到了解简谐振子方程的两种不同方法。我现在想向你展示一些更强大的方法,当你面对更难的方程时,它们会派上用场。
这个方法可能是我们在这里看到的所有方法中最通用的,你可以将它应用到几乎所有的微分方程中,以获得精确或者仅仅是近似的解。这个方法的思路是,无论微分方程的解x(t)可能是什么,我们几乎总是可以将其展开为泰勒级数,至少在某个范围内表现良好的情况下是如此。
问题是,我们如何计算出这些系数呢?首先,让我们施加初始条件,当我们将t等于0代入级数展开时,所有的t都消失了,得到x(0)等于a_0,所以我们希望将其设为x_0,以符合物体的初始位置。
要施加初始速度为零的条件,我们需要对级数求导,得到
现在,当我们将t等于0代入时,得到a_1,因此我们希望将其设为零。
目前为止,我们已经找到了a_0和a_1,但仍然有无穷多的系数需要确定。
所以下一步我们需要做的是将展开式代入微分方程,我们需要对级数再求一次导数,以获得加速度,
现在我们将Ω^2·x加到整个式子上,并将整个式子设为零。
整理得到,
如果我们希望用这个级数来解微分方程,所有下面这些红框中的项都需要消失。
每个时间t的系数都要分别等于零,这是唯一可能实现的方法。所以,我们要逐项遍历级数,并要求每个括号中的因子都是零。让我们从奇数项开始,t项的系数是
所以要使其为零,我们需要选择a_3等于零。同样地,我们也可以注意到在t^3项中有一个a_3,所以我们也将其删除,
但现在,t^3项的系数是5·4·a_5,所以要使其为零,我们还需要将a_5设为零。所有奇数项都会发生同样的情况,所以我们得出结论,所有奇数系数都等于零。
现在让我们继续处理偶数项。零次项
等于零,所以我们可以求解出a_2等于
接下来,对于t^2项,将其设为零,再次求解得到a_4,
不要过于担心这些代数运算,关键是你已经看到这里的规律。下面是我们得到的级数解的前几项,
这看起来熟悉吗?整理一下,
现在,这个级数看起来像你知道的任何函数的泰勒级数吗?没错,括号中的求和就是余弦的泰勒级数,所以令人欣慰的是,我们再次发现
正如我所提到的,这样的级数展开是解决各种微分方程的极为通用的方法。它们并不总是能简化为一个简单的函数,但这并不影响它们作为方程解的有效性。让我们继续下一个方法。
使用积分变换来解微分方程,这要更高级一些。有很多种积分变换。对于我们今天要解决的问题,最有用的是拉普拉斯变换。拉普拉斯变换是一种将位置函数x(t)乘以e^(-st),
其中s是一个新的变量,然后对t从0积分到无穷大,
我们称之为,
这种变换在处理微分方程时具有神奇的属性。你应该将其视为这里有两个空间:t空间,原始函数x(t)所在的空间;s空间,原始函数的拉普拉斯变换
所在的空间。
举几个例子,如果x(t)是一个常数,比如x(t)=1,那么它在t空间中就是一条水平线,你可以很容易地证明它在s空间中的拉普拉斯变换(通过进行这个积分)是1/s。
或者对于弹簧上的物体,我们发现(而且马上又会发现)它在t空间中振荡方程是,x(t)=x_0cos(ωt);在s空间中,它的拉普拉斯变换是一个有理函数,即
我们可以通过这个积分从t空间转换到s空间,但这又有什么用呢?为什么会想到这样做?它如何帮助我们解像简谐振子这样的微分方程呢?原因在于拉普拉斯变换在导数上的作用具有美丽而简单的方式。当我们对导数dx/dt进行变换时,它变成了(下红框中的函数)
换句话说,在t空间中求导数等同于在s空间中简单地乘以s,最多只需移位x_0。
这是由于在拉普拉斯变换积分中使用分部积分得出的结果。关键是,由于这个美丽的性质,拉普拉斯变换可以将关于x(t)的微分方程转换为代数方程。让我们看看对于简谐振子方程这是如何工作的。
我们将对等式两边施加拉普拉斯变换。
在右侧,只需对x(t)进行拉普拉斯变换即可。在左侧,我们需要连续两次使用导数规则。经过计算,会得到
将初始条件代入后,
得到,
我们发现当将微分方程转换到s空间时,它变成
正如我前面所说,这里不再有导数。拉普拉斯变换将x(t)微分方程转换成了关于
的代数方程,这个方程更容易解,稍作变换即得到,
这就是在s空间中的解。最后,我们只需要将其转换回t空间。有一个通用公式可以实现这一点,但实际上,很多时候查拉普拉斯变换表会更快。维基百科上就有一个不错的表格,你可以在其中找到你需要的变换。
这个函数是x_0cos(Ωt)的拉普拉斯变换,因此这就是原始方程的解。所以第4种方法是,从线性微分方程开始,应用拉普拉斯变换,试图将其转换成关于
的代数方程,解出代数方程,最后将其转换回x(t)。
我们现在已经进入了最后阶段,也许最迷人的方法就是哈密顿方程和相空间中的流。我们从弹簧上物体的F=ma方程开始。
注意力等于m乘以dx/dt的导数,换句话说,力是动量p的导数,
这就是牛顿第二定律,力-kx等于动量的变化率,
数学上,这使我们可以将最初的二阶微分方程替换为一对一阶方程,
这些被称为哈密顿方程(Hamilton's equations)。这对方程与F=ma包含的内容完全相同。我只是将其分成了两部分。使用一阶方程有一些很大的优势。为了理解它为什么有帮助,让我们画一个以x为横轴,p为纵轴的图。这个图被称为相空间,这个平面上的每个点都告诉我们物体在任何给定时刻的位置和动量(或等效地说,速度)。
例如,当我们将物体拉到初始位置并使其静止时,初始状态对应于这里的水平轴上的点,其中x等于x_0,p等于零。
当松开它时,物体开始移动,
所以这些x和p坐标会随着时间变化,因此这个平面上的点会随着时间移动,并沿着一条曲线移动,这条曲线被称为流(flow)。流确实是一个很好的名字,我希望你能将这个平面想象成一个流动的水面,然后我们拿一个像乒乓球放在初始条件点上。水流会带走球,使其在水面上移动。流就是球在水中所遵循的路径。
那么,究竟什么决定了水流的形状和强度呢?那就是微分方程。
将这两个方程写成一个矢量方程会很有帮助。
在这里,x和p是水面上乒乓球的坐标,它们的时间导数告诉我们每个点上球的速度矢量。在初始点这里,x为正,p为零,那么水平分量的速度矢量为零,垂直分量为负,所以在那一点上,虚构的乒乓球的速度指向正下方。
同样,我们可以在这个平面上的每个点画出这个速度矢量。这些箭头告诉我们平面上的流动如何旋转,并决定了乒乓球将如何移动。
你可以看到它们围绕原点旋转,那是平衡点。我在这里用颜色来表示流的强度,中间黄色箭头的流最小,外围红色箭头的流更大。从初始条件开始沿着这些矢量,我们看到流是一个环绕原点的椭圆,物体在平衡点附近来回振荡。
这是一种更抽象的方式来思考微分方程解。请记住,这里的物理系统是在一维线上来回滑动的物体。显然,实际上没有任何水池或乒乓球,这些只是用来描绘实际情况的有用数学构造。但是,这个图可以帮助我们非常快地了解系统的运动将是什么样子,而无需解任何微分方程。我们需要做的就是在相空间的每个点上画出哈密顿方程右侧的箭头,可以手动画,或者更好的是在计算机上画。这已经是一种非常有用的思考微分方程的方式,但哈密顿表述还为我们提供了一种非常直接的方法来显式地写下解,至少对于类似简谐振子的线性方程,这就是我最后想为你简要概述的内容。
要了解其工作原理,让我们将哈密顿方程表示为矩阵方程。
这看起来好像更复杂了,但先别急。考虑一个简单的微分方程,如
其中α是某个常数。这个方程告诉我们,当对函数z(t)求导时,应该再次得到z,乘以一个数字α。解很简单,是
因为指数的导数就变成了自身乘以链式法则中的α因子,当你=将t=0插入时,你得到初始值z(0)。但请注意,我们的方程对于弹簧上的物体基本上具有相同的形式,只是现在使用向量和矩阵而不是单个数字。它说,向量(x,p)的导数等于它自己乘以一个常数矩阵M。
解只是简单的z方程的矩阵类比,
看起来合理,但当然我们必须问自己,这里的矩阵指数是什么意思。它是通过通常的泰勒级数定义的,
这看起来很可怕,但对于我们这个问题中的矩阵M,答案以一种美丽而简单的方式呈现,
最后,当我们在这里插入初始条件时,得到以下结果:
果不其然,第一行告诉我们
再次证明了解是正确的。因此,我希望我已经说服你,哈密顿方法将二阶方程转换为一对一阶方程非常强大,无论是用矩阵指数显式地解方程,还是将解的行为可视化为相空间上的流。
我们已经看到如何使用五种不同的、越来越复杂的技术来解简谐振子方程。