线性ODE(一)——线性方程的思想与一阶方程

前言

说到常微分方程,很多人可能认为,这是通过各种充满技巧性、构造性的手段直接或者间接求导求积分,而且根本想不出来这些技巧从那里冒出来的。因为这样对,所以这样对,所以我以后就这样套公式,就算出结果来了,一验算确实如此。事情并非如此。的确,常微分方程中有一些问题,现在都没有被研究清楚,但是那些基本的、常见的常微分方程问题,并没有什么看不见摸不着的玄学。在这些理论背后,是微积分、线性代数等等基本工具之间朴素而又美妙的联系。这一系列的博客,正想给读者呈现这一点。我们会遵循这样一个原则:先通过代数,将微分方程的结构厘清,再通过微积分,得到所希望得到的结果。可以看下面这个例子:

image-20200501132151024

假如你需要讨论椭圆x24+y2xy2=1的性质,那你肯定不愿意。这个椭圆在坐标系中是斜着的,如果要计算各种性质的话,那可能是巨大的计算量,得到一个个令人绝望的二次方程,甚至还有分式等等。但是,如果我们把原来的基旋转一个合适的角度,也就是从{E1,E2}旋转到了{E1,E2},那么在这组新基下,它就是一个很平凡的椭圆了,也就是说,我们只需要讨论在这组新基下表示的椭圆方程就行了。看上去很美好,但是实际可行吗?当然可行。这个变换没有改变椭圆的任何性质。椭圆没有平移,没有变形;周长没有变,面积没有变。我们在这组新基下得到的结果,只需要再反转回去,就是原来所求的结果。

还有一个问题:这个旋转是所谓构造性极强、充满技巧的手段吗?是空穴来风吗?不是。这是利用了线性变换,利用了特征值,利用了矩阵的基本性质。此后,再在新基下运用各种直线方程、微积分方法等等,变得非常简单。这就是我们接下来要运用的思想。

一阶线性方程

一阶线性方程的定义与一个物理学实例

我们接下来要解决的是这种类型的方程

dydx+p(x)y=q(x)

只需要yy的次数都是1,而且没有ya(y)b这种形式出现,就是一个一阶(因为y只求导了一次)线性(只有一次项)方程。

这样的方程自然也有自己的实际价值。例如通过电学中的Kirchhoff’s Circuit Laws,对于一个简单的R-L串联电路(串联有一个电阻、一个电感的直流电电路),我们能得到电流强度方程

Ldidt+Ri=E

其中,i(t)表示电流强度,R表示串联的电阻,L表示电感,E表示电压。显然,i=ER就是一个特解。如果我们有L0,那么两边除以L,就能得到

didt+RLi=EL

这里的RL就可以看成p(t)EL可以看成q(t),尽管都是常数。如果解这个方程(解法会在后面介绍,这个解也可以加以验证),能得到

i=ER+Cexp(RLt)

但是考虑到实际情况,开关闭合之前,电流强度是0;直到在闭合的一瞬间t=0时,有i=0。考虑到这一点,就能直接将常数C解出来,也就得到了

i=ER(1exp(RLt))

从电流问题中得到的启发

上一节我们试图探讨R-L串联电路中电流强度的变化,给出了一个有物理意义的方程,并且解了出来。问题是,为什么会出现常数e

我们在高中就学过,(ex)=ex,或者更普遍一点,(Cex)=Cex。如果在x的系数上做文章,有(Ceax)=aCeax。注意,如果我们令y=Ceax,那么我们已经得到了

y+ay=0

这是最简单的一阶线性方程了。Ceax的性质和线性方程吻合得很好。但是上面的方程明显比这个复杂,却还是有一个e在这里。可不可以认为,形如y+ay=b的方程是由y+ay=0进行“调整”得到的?更进一步,方程y+p(x)y=q(x)是不是由y+p(x)y=0衍生出来的?是怎么衍生出来的?这个解的结构是怎样的?

实际情况是,在讨论多元常微分方程组、高阶常微分方程的时候,我们都还是从指数函数出发,从等式右边等于0出发。当然我们现在不应该深入太多。

从高斯消元法到线性微分方程解的结构

高斯消元法,或者是更单纯的求解n元一次方程组的办法,我想读者肯定知道计算原理。我们举一个简单的例子

{x1+2x2+x3=02x1+5x2+x3=10x13x2+3x3=3

通过高斯消元法,或者单纯说是反复给其中两个方程做加减法和代入,能得到

{x1+0x2+3x3=2x2x3=1

x3=t,就能得到x1=23t,x2=1+t。其中tR。这时我们就得到了这个线性方程组的解。为了表示方便,结合矩阵运算的性质,原来的式子可以写成矩阵的形式:

(121251033)(23t1+tt)=(121251033){(210)+t(311)}=0

不妨用A表示这个矩阵,v1=(2,1,0)Tv2=(3,1,1)Tv0=(0,1,3)TT表示转置,这里为了书写简便)。那么可以验证,Av1=v0,而Av2=0。那么这个式子又可以写成

A(v1+tv2)=Av1+tAv2=v0+t0=v0

所以我们想求的未知向量x=v1+tv2由两部分组成:一部分是符合Ax=b的一个特殊解,一部分符合Ax=0,两部分的和代表了所有的解。也就是说,一个线性方程组的解,可能有无穷多个。但是,有一部分保证了解是准确的(也就是上面的v1),有一部分保证解是普遍的(也就是上面的tv2v2指出了解延伸的骨架,t取遍所有实数进行遍历)。

为什么要举高斯消元法这样一个例子呢?这里矩阵乘法是一个线性运算(A(αv+βw)=αAv+βAw),而求导也是一个线性运算((af+bg)=af+bg),也就是说,它们都是“平直”的,是没有让问题变复杂的乘积的。电流方程的通解

i=ER+Cexp(RLt)

很好验证,但是是不是也是这样的结构?对于i1=exp(RLt),通过简单的求导运算可以得到di1dt+RLi1=0。对于i2=ER,我们已经知道它满足原来的方程。所以i=Ci1+i2,代入原来的方程,就有

d(Ci1+i2)dt+RL(Ci1+i2)=EL+C0

这和上面求三元一次方程组得到的结果是类似的。只是形式不同,但是结构相同。i2保证了解的准确性,i1保证解的普遍性,遍历所有结果。求解一阶线性微分方程,我们已经看清了结构(通过高斯消元法的类比),接下来,需要通过微积分的手段,得到一个合适结论。

一阶线性常微分方程的解决办法

形如y+p(x)y=0的方程的解

显然,y=0是这个方程的一个解。如果y0,我们可以将这个方程改写成这个形式

dyy+p(x)dx=0

分别对xy积分,就能得到

ln|y|=p(x)dx+C

又可以写成

y=Cep(x)dx

其中C为常数。C=0时,恰好对应了y=0这个解。的确,如果我们解

didt+RLi=0

就能得到i=Cexp(RLt)

形如y+p(x)y=q(x)的方程的解

事情似乎变得有点蹊跷。难不成要强行凑出一个满足这个方程的解,然后再加上满足y+p(x)y=0的全体解?并非如此。求出一个满足条件的y有很多办法,我会在这里介绍一种比较直观的办法。

实际上,我们知道了q(x)就已经足够了。设有f(x)=ep(x)dx,设全体解是

y(x)=Cf(x)+μ(x)

其中μ(x)满足μ+p(x)μ=q(x)。我们通过已知的fq直接求出μ来,从而求出所有解来。

不妨设μ(x)=f(x)c(x),我们通过几个函数的性质求出c(x)来。对μ求导有

μ(x)=f(x)c(x)+f(x)c(x)=p(x)f(x)c(x)+f(x)c(x)=p(x)f(x)c(x)+q(x)

这里利用了f(x)+p(x)f(x)=0。而f(x)p(x)都是已知的,经过化简就得到了

c(x)=q(x)f(x)

c求积分,就得到(其实这是直接写出来)

c(x)=q(x)ep(t)dtdx

所以全体解就是

y=ep(x)dx(C+q(x)ep(t)dtdx)

这个时候,c(x)ep(x)dx决定了解的准确性,Cep(x)dx决定了解的普遍性。如果我们已经知道了一个特殊值,也就是说y(x0)=y0,那么方程y+p(x)=q(x)的解就可以准确写成

y=y0ex0xp(t)dt+x0xq(s)esxp(t)dtds

这并不是什么生拉硬拽的拼凑和巧合,并不需要所谓灵光一现,需要的是对线性运算的基本理解。

不妨再去验证一下刚开始的那个电路方程是不是符合这一结果。

全体解都被包含了吗?

可能这个结论不具有信服力。是不是漏掉了哪些解?

我们已经知道μ(x)是一个解,不妨再设有一个解y(x),那么y(x)μ(x)是什么样子?如果是Cf(x),那么刚刚好,因为这里的y是任意选取的,这就体现了Cf(x)的普遍性。实际上

(yμ)+p(x)(yμ)=(y+p(x)y)(μp(x)μ)=q(x)q(x)=0

而解yμ,就得到了yμ=Cf(x),所以说,全体解的确是Cf(x)+μ

你已经意识到了,求不定积分也是求一阶线性微分方程

在初学微积分的时候,求不定积分常常要有一个+C。在现在这个框架下这个结果就很明显了。我们求

y=f(x)

其实可以看成求

y+0y=f(x)

y=0解得y=C,又假设我们已经解得一个函数F使得F=f,那么就有

y=F(x)+C

了。F保证解的准确,C保证解的普遍性。

伯努利方程——将方程化为一阶线性方程

有些方程虽然不是一阶线性方程,但是好在我们能将它经过简单的变换,变成一个一阶线性方程。例如这个方程

y=2xy2+arctanx2y

虽然甚至都不是线性方程(因为y有一个次数是1),但是如果令z=y2,就有

2yy=z=2xz+arctanx

这就得到了一个一阶线性方程了(尽管可能很难算)。一般地讲,对于伯努利方程

y+p(x)y=q(x)yn

两边乘以(1n)yn,就能得到

(1n)yny+(1n)y1np(x)=(1n)q(x)

在令z=y1n,就能得到

z+(1n)p(x)z=(1n)q(x)

这就是一个一阶线性方程了,计算就变得很简单。

Comments